DATAS (Dynamic Adaptation To Application Sizes)
Le GC DATAS (Dynamic Adaptation To Application Sizes) s'efforce de s’adapter aux besoins en mémoire de l’application. Cela signifie que la taille du tas de l’application doit être proportionnelle à celle des données à longue durée de vie. Si votre application effectue le même travail lorsqu’elle s’exécute sur des machines avec des spécifications différentes, la taille du tas est identique ou similaire. Et si votre charge de travail devient plus légère ou plus lourde, la taille du tas est ajustée en conséquence.
En revanche, le GC de serveur s'efforce d'améliorer le débit et traite le processus comme le processus dominant sur l’ordinateur. Le volumed’allocations qu'il autorise avant de déclencher le GC suivant est basé sur le débit, et non sur la taille de l’application. Il peut faire croître le tas de manière agressive en cas de besoin et dès lors que de la mémoire est disponible. Cette croissance peut entraîner des tailles de tas très différentes lorsque vous exécutez le processus sur des machines avec des spécifications matérielles différentes. Le tas peut croitre dans des proportions beaucou plus importantes lorsque vous déplacez votre processus sur une machine dotée d'un plus grand nombre de cœurs et d'une mémoire plus importante. Le GC de serveur n’ajuste pas nécessairement le tas de manière agressive si la charge de travail devient beaucoup plus légère.
DATAS est utile à la plupart des charges de travail « en rafales » où la taille du tas doit être ajustée en fonction des exigences de la charge de travail, en particulier lorsque celles-ci diminuent. Ceci est particulièrement important dans les environnements où la mémoire est limitée et où il est important d'adapter davantage de processus lorsque la charge de travail de certains d'entre eux s'allège. Cela facilite également la planification de la capacité. DATAS a été introduit en tant que fonctionnalité optionnelle dans .NET 8 et est activé par défaut dans .NET 9.
Description de la fonctionnalité
Pour réaliser cette adaptation à la taille de l’application et conserver des performances raisonnables, DATAS procède comme suit :
- Il fixe le nombre maximum d'allocations autorisées avant le déclenchement du prochain GC en fonction de la taille des données à longue durée de vie. Cela permet de limiter la taille du tas.
- Il définit la quantité réelle d'allocations autorisées en fonction du débit.
- Il ajuste le nombre de tas si nécessaire. Il commence avec un seul tas, ce qui signifie que s'il y a beaucoup de threads en cours d'allocation, certains devront attendre. Cela a un impact négatif sur le débit. DATAS augmente et réduit ensuite le nombre de tas en fonction des besoins. Il s'agit donc d'une solution hybride entre les modes de GC existants, capable d'utiliser uniquement un seul tas (comme le GC de station de travail) et autant que le nombre de cœurs de la machine (comme le GC de serveur).
- Lorsque c'est nécessaire, il compacte complètement les GC pour éviter que la fragmentation ne devienne trop importante, ce qui permet également de limiter la taille des tas.
Résultats du point de référence
Les illustrations suivantes montrent quelques résultats de tests pour les benchmarks TechEmpower JSON et Fortunes. Notez la réduction significative du working set lors de l'exécution des benchmarks sur une machine à 48 cœurs sous Linux. Le débit maximal (mesuré en RPS) montre une réduction de 2 à 3 %, mais avec une amélioration de plus de 80 % du working set
Avec DATAS activé, le nombre de GC Gen0 et Gen1 est beaucoup plus élevé.
Comment désactiver DATAS
Si vous constatez une réduction du débit, vous pouvez désactiver DATAS à l'aide de différents paramètres. Pour plus d’informations, voir Dynamic adaptation to application sizes (DATAS).