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”.