Dlaczego Windows zużywa tyle RAM?


Zaczęło się od pewnego stwierdzenia na blip.pl.

image “No masakra, ale mi Windows połyka RAM”

Ale nie jest to pierwsze pytanie tego typu jakie widziałem. Ale do napisania paru słów natchnęła mnie odpowiedź innego użytkownika blip.pl na to powyższe stwierdzenie.

image “I znowu to samo, naprawdę chcesz, by Twój RAM się marnował nie używany?”

A że pytań faktycznie jest trochę, to pomyślałem, że spróbuję napisać w kilku zdaniach dlaczego ten Windows “zużywa” tyle tego RAMu.

Jak to jest z tą wydajnością?

Dwa słowa wstępu. Jedną z poważniejszych rzeczy nad jakimi przysiedli inżynierowie tworzący kolejny system operacyjny (czyli Windows 7) była właśnie wydajność.

Pierwsze pytanie jakie się pojawia to – jak rozumieć wydajność? Czy będzie to:

  • ilość zajętego RAMu,
  • ilość wolnego RAMu,
  • czas reakcji komputera na nasze kliknięcia
  • czas uruchamiania się programów
  • czas startu systemu operacyjnego
  • uśpienie / obudzenie komputera

Nie ma jednoznacznej odpowiedzi na to pytanie, ale bardzo duża grupa osób myśli, że mała ilość dostępnej pamięci RAM oznacza, że Windows ją zjada i jest przez to mało wydajny.

Czy Windows marnuje RAM?

WIndows już w poprzedniej wersji (w Windows Vista) pokazał mechanizm SuperFetch. Miał on za zadanie ładować pewne dane do pamięci – te które system uznał za takie, które często używamy. Nawet jeśli w danej chwili zupełnie ich nie używaliśmy.

Miało to powodować dużo szybsze i wydajniejsze korzystanie z tych danych – bo zawsze były dostępne w pamięci, gdzie dostęp jest dużo szybszy niż do dysku.

I tu już pierwsze światełko – WIndows wrzuca do pamięci RAM coś z czego może wcale nie korzysta w danej chwili, ale robi to świadomie!

Przykład

Mamy 2 GB pamięci RAM. Z tego akurat w danej chwili wykorzystywane jest 500 MB.

image

Windows wrzuca więc do pamięci dodatkowe dane, które uważa, że mogą nam się przydać (bo często z nich korzystamy). Zajmuje więc RAM do poziomu powiedzmy 1.5GB.

image

Z naszego punktu widzenia wydaje się, że Windows zjada nam właśnie te 1.5 GB pamięci i wolnego mamy tylko 500 MB.

Ale jeśli tylko okaże się, że odpalamy aplikację np. Firefoxa i potrzebujemy na to 500 MB, to Windows w jednej chwili wyrzuca dane z RAMu, których nie potrzebuje (zarezerwowane przez SuperFetch).

image

Robi nam się znowu 500 MB wykorzystane przez system i inne aplikacje, do których dorzucamy te 500 MB potrzebne. Mamy więc zajęte 1 GB.

W kolejnym kroku Windows może znowu zarezerwować sobie miejsce na przydatne dane.

image

Dlaczego tak się dzieje?

Założenie z jakiego wyszli inżynierowie Windows było proste – pamięć, z której nie korzystamy jest pamięcią, która się marnuje!

Tak więc wypełnienie tej wolnej pamięci danymi, które mogą się przydać jest lepszym wyjściem niż jej marnowanie.

Po prostu w sytuacji gdy jednak się okaże, że dane załadowane przez SuperFetch do pamięci (a są to dane, z których statystycznie najczęściej korzystamy) są potrzebne – to dostęp do nich jest zapewniany praktycznie od razu.

Gdyby ich tam nie było – dostęp do nich byłby opóźniony przez potrzebę odczytania ich z dysku – co jednak trochę zajmuje.

Jak to sprawdzić?

Jeśli uruchomicie sobie Task Managera (Menadżera Zadań) i przejdziecie na zakładkę Performance (Wydajność) to zobaczycie tam taki widok:

image

Zwrócić trzeba uwagę na zaznaczone parametry:

  • Cached
  • Available
  • Free

Zazwyczaj gdy patrzymy ile mamy jeszcze wolnej pamięci to odczytujemy wartość tylko Free. [u mnie to ok. 3 GB]

Natomiast jak możecie zauważyć na mojej maszynie z 8 GB RAMu prawie 2 GB jest “zjedzone” przez dane zapisane dzięki SuperFetch (parametr “Cached”). Ale dane te w dowolnej chwili mogą być błyskawicznie zwolnione w razie potrzeby.

Jeśli więc faktycznie chcecie zobaczyć ile macie pamięci wolnej powinniście zsumować wartość Free + Cached.

U mnie wolnego RAMu w takim razie mogę mieć ok. 3 GB + 2 GB czyli 5 GB.

Na komputerach z mniejszą ilością RAM będziecie mieli jeszcze bardziej “wiarygodne” wyniki.

Zachęcam do sprawdzenia jak te parametry wyglądają u Was.

Zainteresowani szczegółami?

Dla chętnych do przeczytania rozbudowanych informacji na ten temat – polecam przeczytać artykuł po polsku (tłumaczenie oryginału) na temat wydajności Windows 7. Napisali go inżynierowie tworzący Windows 7.

Dla naprawdę bardzo dociekliwych polecam ciekawy artykuł Marka Russinovicha z TechNet Magazine z 2007 roku o mechanizmie SuperFetch i nie tylko.

Mam nadzieję, że udało mi się choć trochę wyjaśnić problem “zjadania pamięci RAM przez Windows”.

Comments (10)

  1. @mt3o: W wolniejszej chwili spróbuję napisac parę słów na ten temat. Jak masz ochotę to trochę znajdziesz m.in. u Marka Russinovicha.

    Jakąś podpowiedź znajdziesz też tutaj i tutaj.

  2. @Łukasz Kliś: Z tą Vistą – problem brał się chyba z kilku powiązanych powodów. Myślę, że jednym była ogólna niechęć do Visty i słabe przygotowanie systemu (trochę nasza wina) od strony obsługi przez producentów sprzętu (sterowniki, itp.). Drugim elementem był pewnie sprzęt, który nie do końca był przygotowany na taki system. Trzecim było pewnie to, że kilka rzeczy zostało jeszcze poprawionych do czasu WIndows 7, a SuperFetch był tylko jednym z elementów związanych z wydajnością.

    Ja od siebie mogę powiedzieć, że przy mocnym laptopie jaki wtedy miałem (4 GB RAM) nie miałem ŻADNYCH problemów z wydajnością Visty. No ale wtedy standardem było 1GB a czasami nawet mniej.

    @Łukasz Grala: No wiedziałem, że jak za bardzo uproszczę to pojawią się uwagi do tej wydajności 😉 ALe oczywiście dziękuję za tą uwagę, bo jest jak najbardziej słuszna w teoretycznym/akademickim podejściu.

    I są ludzie, którzy będą uznawali że system jest wydajny wtedy jak im się system uruchomi w 10 sekund (a reszta jest nieważna), albo tacy co uznają go za wydajny jak im się przeglądarka uruchomi w 3 sekundy. Są też tacy co myślą o tym w kontekście właśnie wolnej pamięci RAM i pewnego potencjału komputera. Więc stwierdzenie że "nikt nie bierze nic innego pod uwagę" jest trochę na wyrost 🙂

    Ale globalnie oczywiście się zgadzam z definicją wydajności podaną przez Ciebie.

  3. @Kristof: Nie wiem i spekuluję, ale… może zrobić dump pamięci RAM i przeanalizować go? 🙂

  4. Łukasz Kliś says:

    Bardzo fajnie wytłumaczyłeś to zagadnienie – osobiście nic wcześniej na ten temat nie czytałem.

    Pisałeś o nowym mechanizmie "SuperFetch", który został wdrożony w Viście – stąd też moje pytanie: skoro SF był już wtedy to skąd opinie o tym systemie, że działa wolniej niż poprzednicy?

  5. Lukasz Grala says:

    Zagadnienie fajnie wyjaśnione, ale musiałem skomentować, jak można się zastanawiać co oznacza wydajność. Jest jednoznaczna odpowiedź.  Ogólnie to ilość wykonanej pracy w jednostce czasu. Jedynie czymś innym może być określana praca w zależności od tego jaki system bierzemy pod uwagę (komputerowy, operacyjny, system pracy…).

    I z całą pewnością nikt nie bierze nic innego pod uwagę…

  6. mt3o says:

    A skąd w monitorze zasobów w windows7 pojawia się pamięć określona jako hardware reserved? U mnie jest to 259MB na 4GB dostępnej pamięci. To jest pamięć przydzielona karcie graficznej? Jeśli tak, to czy da się zmienić ilość tej pamięci?

  7. Amadeusz says:

    "Jeśli więc faktycznie chcecie zobaczyć ile macie pamięci wolnej powinniście zsumować wartość Free + Cached."

    To zdanie jest trochę wprowadzające w błąd. Cached to miejsce w pamięci, które jest zaalokowane w danej chwili na poczet SF, wiec nie jest to pamięć dostępna (Free) w tym konkretnym momencie, ale może być do dyspozycji systemu, jeśli zajdzie taka potrzeba. Moim zdaniem to jednak jest mała acz istotna różnica. 🙂 A reszta jest OK.  

  8. Kristof says:

    Czy ktoś się orientuje czy i jak można sprawdzić dla jakich programów system zarezerwował pamięć… (tylko proszę nie pisać "dla najczęściej uruchamianych" ;-))

  9. Wydaje mi się, że narzekania na "zjadanie" pamięci w W7 to relikt Windowsa XP. W Viście i 7 pamięć jest już zarządzana inaczej niż wcześniej ale nie wszyscy o tym wiedzą i stąd tyle narzekań.

    Bardzo dobry wpis.

  10. qwerty says:

    To jest chyba "cena rozwoju". Jeśli pomyśleć ile dało się wycisnąć z 8-bitowych komputerów z 64kB RAM to widać, że stosunek efektu to użytej pamięci znacznie spadł. Wynika to z wielu czynników. Nikt już nie pisze w asemblerze dbając o każdy bajt pamięci. Pamięć stała się tańsza a techniki programowania bardziej pamięciożerne. Dane otoczono obiektami, które przechowują także informacje o danych itp. Poza tym systemy robią coraz więcej zadań w tle.

Skip to main content