Condividi tramite


Adattamento dinamico alle dimensioni dell'applicazione (DATAS)

L'adattamento dinamico alle dimensioni delle applicazioni (DATAS) GC mira ad adattarsi ai requisiti di memoria dell'applicazione. Ciò significa che le dimensioni dell'heap dell'applicazione devono essere approssimativamente proporzionali alle dimensioni dei dati di lunga durata. Se l'app esegue lo stesso lavoro quando viene eseguita su computer con specifiche diverse, le dimensioni dell'heap sono uguali o simili. Inoltre, se il carico di lavoro diventa più leggero o pesante, le dimensioni dell'heap vengono modificate di conseguenza.

Al contrario, la modalità Server GC mira a migliorare la velocità effettiva e considera il processo come quello dominante nel computer. La quantità di allocazioni consentita prima di attivare il GC successivo è basata sulla velocità effettiva, non sulle dimensioni dell'applicazione. Può aumentare l'heap in modo aggressivo se è necessario e c'è memoria disponibile. Questa crescita può comportare dimensioni dell'heap molto diverse quando si esegue il processo su computer con specifiche hardware diverse. L'heap può aumentare notevolmente quando si sposta il processo in un computer con molti più core e più memoria. Server GC non regola necessariamente l'heap in modo aggressivo se il carico di lavoro diventa molto più leggero.

DATAS consente la maggior parte dei carichi di lavoro "bursty" in cui le dimensioni dell'heap devono essere modificate in base alla richiesta del carico di lavoro, in particolare quando la domanda diminuisce. Ciò è particolarmente importante negli ambienti con vincoli di memoria, in cui è importante adattarsi a più processi quando alcuni carichi di lavoro di alcuni processi si illuminano. Consente anche di pianificare la capacità. DATAS è stato introdotto come funzionalità di consenso esplicito in .NET 8 ed è abilitato per impostazione predefinita in .NET 9.

Descrizione delle funzionalità

Per ottenere l'adattamento delle dimensioni delle app e mantenere comunque prestazioni ragionevoli, DATAS esegue le operazioni seguenti:

  • Imposta la quantità massima di allocazioni consentite prima dell'attivazione del GC successivo in base alle dimensioni dei dati di lunga durata. Ciò consente di vincolare le dimensioni dell'heap.
  • Imposta la quantità effettiva di allocazioni consentite in base alla velocità effettiva.
  • Regola il numero di heap quando necessario. Inizia con un heap, il che significa che se sono presenti molti thread allocati, alcuni dovranno attendere. Ciò influisce negativamente sulla velocità effettiva. DATAS aumenta e riduce il numero di heap in base alle esigenze. In questo modo, si tratta di un ibrido tra le modalità GC esistenti, in grado di usare solo un heap (ad esempio workstation GC) e quante corrisponde al numero di core del computer (ad esempio server GC).
  • Quando necessario, esegue la compattazione completa dei controller di dominio per evitare che la frammentazione venga troppo elevata, che consente anche di vincolare le dimensioni dell'heap.

Risultati benchmark

Le immagini seguenti mostrano alcuni risultati di benchmark per TechEmpower JSON e Fortunes Benchmarks. Si noti la riduzione significativa del working set quando si eseguono i benchmark in un computer a 48 core con Linux. La velocità effettiva massima (misurata in RPS) mostra una riduzione del 2-3%, ma con un miglioramento del set di lavoro superiore all'80%.

Miglioramento del set di lavoro.

Con DATAS abilitato, il numero di GC Gen0 e Gen1 è notevolmente superiore.

Conteggi di Gen0 e Gen1.

Come disabilitare DATAS

Se si nota una riduzione della velocità effettiva, è possibile disabilitare DATAS usando varie impostazioni. Per maggiori informazioni, consultare la sezione Adattamento dinamico alle dimensioni dell'applicazione (DATAS).