Jaką skalę lub miarę stosuje się do „presji pamięci” Mavericks i Yosemite?

57

Monitor aktywności Mavericks (a także Yosemite) pokazuje nowy schemat, ciśnienie pamięci . Niestety tekst pomocy wyjaśnia niejasno, co dokładnie mierzy. Jak obliczane jest ciśnienie pamięci?

Monitor aktywności Mavericks - pamięć

Napisy do zdjęć znajdują się w tej odpowiedzi z pytania ankiety dotyczącej najlepszej nowej funkcji Mavericks.

Jens Erat
źródło

Odpowiedzi:

51

Ciśnienie pamięci nie jest prostym miernikiem procentowym wolnej pamięci i wydaje się być wykresem od 0 do 100%. sysctlWartość vm.memory_pressureoblicza się w stosunku do obliczonej celu śledzącym stosunek wolnych i nieaktywnych stron pamięci na stronach przewodowych i aktywnych. Liczniki absolutne są przeglądane za pomocą vm_statnarzędzia wiersza polecenia, aby sprawdzić szczegółowy przydział pamięci wirtualnej. Jonathan Levin ma doskonałą dokumentację na stronie http://newosxbook.com/articles/MemoryPressure.html obejmującą pamięć wirtualną macOS i iOS oraz sposób obliczania presji pamięci, a także działań podejmowanych, gdy indeks ciśnienia jest wysoki.

Odpowiednią pamięcią wirtualną (vm), która zasila obliczenia, vm.memory_pressuresą:

  • vm.page_free_count - bezwzględna liczba bezpłatnych stron
  • vm.vm_page_free_target - obliczony cel lub cel w sytuacji „bezciśnieniowej”
  • vm.page_free_wanted - co system Vm chciałby uwolnić, aby złagodzić bieżący obliczony wskaźnik ciśnienia

Tak więc - jeśli śledzisz swoje ciśnienie pamięci za pomocą Monitora aktywności (lub sprawdzam programowo wartości sysctl lub w powłoce wiersza poleceń), dobrze byłoby spojrzeć na te cztery wartości:

sysctl -a vm | egrep "page_free|pressure"

W memory_pressureMavericks wprowadzono nowe polecenie, a kiedy uruchomię je, aby doprowadzić podsystem pamięci do stanu ostrzegawczego - ciśnienie w pamięci wzrośnie do żółtego zakresu.

wyniki monitorowania aktywności <code> sudo memory_pressure -l warn </code>

Narzędzie przeznaczono około 4 GB pamięci do narzędzia jako wykres ciśnienia wzrastała do tego państwa, w którym widocznie poziom „ostrzeżenie” jest wykresie: sudo memory_pressure -l warn. Jak widać, w systemie przed ciśnieniem wykorzystano 5,9 GB, a po nim użyto do 7,99 GB, co nawet nie wymaga sumowania z powodu zamiany i kompresji.

Po obejrzeniu vm_stat 15pokazanego wyniku ostrzeżenia w braku mierzalnego stronicowania, zamknąłem narzędzie (Control-C), a następnie ponownie uruchomiłem narzędzie, aby krytyczne ciśnienie pamięci:sudo memory_pressure -l critical

Nie pozwalałem na to przez dłużej niż kilka minut, ponieważ zaczynało się stronicowanie, a gdy narzędzie powiedziało, że mam 5 GB pamięci RAM na stronie, nie chciałem zapełniać dysku i wyłączać narzędzia.

wyniki monitorowania aktywności <code> sudo memory_pressure -lryt </code>

Możesz zaobserwować, jak szybko system zwolnił pamięć RAM po zakończeniu ostrzeżenia, a także jak zmienił się na „czerwone” terytorium, aby pokazać, że system pamięci wirtualnej nie może skompresować wystarczającej liczby stron, aby uniknąć zamiany na dysk. Moje wykształcone przypuszczenie, że presja na czerwono wskazuje na zamianę i dramatyczny nadmierny przydział i / lub czas, w którym liczba wolnych stron jest niższa niż ilość preferowana przez system i aktywnie usuwa nieaktywne strony i / lub strony, które mają zostać użyte do zamiany. Podobnie system szybko się regeneruje po zwolnieniu przydziałów i odciążeniu systemu pamięci wirtualnej.

bmike
źródło
Dziękuję za wyjaśnienie. Chciałbym wiedzieć, czy na powyższym zrzucie ekranu istnieje polecenie (lub zestaw poleceń), które obliczają parametry pamięci wirtualnej, pamięci podręcznej plików i pamięci aplikacji.
Muhammad Hassan Nasr
@MuhammadHassan Poniższa odpowiedź zawiera ładne streszczenie inżynierii wstecznej algorytmu i wskazuje, gdzie szukać wewnętrznych elementów w xnuotwartym kodzie źródłowym. Wyciągnąłem 4 uwzględnione wartości, które są najbardziej odpowiednie dla wyświetlania ciśnienia w graficznym interfejsie użytkownika.
bmike
30

Aby nieco wyjaśnić i sprecyzować to przypuszczenie: presja pamięci jest miarą używaną przez jądro (xnu) z dedykowanym wątkiem o nazwie memory_status (wcześniej znanym jako Jetsam). Wątek ten jest odpowiedzialny za wykrywanie, kiedy dostępna ilość pamięci RAM jest niska - co w OS X może wymusić zamianę, a w iOS zabija aplikację zajmującą najwięcej pamięci (ponieważ nie ma zamiany). W Mavericks oba systemy operacyjne są bliżej siebie. Memorystatus wydaje notatkę jądra, którą środowisko wykonawcze Obj-C ostatecznie przekłada na appDidReceiveLowMemoryWarning. Aplikacje mają wyczyścić nieużywaną lub obcą pamięć (na przykład pamięci podręczne). LibC Darwina automatycznie usuwa pamięć.

Istnieje specyficzne (choć nieudokumentowane) wywołanie systemowe, vm_pressure_monitor (# 296, jeśli dobrze pamiętam), które pozwala klientowi nasłuchiwać zdarzeń ciśnienia i zobaczyć, ile stron fizycznych można odzyskać.

Możesz przeglądać zdarzenia nacisku na Mavericks za pomocą Process Explorera dla OS X - do pobrania ze strony http://newosxbook.com/index.php?page=downloads . To pokazuje zarówno „manometr”, jak i zdarzenia ciśnienia.

Po prostu pomagam
źródło
Na tej stronie znajduje się również szczegółowy artykuł - newosxbook.com/articles/MemoryPressure.html - opisujący presję pamięci i obsługę w OS X i iOS
61711
Niesamowite szczegóły na temat podobieństw i różnic między jądrem Mavericks a jądrem iOS. Dziękujemy za link do Process Explorer.
bmike
14

Ciśnienie pamięci jest definiowane przez dwa liczniki, które Mach zachowuje wewnętrznie:

  • vm_page_free_count: Ile stron pamięci RAM jest obecnie wolnych
  • vm_page_free_target: Ile stron pamięci RAM powinno być co najmniej optymalnie wolnych.

Możesz je łatwo zobaczyć za pomocą sysctl:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

jeśli ilość darmowych stron spadnie poniżej docelowej kwoty - mamy presję.


Od http://newosxbook.com/articles/MemoryPressure.html

Nie
źródło