Prosiłem, prosiłem aż się udało. W weekend kurier przywiózł mi jeszcze ciepłe pamięci do laptopa prosto z firmy Kingston w UK. (...) Nie kupiłem ich w normalnym sklepie, ale już powoli zaczynają się w Polsce pojawiać. Ja jednak jak zawsze wolałem pokombinować. Ale tak czy inaczej mam! I po co takie? Ano po to:


Biorąc pod uwagę, że to laptop, to taki widok od dwóch dni nie przestaje mi się podobać i nie wiem czy w bezpośrednim otoczeniu jest ktoś, komu jeszcze mojego task managera nie pokazywałem. System pracuje aż miło, choć sam z siebie nie jakoś drastycznie szybciej niż przy 4GB. Aplikacje uruchamiają się za to duuużo szybciej.
Pierwsza reakcja na widok wolnych 49MB z 8GB dostępnych może zniechęcać do systemu. Przecież WindowsXP zostawiłby 7.5GB wolnego RAMu. Ale czy naprawdę po to instaluje się w systemie tyle pamięci, żeby jej większą część pozostawić nieużywaną? Zdaniem Windows Vista – wcale nie. Skoro ktoś zainwestował w 8GB, to znaczy, że chce tego użyć. I system to umożliwia. A co z aplikacjami? No i tu kłania się zupełnie nowy sposób zarządzania pamięcią. We wszystkich poprzednich wersjach systemu, pamięć przez system zajmowana była oszczędnie, w miarę potrzeb. Reszta zostawała dla aplikacji. Jeżeli pamięci brakowało – najstarsze (najdawniej używane) strony (zazwyczaj bloki 4KB) wylatywały z RAM i trafiały na dysk. Miało to jakiś sens... Ale czy naprawdę powinny wylecieć strony najstarsze? Czy to zawsze dobre kryterium? Zdecydowanie nie. Jest dość proste, łatwe do zrozumienia i implementacji, ale w praktyce nie zawsze się sprawdzało. Przez takie podejście, przy zbyt małej ilości pamięci, zmniejszenie programu na belkę na kilka minut sprawiało, że jego przywrócenie mogło trwać kilka minut. Pewnie każdy to kiedyś odczuł na własnej skórze.
W Windows Vista jest inaczej. Otóż każda strona ma swój priorytet. W pamięci są strony ważne i mniej ważne. Jak jest zbyt ciasno – mniej ważne wylatują w pierwszej kolejności. A ważność zależy tak od intencji programisty (wypada się czasem przyznać, że moja aplikacja nie jest najważniejsza) jak i od sposobu uruchomienia. Ta sama aplikacja uruchomiona przez kliknięcie na ikonie ma wyższy priorytet niż uruchomiona przez Task Scheduler. I w efekcie alokowana przez nią pamięć też ma wyższy priorytet. I chyba słusznie. Jeżeli dana strona pamięci służy kilku wątkom, to jej ostateczny priorytet jest taki, jakiego zażądał wątek najważniejszy (z najwyższym priorytetem). Fizycznie te priorytety to liczby od 0 do 7 przy czym domyślnym priorytetem jest 5.
Nie tłumaczy to jeszcze, dlaczego wolnego RAMu pozostaje tak mało, ale jesteśmy coraz bliżej.
Otóż Windows Vista zostawia tak niewiele wolnego RAMu dlatego, że dzięki priorytetom może go prosto uwolnić. Więc załadowanie go "na zapas" ma sens. Jeżeli nie będzie potrzebny – można go w każdej chwili oddać (i to bez zrzucania na dysk). Jeżeli jednak się przyda – nie będziemy czekać na załadowanie go, bo dane już czekają. W takiej sytuacji system nada tylko stronom wyższy priorytet, odpowiadający faktycznym potrzebom w danej sytuacji. A skąd Windows Vista wie, co może być potrzebne? Otóż śledzi działania użytkowników. Uruchamiana przez svchost biblioteka sysmain.dll skrzętnie notuje (w katalogu prefetch) jakie aplikacje są uruchamiane (świadomie i nie) w jakiej kolejności, w które dni tygodnia, o której godzinie, przez którego użytkownika itd. Dzięki temu, już po niedługim czasie życia systemu, Windows wie czego może się po użytkowniku spodziewać. Wbrew pozorom jesteśmy wszyscy całkiem prosto przewidywalni... I to nie tylko w takim zakresie, że skoro się zalogowałem, to pewnie zaraz uruchomię Outlooka.
Windows Vista wie co może być użytkownikowi potrzebne, więc na zapas to do pamięci ładuje. Udało się zgadnąć – aplikacja uruchomi się szybciej. Nie udało się – nikt na tym nic nie stracił. A jeżeli użytkownik znienacka postanowi uruchomić ulubioną grę maszynę wirtualną – Windows bez zbędnych opóźnień odda pamięć, mimo że wczytał do niej coś innego.
Dla jasności należy napisać, że cały ten mechanizm nazywa się SuperFetch i jest jedną z najczęściej krytykowanych funkcjonalności systemu. Dlaczego krytykowanych? Bo te 7.5GB należy kiedyś z dysku do pamięci załadować. To niemało danych, więc po starcie systemu dysk mieli, i mieli, i mieli... W Windows XP zabiłoby to jakąkolwiek pracę użytkownika. W Windows Vista tak się nie dzieje, ponieważ żądania I/O wysyłane do dysku również mają swoje priorytety. Żądania od SuperFetch grzecznie czekają w kolejce dopóki nie zostanie obsłużone to, co wynika z interaktywnej pracy użytkownika. Teoretycznie nie przeszkadza to nikomu, ale użytkownicy swoje wiedzą. Skoro dysk rzęzi, to wydajnie pracować się nie da. I prawda to i nie. Z jednej strony fizyczna konstrukcja dysku HDD sprawia, że obsługa I/O o niskim priorytecie faktycznie może obniżać wydajność pracy, z drugiej jednak królowanie dysków SSD jest naprawdę nieodległe. A dyskom SSD takie mieszanie w niczym nie przeszkadza. No i nie hałasują. U mnie w laptopie jest SSD, więc niech sobie te gigabajty system ładuje skoro lubi. Aplikacje uruchamiają się naprawdę błyskawicznie i mi się to podoba. Jeżeli ktoś nie lubi – serwis SuperFetch można po prostu wyłączyć. Zresztą w Windows Server 2008 jest on wyłączony domyślnie, ale oczywiście istnieje.
Aby wykorzystać taką ilość pamięci oczywiście potrzebny jest system w wersji 64bit. Ale o tym chyba nie trzeba nikomu przypominać. Vista w tej wersji istnieje i bardzo ładnie działa, więc pozwólmy x86 odejść powoli do historii.
Po co jeszcze tyle pamięci w laptopie? Dla maszyn wirtualnych. Może ich sporo na raz działać i tylko CPU jest wąskim gardłem u mnie, ponieważ mam niskonapięciowy procesor, w którym priorytetem jest mały pobór mocy (więc długi czas działania) a nie szybkość. Ale ten sam producent laptopów oferuje modele z czterordzeniową rakietą zamiast CPU, mój RAM pasuje, więc każdemu wedle upodobań...
I dla ramdysku. Można cały plik vhd na ram dysk wrzucić i otrzymać najszybciej startującą Vistę świata ;) Choć w praktyce okazuje się, że choć wiele rzeczy działa błyskawicznie, to jednak sam start nie jest znacząco szybszy niż dla tego samego pliku vhd leżącego na dysku SSD. Tak swoją drogą, podczas poszukiwania ram dysku okazało się, że na wersji x64 działają tylko wersje komercyjne. Darmowe istnieją w niemałym wyborze, ale tylko na x86 czyli 32 bity. Te komercyjne programy nie są bardzo drogie (i mają wersje trial), za to ich możliwości nieraz powalają. Automatyczne zgrywanie i wczytywanie obrazu, obsługa NUMA, współpraca z klastrami itd. Ale i tak, gdyby ktoś znał coś darmowego 64bit – wdzięczny będę za informację.
Pora wracać do pracy. Ciekawe, czy system dobrze wywróżył co uruchomię po zapisaniu niniejszej notki na blogu... ;)

Autor: Grzegorz Tworek

Edit 24.09: dodałem info, że pamięci są już w sklepach w Polsce. Ale jak zwykle wolałem po swojemu...