次の方法で共有


アプリケーションサイズへの動的適応 (DATAS)

アプリケーション サイズへの動的適応 (DATAS) GC は、アプリケーションのメモリ要件に適応することを目的としています。 つまり、アプリケーションのヒープ サイズは、長期間保存されるデータのサイズにほぼ比例するはずです。 アプリが異なる仕様のマシンで実行されて同じ作業を行っている場合、ヒープ サイズは同じか類似します。 また、ワークロードが軽くなったり重くなったりすると、それに応じてヒープ サイズが調整されます。

対照的に、 サーバー GC モードはスループットの向上を目的としており、プロセスをマシン上の主要なプロセスとして扱います。 次の GC をトリガーする前に許可される割り当て量は、アプリケーションのサイズではなく、スループットに基づきます。 必要に応じて、使用可能なメモリがあれば、ヒープを積極的に拡張できます。 この増加により、ハードウェア仕様が異なるマシンでプロセスを実行すると、ヒープ サイズが大きく異なる可能性があります。 より多くのコアとメモリを備えたマシンにプロセスを移動すると、ヒープはさらに大きくなる可能性があります。 また、サーバー GC は、ワークロードが大幅に軽減された場合でも、必ずしもヒープを積極的に調整するわけではありません。

DATAS は、特に需要が減少するにつれて、ワークロードの要求の厳しさに応じてヒープ サイズを調整する必要がある「バースト」ワークロードに最も役立ちます。 これは、一部のプロセスのワークロードが軽減されたときに、より多くのプロセスを適合させることが重要となる、メモリが制限された環境では特に重要です。 容量計画にも役立ちます。 DATAS は .NET 8 でオプトイン機能として導入され、.NET 9 ではデフォルトで有効になっています。

機能の説明

アプリ サイズの適応を実現しながらも適切なパフォーマンスを維持するために、DATAS は次の処理を実行します。

  • 長期データのサイズに基づいて、次の GC がトリガーされる前に許可される割り当ての最大量を設定します。 これはヒープ サイズを制限するのに役立ちます。
  • スループットに基づいて、許可される実際の割り当て量を設定します。
  • 必要に応じてヒープの数を調整します。 最初は 1 つのヒープから始まるため、割り当てるスレッドが多数ある場合は、一部のスレッドは待機する必要があります。 それはスループットに悪影響を及ぼします。 DATAS は必要に応じてヒープの数を増やしたり減らしたりします。 このように、これは既存の GC モードのハイブリッドであり、最小 1 つのヒープ (ワークステーション GC など) からマシンのコア数と同じ数 (サーバー GC など) のヒープまで使用できます。
  • 必要に応じて、断片化が過度に高くなるのを防ぐために完全圧縮 GC を実行し、ヒープ サイズの制限にも役立ちます。

ベンチマーク結果

次の画像は、TechEmpower JSON および Fortunes ベンチマークのベンチマーク結果の一部を示しています。 Linux を搭載した 48 コア マシンでベンチマークを実行すると、ワーキング セットが大幅に減少することに注意してください。 最大スループット (RPS で測定) は 2 ~ 3% 減少しますが、ワーキング セットは 80% 以上改善されます。

ワーキングセットの改善。

DATAS を有効にすると、Gen0 および Gen1 GC の数が大幅に増加します。

Gen0 と Gen1 がカウントされます。

DATASを無効にする方法

スループットの低下に気付いた場合は、さまざまな設定を使用して DATAS を無効にすることができます。 詳細については、 アプリケーション サイズへの動的適応 (DATAS)を参照してください。