Partilhar via


Adaptação dinâmica aos tamanhos das aplicações (DATAS)

Adaptação dinâmica a tamanhos de aplicações (DATAS) O GC visa adaptar-se aos requisitos de memória da aplicação. Isso significa que o tamanho da pilha do aplicativo deve ser aproximadamente proporcional ao tamanho dos dados de longa duração. Se seu aplicativo estiver fazendo o mesmo trabalho quando for executado em máquinas com especificações diferentes, o tamanho da pilha será o mesmo ou semelhante. E se a sua carga de trabalho se tornar mais leve ou mais pesada, o tamanho da pilha é ajustado de acordo.

Em contraste, o modo GC do servidor visa melhorar a taxa de transferência e trata o processo como o dominante na máquina. A quantidade de alocações que ele permite antes de acionar o próximo GC é baseada na taxa de transferência, não no tamanho do aplicativo. Ele pode crescer a pilha agressivamente se precisar e houver memória disponível. Esse crescimento pode resultar em tamanhos de heap muito diferentes quando você executa o processo em máquinas com especificações de hardware diferentes. A pilha pode crescer muito quando você move seu processo para uma máquina com muito mais núcleos e mais memória. O GC do servidor também não necessariamente ajusta o heap agressivamente se a carga de trabalho se tornar muito mais leve.

O DATA ajuda mais com cargas de trabalho "estouradas", onde o tamanho da pilha deve ser ajustado de acordo com o quão exigente a carga de trabalho é, particularmente à medida que a demanda diminui. Isso é especialmente importante em ambientes com restrição de memória, onde é importante ajustar mais processos quando as cargas de trabalho de alguns processos diminuem. Também ajuda no planejamento de capacidade. DATA foi introduzido como um recurso de aceitação no .NET 8 e é habilitado por padrão no .NET 9.

Descrição das funcionalidades

Para obter a adaptação do tamanho do aplicativo e ainda manter um desempenho razoável, a DATA faz o seguinte:

  • Ele define a quantidade máxima de alocações permitidas antes que o próximo GC seja acionado com base no tamanho dos dados de longa duração. Isso ajuda a restringir o tamanho da pilha.
  • Ele define a quantidade real de alocações permitidas com base na taxa de transferência.
  • Ajusta o número de pilhas quando necessário. Ele começa com uma pilha, o que significa que se houver muitos threads alocando, alguns precisarão esperar. Isso afeta negativamente a taxa de transferência. DATA cresce e reduz o número de pilhas conforme necessário. Desta forma, é um híbrido entre os modos GC existentes, capaz de usar apenas um heap (como GC de estação de trabalho) e tantos quantos correspondem à contagem de núcleo da máquina (como GC de servidor).
  • Quando necessário, ele compacta totalmente os GCs para evitar que a fragmentação fique muito alta, o que também ajuda a restringir o tamanho da pilha.

Resultados de benchmark

As imagens a seguir mostram alguns resultados de benchmark para TechEmpower JSON e Fortunes Benchmarks. Observe a redução significativa no conjunto de trabalho ao executar os benchmarks em uma máquina de 48 núcleos com Linux. A taxa de transferência máxima (medida em RPS) mostra uma redução de 2-3%, mas com uma melhoria do conjunto de trabalho de mais de 80%.

Melhoria do conjunto de trabalho.

Com DATA habilitado, o número de GCs Gen0 e Gen1 é significativamente maior.

Gen0 e Gen1 contam.

Como desativar DATAS

Se você notar uma redução na taxa de transferência, poderá desativar DATAS usando várias configurações. Para obter mais informações, consulte Adaptação dinâmica a tamanhos de aplicativos (DATAS).