Zamiana najwyraźniej miała miejsce, gdy nieaktywne strony RAM były faktycznie aktywne.
( Aktualizacja: jak wyjaśniono w komentarzu, to nie jest twój przypadek. Dlatego osoby z tym samym problemem mogą przejść do reguły poziomej ).
Tzn. Masz uruchomionych wiele programów, a jądro zamieniło niektóre strony. Potem opuściłeś niektóre programy. Jądro oznacza strony RAM jako nieaktywne. Ale nie zamieni stron z powrotem do pamięci RAM, dopóki te strony nie będą potrzebne. Powoduje to, że strony są zarówno nieaktywne, jak i zamienione.
Dlaczego nie zapobiegawczo zamienić strony? Ponieważ byłoby to obstawianie przeciwko kursowi: na dłuższą metę przegrywasz. Pomyślmy o uproszczonym przykładzie: dwa programy A i B, które nie mieszczą się w pamięci RAM jednocześnie. Program A nadal działa, a wszystkie zamienione strony należą do A. Program B został zamknięty, a wszystkie nieaktywne strony należą do B.
Jeśli jądro zapobiegawczo zamienia strony A i natychmiast po:
- program A musi uzyskać dostęp do swoich stron -> Wygrywasz - strony są już w pamięci RAM.
- ponownie uruchamiasz B -> przegrywasz - "zapłaciłeś" koszt przeniesienia stron do pamięci RAM i teraz musisz je odesłać.
- uruchamiasz inny program C -> Przegrywasz, jeśli A i C nie mieszczą się jednocześnie w pamięci RAM. Jeśli pasują, jesteś równy.
Weź również pod uwagę, że zamiana (zapis na dysk) jest droższa niż zamiana (odczyt z dysku). Co sprawia, że ten „zakład” jest jeszcze bardziej nieaktywny.
Krótko mówiąc: zaufaj swojemu jądru i nie próbuj go przechytrzyć.
Aktualizacja:
okazuje się, że nieaktywna pamięć nie działa, ponieważ artykuł Korzystanie z Monitora aktywności do czytania artykułu Pamięć systemowa spowodował, że wiele osób uważa, że działa. Definicja podana w artykule dla nieaktywnej pamięci jest poprawna:
Ta informacja znajduje się w pamięci RAM, ale nie jest aktywnie wykorzystywana, została niedawno wykorzystana.
Ale poniższy przykład jest całkowicie mylący i nadmiernie uproszczony (tak jak mój przykład szczerze mówiąc):
Na przykład, jeśli korzystasz z Mail, a następnie go opuszczasz, pamięć RAM, z której korzystał Mail, jest oznaczana jako pamięć nieaktywna. Nieaktywna pamięć jest dostępna do użycia przez inną aplikację, podobnie jak Wolna pamięć. Jeśli jednak otworzysz Maila, zanim jego nieaktywna pamięć zostanie użyta przez inną aplikację, Mail otworzy się szybciej, ponieważ jego nieaktywna pamięć jest konwertowana na pamięć aktywną, zamiast ładować ją z wolniejszego napędu.
Szukałem więcej zasobów online i znalazłem ten wątek na liście mailingowej jądra darwina, co jest dość pouczające. Cytując Jima Magee (z zespołu Darwina - tak myślę):
Krótko mówiąc, system VM jądra, gdy ma do czynienia z ciśnieniem pamięci, skanuje strony w użyciu i stara się zachować równowagę między aktywnymi i nieaktywnymi znakami. Nieaktywne strony są skanowane w celu ponownego użycia, a jednocześnie oznaczone jako nieaktywne. Jeśli zostały ponownie użyte, są oznaczone jako aktywne, a niektóre inne strony muszą przejść ze stanu aktywnego do nieaktywnego, aby wykryć, czy jest aktywne. Tak więc nieaktywne jest mylące. Jest to skrót od „prawdopodobnie nieaktywny, spróbujmy to zweryfikować”.
Jak odkryłeś, saldo wewnętrzne, do którego dążymy (obecnie), wynosi około 2/3 aktywności vs 1/3 nieaktywności ...
To wyjaśnia zachowanie, które obserwujesz. Oznacza to, że nieaktywne strony, które widzisz, należą do uruchomionych programów, które nie były ostatnio używane. Kiedy uruchamiasz nowy program, nieaktywne strony są zamieniane. Jednocześnie strony z innych programów są oznaczone jako nieaktywne, aby utrzymać stosunek 2/1 między aktywnym a nieaktywnym.
Nitka zawiera także pewne sugestie, aby dowiedzieć się więcej na temat wewnętrznych Darwin. Istnieją również pewne sugestie na wypadek, gdybyś zaczął badać wykorzystanie pamięci z powodu problemów z piłką plażową (które zwykle mają z tym niewiele wspólnego).
Wniosek pozostaje ten sam: zaufaj swojemu jądru i nie próbuj go przechytrzyć. :-)