애플리케이션 크기에 대한 동적 적응(DATAS)
애플리케이션 크기에 대한 동적 적응(DATAS) GC는 애플리케이션 메모리 요구 사항에 적응하는 것을 목표로 합니다. 즉, 애플리케이션 힙 크기는 수명이 긴 데이터 크기에 대략적으로 비례해야 합니다. 앱이 다른 사양을 가진 컴퓨터에서 실행할 때 동일한 작업을 수행하는 경우 힙 크기는 동일하거나 유사합니다. 그리고 작업량이 가벼워지거나 무거워지면 힙 크기가 그에 따라 조정됩니다.
반면, 서버 GC 모드는 처리량 향상을 목표로 하며 해당 프로세스를 머신의 주요 프로세스로 처리합니다. 다음 GC를 트리거하기 전에 허용하는 할당 양은 애플리케이션 크기가 아닌 처리량을 기반으로 합니다. 필요하고 사용 가능한 메모리가 있는 경우 힙을 공격적으로 늘릴 수 있습니다. 하드웨어 사양이 다른 컴퓨터에서 프로세스를 실행할 때 이러한 증가로 인해 힙 크기가 매우 달라질 수 있습니다. 프로세스를 더 많은 코어와 더 많은 메모리를 갖춘 컴퓨터로 옮기면 힙이 훨씬 더 커질 수 있습니다. 또한 서버 GC는 워크로드가 훨씬 가벼워지면 힙을 공격적으로 조정하지 않습니다.
DATAS는 특히 수요가 감소할 때 워크로드의 수요에 따라 힙 크기를 조정해야 하는 '버스트' 워크로드에 가장 유용합니다. 이는 일부 프로세스의 워크로드가 가벼워졌을 때 더 많은 프로세스를 수용해야 하는 메모리 제약이 있는 환경에서 특히 중요합니다. 용량 계획에도 도움이 됩니다. DATAS는 .NET 8에서 옵트인 기능으로 도입되었으며 .NET 9에서는 기본적으로 사용하도록 설정됩니다.
기능 설명
앱 크기를 조정하면서도 합리적인 성능을 유지하기 위해 DATAS는 다음을 수행합니다.
- 수명이 긴 데이터 크기에 따라 다음 GC가 트리거되기 전에 허용되는 최대 할당 양을 설정합니다. 이렇게 하면 힙 크기를 제한하는 데 도움이 됩니다.
- 처리량을 기준으로 실제 허용되는 할당량을 설정합니다.
- 필요한 경우 힙 수를 조정합니다. 하나의 힙으로 시작하므로 할당하는 스레드가 많으면 일부는 대기해야 합니다. 이는 처리량에 부정적인 영향을 줍니다. DATAS는 필요에 따라 힙의 수를 늘리거나 줄입니다. 이 방식은 기존 GC 모드의 하이브리드 방식으로, 워크스테이션 GC처럼 힙을 하나만 사용하거나 서버 GC처럼 머신 코어 수에 맞는 만큼만 사용할 수 있습니다.
- 필요한 경우 전체 압축 GC를 수행하여 조각화가 너무 높아지는 것을 방지하므로 힙 크기를 제한하는 데도 도움이 됩니다.
벤치마크 결과
다음 이미지는 TechEmpower JSON 및 Fortunes 벤치마크의 일부 벤치마크 결과를 보여줍니다. Linux를 사용하여 48코어 컴퓨터에서 벤치마크를 실행할 때 작업 집합이 크게 감소합니다. 최대 처리량(RPS로 측정)은 2~3% 감소했지만 작업 세트는 80% 이상 개선되었습니다.
DATAS를 활성화하면 Gen0 및 Gen1 GC의 수가 훨씬 더 많아집니다.
DATAS를 비활성화 방법
처리량이 감소하는 경우 다양한 설정을 사용하여 DATAS를 비활성화할 수 있습니다. 자세한 내용은 애플리케이션 크기에 대한 동적 적응(DATAS)을 참조하세요.
.NET