Dynamiczna adaptacja do rozmiarów aplikacji (DATAS)
Dynamiczna adaptacja do rozmiarów aplikacji (DATAS) GC ma na celu dostosowanie się do wymagań dotyczących pamięci aplikacji. Oznacza to, że rozmiar sterty aplikacji powinien być w przybliżeniu proporcjonalny do rozmiaru danych długotrwałych. Jeśli aplikacja wykonuje tę samą pracę, gdy działa na maszynach z różnymi specyfikacjami, rozmiar sterty jest taki sam lub podobny. A jeśli obciążenie stanie się lżejsze lub cięższe, rozmiar sterty jest odpowiednio dostosowywany.
Natomiast tryb GC serwera ma na celu zwiększenie przepływności i traktowanie procesu jako dominującego na maszynie. Ilość alokacji, którą umożliwia przed wyzwoleniem następnego GC, jest oparta na przepływności, a nie na rozmiarze aplikacji. Może rosnąć sterta agresywnie, jeśli musi i jest dostępna pamięć. Ten wzrost może spowodować bardzo różne rozmiary sterty podczas uruchamiania procesu na maszynach z różnymi specyfikacjami sprzętowymi. Sterta może być znacznie większa, gdy proces zostanie przeniesiony na maszynę z większą liczbą rdzeni i większą ilością pamięci. Serwer GC również nie musi dostosowywać sterta agresywnie, jeśli obciążenie stanie się znacznie lżejsze.
Usługa DATAS pomaga najbardziej w przypadku obciążeń "pęknięciowych", w których rozmiar sterty powinien być dostosowywany zgodnie z tym, jak wymagające jest obciążenie, szczególnie w miarę spadku zapotrzebowania. Jest to szczególnie ważne w środowiskach ograniczonych pamięci, w których ważne jest, aby zmieścić więcej procesów, gdy obciążenia niektórych procesów są rozjaśnione. Pomaga również w planowaniu pojemności. Usługa DATAS została wprowadzona jako funkcja zgody na platformę .NET 8 i jest domyślnie włączona na platformie .NET 9.
Opis funkcji
Aby osiągnąć dostosowanie rozmiaru aplikacji i nadal zachować rozsądną wydajność, usługa DATAS wykonuje następujące czynności:
- Ustawia maksymalną dozwoloną ilość alokacji przed wyzwoleniem następnego GC na podstawie rozmiaru danych długotrwałych. Pomaga to ograniczyć rozmiar sterty.
- Określa rzeczywistą ilość przydziałów dozwolonych na podstawie przepływności.
- W razie potrzeby dostosowuje liczbę stertów. Zaczyna się od jednego sterta, co oznacza, że jeśli istnieje wiele wątków przydzielanych, niektóre będą musiały czekać. To negatywnie wpływa na przepływność. Dane rosną i zmniejszają liczbę stertów zgodnie z potrzebami. W ten sposób jest to hybryda między istniejącymi trybami GC, które mogą używać nawet jednej sterty (takiej jak GC stacji roboczej) i tyle, ile odpowiada liczbie rdzeni maszyny (na przykład GC serwera).
- W razie potrzeby wykonuje pełne kompaktowanie kontrolerów domeny, aby zapobiec zbyt dużej fragmentacji, co pomaga również ograniczyć rozmiar sterty.
Wyniki testu porównawczego
Na poniższych obrazach przedstawiono wyniki testów porównawczych dla technologii TechEmpower JSON i Fortunes Benchmarks. Zwróć uwagę na znaczną redukcję zestawu roboczego podczas uruchamiania testów porównawczych na 48-rdzeniowej maszynie z systemem Linux. Maksymalna przepływność (mierzona w usłudze RPS) pokazuje zmniejszenie o 2–3%, ale z poprawą zestawu roboczego wynoszącą ponad 80%.
Po włączeniu usługi DATAS liczba kontrolerów GCs gen0 i Gen1 jest znacznie wyższa.
Jak wyłączyć usługę DATAS
Jeśli zauważysz zmniejszenie przepływności, możesz wyłączyć usługę DATAS przy użyciu różnych ustawień. Aby uzyskać więcej informacji, zobacz Dynamiczna adaptacja do rozmiarów aplikacji (DATAS).