Dynamisk anpassning till programstorlekar (DATAS)
Dynamisk anpassning till programstorlekar (DATAS) GC syftar till att anpassa sig till programminneskraven. Det innebär att programmets heapstorlek bör vara ungefär proportionell mot datastorleken för lång livslängd. Om appen utför samma arbete när den körs på datorer med olika specifikationer är heapstorleken densamma eller liknande. Och om din arbetsbelastning blir lättare eller tyngre justeras heapstorleken i enlighet med detta.
Server GC-läget syftar däremot till att förbättra dataflödet och behandlar processen som den dominerande på datorn. Mängden allokeringar som tillåts innan nästa GC utlöses baseras på dataflöde, inte programstorlek. Det kan växa heap aggressivt om det behöver och det finns minne tillgängligt. Den här tillväxten kan resultera i mycket olika heapstorlekar när du kör processen på datorer med olika maskinvaruspecifikationer. Heapen kan bli mycket större när du flyttar processen till en dator med många fler kärnor och mer minne. Server GC justerar inte heller nödvändigtvis heapen aggressivt om arbetsbelastningen blir mycket lättare.
DATAS hjälper mest med "bursty"-arbetsbelastningar där heapstorleken ska justeras beroende på hur krävande arbetsbelastningen är, särskilt när efterfrågan minskar. Detta är särskilt viktigt i minnesbegränsade miljöer där det är viktigt att passa in fler processer när vissa processers arbetsbelastningar blir lättare. Det hjälper också till med kapacitetsplanering. DATAS introducerades som en opt-in-funktion i .NET 8 och är aktiverad som standard i .NET 9.
Funktionsbeskrivning
Datas gör följande för att uppnå anpassning av appstorlek och fortfarande upprätthålla rimliga prestanda:
- Den anger den maximala mängden allokeringar som tillåts innan nästa GC utlöses baserat på den långlivade datastorleken. Detta hjälper till med att begränsa heapstorleken.
- Den anger den faktiska mängden allokeringar som tillåts baserat på dataflödet.
- Det justerar antalet heaps när det behövs. Det börjar med en heap, vilket innebär att om det finns många trådar som allokerar, måste vissa vänta. Det påverkar dataflödet negativt. DATAS växer och minskar antalet heaps efter behov. På så sätt är det en hybrid mellan de befintliga GC-lägena, som kan använda så få som en heap (t.ex. arbetsstation GC) och så många som matchar antalet maskinkärnor (till exempel server GC).
- Vid behov utför den fullkomprimering av GC:er för att förhindra att fragmenteringen blir för hög, vilket också hjälper till att begränsa heapstorleken.
Benchmark-resultat
Följande bilder visar några benchmark-resultat för TechEmpower JSON och Fortunes Benchmarks. Observera den betydande minskningen av arbetsuppsättningen när du kör riktmärkena på en 48-kärns dator med Linux. Maximalt dataflöde (mätt i RPS) visar en minskning med 2–3 %, men med en arbetsuppsättningsförbättring på över 80 %.
Med DATAS aktiverat är antalet Gen0- och Gen1-GCs betydligt högre.
Så här inaktiverar du DATAS
Om du märker en minskning av dataflödet kan du inaktivera DATAS med hjälp av olika inställningar. Mer information finns i Dynamisk anpassning till programstorlekar (DATAS).