Windows kompresuje zawartość pamięci RAM, aby więcej w niej zmieścić i uniknąć stosowania pliku wymiany. Wynika to z założenia, że operacje dyskowe zawsze będą wolniejsze niż obciążanie procesora. Dlatego lepsza jest kompresja niż stronicowanie.
W przypadku posiadania dużej ilości pamięci RAM, automatyczne udogodnienia oraz stronicowanie mogą zacząć przeszkadzać, zamiast pomagać w wydajności. Kontrola nad systemowym menedżerem pamięci jest bardzo ograniczona. Windows przechowuje jego konfigurację w gałęzi Rejestru "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management", ale ustawienia dotyczą głównie automatycznych adaptacji i rozmiarów plików.
Ograniczone możliwości
Dokumentacja przełącznika FeatureSettings, potencjalnie kontrolującego zachowanie menedżera, nie jest dostępna. Niektóre tajemnicze opcje pojawiają się czasem jako mitygacje dla problemów typu Meltdown i Spectre. Istnieje tylko kilka dostępnych mechanizmów kontroli nad zarządzaniem pamięcią:
- całkowite wyłączenie stronicowania (usunięcie pliku wymiany)
- wyłączenie wstępnego ładowania do pamięci (prefetch)
- wyłączenie wstępnego uruchamiania (prelaunch)
- łączenie stron pamięci RAM (page combining)
- kompresja wykorzystywanej pamięci RAM
Dalsza część artykułu pod materiałem wideo
Całkowite wyłączenie pliku wymiany może być niewskazane, między innymi ze względu na zgodność. Podobnie ostrożnie należy podchodzić do wyłączania mechanizmów prefetch/preload, które mimo pozornej nieprzydatności mogą mieć istotny wpływ na prędkość uruchamiania aplikacji niestartujących w tle (choć istotność metody prefetch wciąż spada, ze względu na zmianę natury pracy z dzisiejszymi komputerami).
Wyłączenie kompresji
Najmniej inwazyjne wydaje się wyłączenie kompresji pamięci - acz nie wolno zapomnieć, że wpływ wyłączenia go na wzrost wydajności może być niezauważalny lub trudny do oszacowania. Jest to wszystko efektem braku kontroli nad wykorzystywaniem pliku wymiany w Windows - funkcjonalności eksponowanej w systemach linuksowych pod nazwą "swappiness". W Windows możemy zmienić rozmiar, lokalizację i obecność pliku wymiany.
O tym, czy kompresja pamięci jest włączona, dowiemy się w sekcji Pamięć w Menedżerze Zadań. Podaje on wartość poddaną kompresji - zazwyczaj jest ona dość niska: RAM, z definicji bardzo różnorodny, słabo się kompresuje. Ale niska prędkość dysków w porównaniu z procesorem i RAM-em może czynić nawet tak skromny zysk uzasadnionym. Aby wyłączyć kompresję pamięci, należy skorzystać z systemowej kolekcji MMAgent w środowisku PowerShell. Następujące polecenie:
Disable-MMAgent -MemoryCompression
Doprowadzi do zatrzymania procesu kompresji pamięci. Skompresowana zawartość nie będzie już kompresowana ponownie po zmianach, podobnie jak nowa pamięć. Wkrótce potem ilość raportowanej pamięci skompresowanej spadnie do zera. Jeżeli wyłączenie kompresji nie zwiększy wydajności lub pogorszy ją (co zdecydowanie może mieć miejsce w zauważalny sposób na systemach gdzie jest jej mniej niż 8GB!), można włączyć kompresję ponownie, poleceniem:
Enable-MMAgent -MemoryCompression
Jeżeli wyłączenie kompresji pamięci oraz pliku wymiany nie przekładają się na ogólny wzrost wydajności komputera z dużą ilością RAM-u, możliwe jest, że jest to granica wydajności możliwej do osiągnięcia na danym sprzęcie i optymalizacji należy szukać gdzie indziej. W tym celu potrzebne będzie bardziej zaawansowane profilowanie, przy którym warto mieć na uwadze, że rzadko da się sensownie opisać wydajność całego komputera jedną liczbą.
Kamil J. Dudek, współpracownik redakcji dobreprogramy.pl