Dlaczego system Windows 7 korzysta z pliku stronicowania, gdy jest wolna fizyczna pamięć RAM?

43

Używam 64-bitowego systemu Windows 7 z ramą 8G. Po pewnym użyciu Windows wydaje się powolny. Napęd jest wstrząsający. Kiedy patrzę na monitor zasobów i aktywność dysku, widzę kilka przypadków użycia pliku strony (c: \ pagefile.sys). Sprawdzam pamięć fizyczną i widzę około 2,3G dostępnej pamięci i 700M wolnej pamięci.

Dlaczego system Windows nie wykorzystuje więcej wolnej pamięci i mniej pliku strony? Czy trzeba zostawić x wolnej pamięci RAM, ile by to było? Czy to procent fizycznego barana?

Mój plan to dostać więcej pamięci RAM i SSD na dysk główny. Tymczasem cierpię z powodu wolnego działania.

Tony_Henrich
źródło
1
To, że zapisuje / odczytuje plik strony, nie oznacza, że ​​go używamy, może po prostu aktualizować, aby szybciej zrzucić pamięć, jeśli pojawi się nagłe zapotrzebowanie. Polecam uruchomić monitor wydajności lub przeprowadzić dokładną diagnostykę i zobaczyć, co powoduje powolność.
Scott Chamberlain,
Posiadanie więcej niż 8 GB pamięci RAM nie zwiększy wydajności w 99. (9)% przypadków. Czy wypchałeś mobo pełnymi tanimi układami RAM o niskiej częstotliwości / dużym opóźnieniu? Zastąpienie ich byłoby lepszym pomysłem niż dodanie więcej.
kotekzot
3
@kotekzot To zależy. Ogólnie stwierdziłem, że opóźnienie pamięci RAM jest nieco znikome w większości wąskich gardeł. Jeśli ma wystarczającą ilość pamięci, że nie musi czekać na stronicowanie aplikacji, gdy przegląda je wszystkie, wówczas kolejnym największym wąskim gardłem o kilka rzędów wielkości jest prawie zawsze dysk twardy, a dysk SSD to naprawi w górę.
Darth Android
@Jeśli mam więcej pamięci RAM, mogę umieścić plik strony na ramdysku, który jest znacznie szybszy niż dostęp do HD. Jest to poziom stacji roboczej laptopa Dell, więc jestem pewien, że komponenty nie są tanie. Wiem, że laptopy mają wolniejsze dyski twarde i podsystemy IO niż komputery stacjonarne.
Tony_Henrich
1
Nie umieszczaj pliku strony na dysku RAM. Spowoduje to tylko, że system poniesie więcej błędów stron. Tak, jeśli przejdą na dysk-plik-na-RAMdisku, zostaną rozwiązane szybciej niż gdyby trafił na prawdziwy dysk, ale brak ich wcale jest o wiele szybszy; Ponadto wiele zwiększonych błędów stron będzie dotyczyło mapowanych plików, a RAMdisk nie pomoże im wcale.
Jamie Hanrahan

Odpowiedzi:

33

Po pierwsze, nie umieszczaj pliku strony na dysku SSD. Podczas gdy dyski SSD poprawiły się w zakresie wyrównywania zużycia, plik stronicowania jest często zapisywany i spowoduje to degradację dysku SSD znacznie szybciej niż w przypadku ogólnego zastosowania.

Wiele osób nie rozumie, że system Windows nigdy tak naprawdę nie ma wolnej pamięci. Istnieje kilka MB, które są wolne dla żądań serii, ale w przeciwnym razie różnica między aktywną pamięcią aplikacji w użyciu a pamięcią całkowitą jest na ogół zużywana przez tak zwaną pamięć „rezerwową”.

Pamięć systemowa

Są to strony pamięci, które można w razie potrzeby zrzucić (pamięć rezerwowa to świetna, duża pamięć podręczna), więc z punktu widzenia aplikacji jest dostępna, ale w żadnym wypadku nie jest używana. Zwykle działają one jako pamięć podręczna dysku lub pamięć podręczna pliku stronicowania.

Celem systemu Windows jest utrzymanie danych, które najprawdopodobniej zostaną wykorzystane w tej buforie rezerwowej, w oparciu o wzorce użytkowania. Aby użyć wymyślonego przykładu, porównajmy względną wartość pamięci prywatnej programu takiego jak Windows Update (zwykle skonfigurowanego do uruchamiania raz w tygodniu), względem buforowania zawartości pulpitu w tej pamięci rezerwowej:

Przez większość czasu Windows Update śpi. Zatrzymuje pamięć i przez większość czasu nie robi z nią absolutnie nic wartościowego, czekając na nadejście harmonogramu. Z drugiej strony zawartość twojego folderu na pulpicie może być ciągle przeszukiwana, szczególnie jeśli lubisz zapisywać w nim pliki.

W tym przypadku system Windows odrzuci pamięć przydzieloną do usługi Windows Update (nawet jeśli pamięć nie jest „pełna”) i wykorzysta miejsce dostępne w pamięci RAM do buforowania zawartości pulpitu. Spowoduje to lepszą wydajność ty.

Windows podejmuje tysiące takich decyzji i zarządza pamięcią podręczną dysku dla setek plików stale zapisywanych przez usługi działające w tle, próbując zrównoważyć to z zapotrzebowaniem pamięci aktywnych aplikacji. Czasami źle się dzieje przez chwilę i może być konieczne poczekanie, aż dane zostaną ponownie zapisane w pamięci, gdy przełączamy się do aplikacji, która od jakiegoś czasu śpi w tle. Ale o czym musisz pomyśleć, gdyby utrzymywał tę aplikację całkowicie w pamięci, ile innych aplikacji utknęłoby w pamięci, czekając na zakończenie zapisu lub odczytu dysku, lub same byłyby zmuszone do przewrócenia strony? Co jeśli były to aplikacje, których używasz w międzyczasie?


Aplikacje często przydzielają strony pamięci, które są używane bardzo rzadko, takie jak kod startowy (używany raz, a potem niepotrzebny), kod zamykający (używany raz, a następnie niepotrzebny) lub kod aktualizacji. Trzymanie tego wszystkiego w pamięci nie jest praktyczne, gdy są o wiele ważniejsze zastosowania, więc kiedy Windows zidentyfikuje sekcje kodu, które nie były potrzebne do bieżącej pracy aplikacji, z przyjemnością wysyła te sekcje do pliku strony, nawet jeśli technicznie mógłby je zachować w pamięci.

(I w rzeczywistości, w zależności od aplikacji, systemy często przydzielają więcej pamięci, niż faktycznie mają, oczekując, że większość z nich skończy na stronie. Jeśli patrzysz na szczegółowy podział pamięci, opłata za „Zatwierdź” lub „Zatwierdź” to ilość pamięci, jaką Windows przydzielił różnym aplikacjom. Plik strony służy do zapewnienia gwarancji dla tej pamięci, nawet jeśli nie ma wystarczającej ilości fizycznej pamięci RAM, aby ją pokryć.)


Zauważyłem, że w swoim pytaniu rozróżniasz dostępną i wolną pamięć; Przepraszam, jeśli czujesz się wykładowcą i już znasz różnicę. Idealnie, wolna pamięć jest zawsze równa 0. Jednak chociaż pamięć rezerwowa jest pamięcią, którą można zwolnić, nie zawsze pamięć może zostać szybko zwolniona. Jeśli spróbuję zapisać plik o pojemności 1 GB na dysku, system Windows umieści go w pamięci podręcznej dysku, jeśli to możliwe, a następnie powoli zapisze go na dysku twardym w tle. Jeśli aplikacja musi zażądać 50 MB dodatkowej pamięci, ale żadna nie jest dostępna, ponieważ ta ogromna pamięć podręczna dysku jest wciąż usuwana, aplikacja zawiesi się, dopóki nie będzie dostępna. Trzymanie pod ręką małego bufora pozwala systemowi rozwiązać ten problem z minimalnym opóźnieniem z punktu widzenia użytkownika.

Darth Android
źródło
6
@FrankComputer Zobacz zrzut ekranu, który zamieściłem dla mojego systemu roboczego 8 GB: 6300 MB w użyciu, 1700 MB rezerwowego dysku / pamięci podręcznej, 42 MB wolnego. Patrząc na mój system domowy (pamięć 32 GB), faktycznie masz rację, ale tylko niewłaściwy próg: 9,2 GB w użyciu, 14,5 GB pamięci podręcznej dysku, 8,6 GB za darmo. Będziesz miał wolną pamięć, jeśli system Windows po prostu skończy się pamięć podręczna, ale ten próg jest dość wysoki. System Windows nie zmienia się stale, ponieważ pamięć podręczna dysku nie jest przestrzenią wymiany - jest pasywnie buforowana, gdy żądane są pliki, a nie w pamięci podręcznej. Nie zauważasz, kiedy pobiera się z pamięci podręcznej i nie ma aktywności na dysku twardym.
Darth Android
8
@FrankComputer: Jeśli twój system działa dobrze, to nie z powodu wolnej pamięci. Wolna pamięć to pamięć, której system nie używa i nie może mieć większego wpływu na wydajność niż pamięć siedząca na biurku. Jedynym sposobem na poprawę wydajności dzięki pamięci jest użycie jej, więc jeśli jest darmowa, nie jest używana do poprawy wydajności. Zwiększenie ilości wolnej pamięci oznacza mniejsze zużycie i pogorszenie wydajności.
David Schwartz
1
@Tony_Henrich Wyłączenie pliku strony jest złe. Bardzo źle. (Przeniesienie pliku stronicowania na ramdysk jest tak samo skuteczne, jak jego wyłączenie. Windows nie jest w stanie przenieść danych, których nie potrzebuje natychmiast z pamięci). Wiele programów żąda pamięci, której nie potrzebują od razu, ale mogą potrzebować w przyszłości. Zazwyczaj system Windows przydziela tę pamięć do pliku strony i nic nie robi. Na przykład. Serwer MSSQL przydziela 8 GB pamięci RAM podczas uruchamiania. Nawet dla 0 baz danych. Właśnie dlatego. Jeśli umieścisz plik stronicowania na ramdysku, zmarnujesz znaczne ilości pamięci RAM, które w przeciwnym razie można by wykorzystać na pamięć podręczną
Darth Android
1
@Tony_Henrich Obecnie system Windows optymalnie zarządza plikiem strony i pamięcią RAM, biorąc pod uwagę sposób korzystania z systemu. Jedyne ulepszenia, które możesz na nim wprowadzić, to: Dodaj więcej pamięci lub przenieś swój system operacyjny na dysk SSD. Zablokowanie pliku strony w najlepszym wypadku obniży ogólną wydajność systemu lub w najgorszym wypadku wpłynie na stabilność systemu.
Darth Android
1
Wyjaśniasz, co Windows robi z pamięcią. Jeśli mam dużo wolnej pamięci, system Windows powinien z niej korzystać, niezależnie od tego, czy aplikacja śpi, czy nic nie robi. Jaka jest szkoda w utrzymywaniu go w pamięci, gdy pamięć jest dostępna. Gdy zabraknie pamięci, system Windows może skorzystać z pliku stronicowania. Korzystanie z pliku strony powoduje zużycie dysku. Korzystanie z pamięci nie powoduje zużycia. Po drugie, używam dysku SSD do pliku strony. Podczas gdy dyski SSD są mniejsze niż dyski twarde, a ich zużycie wiąże się z dużą ilością zapisów, wciąż nie trwa to nawet kilka miesięcy. To wciąż lata.
Tony_Henrich,
4

Nazywa się to planowaniem z wyprzedzeniem.

Dobrze jest zapisywać strony pamięci w pliku stronicowania, gdy jest jeszcze dużo pamięci RAM. Gdy tylko program zażąda więcej pamięci niż jest wolna, system operacyjny może jak najszybciej zwolnić miejsce. Lepiej przygotować się teraz niż później.

Jeśli system operacyjny miałby poczekać, napotkasz wąskie gardło wydajności. Jeśli program prosi o więcej pamięci niż jest dostępne, teraz musisz poczekać, aż system operacyjny wypisze zmieniony blok pamięci, a następnie zwolnić je.

surfasb
źródło
W przypadku 16G + i lekkich programów czasy, w których program prosi o więcej pamięci niż w wolnej pamięci, są znacznie mniejsze niż częste użycie pliku strony. W takich przypadkach lepiej jest użyć wolnej pamięci i mniej pliku strony. Nie ma jednego rozwiązania, które pasowałoby do wszystkich przypadków.
Tony_Henrich,
1
Nie sądzę, że to rozumiesz. To nie musi być jedno lub drugie. System Windows może zapisywać w wolnej pamięci i zapisywać w pliku stronicowania. To nie jest jak zapisywanie do pliku strony lub zapisywanie w pamięci.
surfasb
1
Ale starając się planować z wyprzedzeniem, czy system Windows potencjalnie nie zapełnia pamięci podręcznej HDD / SDD na chipie - co spowalnia jednoczesne zapisywanie / ładowanie plików? Ta zamiana pamięci RAM wydaje się dobrym pomysłem, ale wygląda na to, że przypadkowo obciąża system w złych momentach.
binki
1
@binki: Tak, to zakłóca czasy odczytu / zapisu na dysku, ale jeśli pamiętam, używają niższego priorytetu, więc inne operacje odczytu i zapisu powinny być na ogół pierwsze.
Mooing Duck
2

Plik stron był wyłączony przez ostatnie 7 lat. Właściwie to pierwsza rzecz, którą robię po świeżej instalacji. Nigdy nie miałem z tym problemu. (Właściwie miałem jedną grę o nazwie „Titan Quest”, wykonałem bardzo głupią kontrolę przy starcie, więc utworzyłem plik strony o wielkości 4 MB, aby go uszczęśliwić, i później wyłączyłem PF). Co do pierwotnego pytania. Windows używa naszej pamięci RAM do buforowania I / O dysku. Z jakiegoś powodu uważa, że ​​pamięć podręczna dysku jest równie ważna dla kodu i danych aktywnych programów. I nie ma możliwości ograniczenia rozmiaru pamięci podręcznej dysku. Jest tam z założenia i nie możemy nic z tym zrobić ... Och, czekaj! Możemy! Po prostu wyłącz plik stronicowania. Używasz aplikacji obciążających pamięć RAM? Kup więcej pamięci RAM lub zamknij jedną aplikację przed uruchomieniem innej. Możesz użyć Process Explorer, aby zobaczyć, ile pamięci jest zużyte w danym momencie.

Anton Duzenko
źródło
1
Pozbycie się pliku stronicowania nie wyłączy buforowania dysku.
Jamie Hanrahan,
1
Napisałeś: „[Buforowanie dysku] jest już zaprojektowane i nie możemy nic z tym zrobić. Och, czekaj! Możemy! Po prostu wyłącz plik stronicowania”. Wyłączenie pliku strony nie ma nic wspólnego z buforowaniem dysku, więc co mówisz? To i tak głupi pomysł, ponieważ zmusza system operacyjny do zachowania wszystkich prywatnych zmian w pamięci RAM na zawsze po ich dotknięciu. Zmniejsza to ilość miejsca na mapowaną pamięć wirtualną (jak kod), więc elementy muszą być stronicowane bardziej. Proaktywna pamięć podręczna dysku (superpobieranie) wykorzystuje to, co zostało po tych wszystkich czynnościach, więc nie zwiększa stronicowania żadnego z nich.
Jamie Hanrahan,
1
Nigdy nie powiedziałem (ani nie pomyślałem), że wyłączenie pliku stron to twój pomysł, więc nie mówiłem nic o „twoim pomyśle”. Och, skoro jestem tutaj: „Z jakiegoś powodu [Windows] uważa, że ​​pamięć podręczna dysku jest równie ważna dla kodu i danych aktywnych programów” jest całkowicie błędna. Funkcja Superfetch korzysta tylko ze stron znajdujących się na liście w trybie gotowości, a zatem jest już częścią „ available "RAM; nie pobiera stron z kodu i danych programów. I te strony pozostają dostępne, tj. natychmiast dostępne dla kodu i danych programów, nawet jeśli zawierają buforowane dane z plików.
Jamie Hanrahan
1
Nie mówię nic takiego. (Skąd to masz?) Mówię jednak, że Windows nigdy niczego nie wysyła, aby zrobić miejsce na pamięć podręczną dysku. Wręcz przeciwnie, pamięć podręczna wykorzystuje strony, które nie są obecnie częścią procesów i dlatego zostałyby zmarnowane. Takie pozostałości RAM natychmiast dostępne do kodu i danych, który potrzebuje go do przywoływania rzeczy w , więc to nie jest „zużyty” przez cache, tylko „pożyczył”. Pamięć podręczna nie zmniejsza więc ilości kodu i danych, które mogą być stronicowane lub przechowywane w pamięci RAM. Patrz: Windows Wewnętrzne autorstwa Solomona, Russinovicha i Ionescu.
Jamie Hanrahan
1
Już odpowiedziałem w odpowiedzi DA. Ale to, co właśnie powiedziałeś, nie jest tym, co powiedział. Powiedział, że Windows odrzuca długo nieaktywne procesy (prawda). Powiedział też, że pamięć podręczna dysku może wykorzystać zwolnione strony (również prawda). Ale to nie znaczy, że pamięć podręczna dysku ma koniecznie pierwszeństwo. Pamięć podręczna dysku używa tych stron tylko wtedy, gdy nie potrzebuje ich nic o wyższym priorytecie. Ogromna ilość testów wykazała, że ​​jest to dobry kompromis.
Jamie Hanrahan
1

Argumenty ( tu i tutaj ) do przechowywania i używania pliku strony, nawet jeśli jest wystarczająca ilość pamięci RAM, to:

  • Nawet jeśli teraz jest wolna pamięć, w urządzeniu może zabraknąć pamięci później. Lepiej wcześniej upuścić mało używane części pamięci na dysk.
  • Istnieje również pamięć „rezerwowa”, która wydaje się wolna, ale w rzeczywistości jest używana do buforowania dysku. Jest to również ważne dla wydajności, lepiej mieć trochę.
  • Jeśli zabraknie pamięci RAM przy wyłączonym pliku strony, nastąpi poważna awaria.
  • Podczas gdy 2, 4, 16 lub jakakolwiek inna liczba GB pamięci RAM może wyglądać jak „dużo”, może to nie być tak prawdziwe, jak myślisz. Musisz się profilować.

Za pomocą Monitora zasobów Windows można zobaczyć, ile pamięci RAM jest używane do buforowania (pokazane jako „Tryb gotowości”).

Jeśli zauważysz, że pamięć RAM jest faktycznie używana lub w trybie gotowości, plik strony jest dla Ciebie przydatny. Jeśli połączenie twoich zadań i dostępnej pamięci RAM powoduje, że znaczna część pamięci pojawia się jako nieużywana („wolna”), myślę, że nie ma potrzeby szlifowania dysku twardego tylko z szacunku dla kogoś, kto „wie lepiej i powiedział to tutaj „.

h22
źródło
-2

Brakuje wszystkich tych komentarzy i poprawnej odpowiedzi. Wyłącz plik strony. Nie jest potrzebny z 8 GB pamięci RAM, a jeśli potrzebujesz więcej pamięci RAM, kup ją. naprawdę bardzo proste.

a2552308
źródło
4
System Windows jest dość sprytny w określaniu, co (nie) umieścić w pliku strony. Z wyjątkiem niektórych niemal czysto teoretycznych scenariuszy, wyłączenie go pogorszy wydajność, nawet przy 8 GB pamięci RAM. Nawet jeśli brakuje poprawnej odpowiedzi, to na pewno nie to.
Marcks Thomas
4
Masz jakieś dowody na poparcie roszczenia o „szkodę”? Prezentuję artykuł MS support.microsoft.com/kb/889654
a2552308,
6
Mówiąc wprost: pliki stronicowania mogą tylko zwiększyć aktywność dysku ... a system Windows nie jest wystarczająco inteligentny, aby go wcale nie używać, jeśli ma dużo pamięci RAM. W systemie SSD może to nie być zbyt zauważalne, w systemie wrzeciona może to mieć duży wpływ na wydajność aplikacji. Zobacz oryginalny plakat.
a2552308,
2
Odpowiednia sekcja z artykułu MS: „Jednak w miarę dodawania większej ilości pamięci RAM do komputera zmniejsza się potrzeba pliku strony. Jeśli masz wystarczająco dużo pamięci RAM zainstalowanej na komputerze, możesz nie wymagać wcale pliku strony, chyba że jest wymagany przez określoną aplikację. ” Nie mogłem znaleźć odpowiednich sekcji z wielu artykułów, które łączyłeś, może mógłbyś zacytować odpowiednie sekcje?
a2552308,
2
Brzmi dobrze w teorii, ale nie to, co zaobserwowałem w praktyce.
a2552308,