Compartilhar via


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

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

Por outro lado, 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 permitidas antes de disparar o próximo GC é baseada na taxa de transferência, não no tamanho do aplicativo. Ele pode aumentar o heap agressivamente se necessário 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. O heap 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 de forma agressiva se a carga de trabalho se tornar muito mais leve.

O DATAS ajuda mais com cargas de trabalho "intermitentes" em que o tamanho do heap deve ser ajustado de acordo com a exigência da carga de trabalho, principalmente à 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. O DATAS foi introduzido como um recurso opcional no .NET 8 e é habilitado por padrão no .NET 9.

Descrição do recurso

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

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

Resultados do parâmetro de comparação

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 um computador de 48 núcleos com Linux. O rendimento máximo (medido em RPS) mostra uma redução de 2 a 3%, mas com uma melhoria do conjunto de trabalho de mais de 80%.

Melhoria do conjunto de trabalho.

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

Contagens Gen0 e Gen1.

Como desativar o 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 aos tamanhos de aplicativo (DATAS).