Pamięć

Prosilem, prosilem az sie udalo. W weekend kurier przywiózl mi jeszcze cieple pamieci do laptopa prosto z firmy Kingston w UK. (...) Nie kupilem ich w normalnym sklepie, ale juz powoli zaczynaja sie w Polsce pojawiac. Ja jednak jak zawsze wolalem pokombinowac. Ale tak czy inaczej mam! I po co takie? Ano po to:

Biorac pod uwage, ze to laptop, to taki widok od dwóch dni nie przestaje mi sie podobac i nie wiem czy w bezposrednim otoczeniu jest ktos, komu jeszcze mojego task managera nie pokazywalem. System pracuje az milo, choc sam z siebie nie jakos drastycznie szybciej niz przy 4GB. Aplikacje uruchamiaja sie za to duuuzo szybciej.
Pierwsza reakcja na widok wolnych 49MB z 8GB dostepnych moze zniechecac do systemu. Przeciez WindowsXP zostawilby 7.5GB wolnego RAMu. Ale czy naprawde po to instaluje sie w systemie tyle pamieci, zeby jej wieksza czesc pozostawic nieuzywana? Zdaniem Windows Vista – wcale nie. Skoro ktos zainwestowal w 8GB, to znaczy, ze chce tego uzyc. I system to umozliwia. A co z aplikacjami? No i tu klania sie zupelnie nowy sposób zarzadzania pamiecia. We wszystkich poprzednich wersjach systemu, pamiec przez system zajmowana byla oszczednie, w miare potrzeb. Reszta zostawala dla aplikacji. Jezeli pamieci brakowalo – najstarsze (najdawniej uzywane) strony (zazwyczaj bloki 4KB) wylatywaly z RAM i trafialy na dysk. Mialo to jakis sens... Ale czy naprawde powinny wyleciec strony najstarsze? Czy to zawsze dobre kryterium? Zdecydowanie nie. Jest dosc proste, latwe do zrozumienia i implementacji, ale w praktyce nie zawsze sie sprawdzalo. Przez takie podejscie, przy zbyt malej ilosci pamieci, zmniejszenie programu na belke na kilka minut sprawialo, ze jego przywrócenie moglo trwac kilka minut. Pewnie kazdy to kiedys odczul na wlasnej skórze.
W Windows Vista jest inaczej. Otóz kazda strona ma swój priorytet. W pamieci sa strony wazne i mniej wazne. Jak jest zbyt ciasno – mniej wazne wylatuja w pierwszej kolejnosci. A waznosc zalezy tak od intencji programisty (wypada sie czasem przyznac, ze moja aplikacja nie jest najwazniejsza) jak i od sposobu uruchomienia. Ta sama aplikacja uruchomiona przez klikniecie na ikonie ma wyzszy priorytet niz uruchomiona przez Task Scheduler. I w efekcie alokowana przez nia pamiec tez ma wyzszy priorytet. I chyba slusznie. Jezeli dana strona pamieci sluzy kilku watkom, to jej ostateczny priorytet jest taki, jakiego zazadal watek najwazniejszy (z najwyzszym priorytetem). Fizycznie te priorytety to liczby od 0 do 7 przy czym domyslnym priorytetem jest 5.
Nie tlumaczy to jeszcze, dlaczego wolnego RAMu pozostaje tak malo, ale jestesmy coraz blizej.
Otóz Windows Vista zostawia tak niewiele wolnego RAMu dlatego, ze dzieki priorytetom moze go prosto uwolnic. Wiec zaladowanie go "na zapas" ma sens. Jezeli nie bedzie potrzebny – mozna go w kazdej chwili oddac (i to bez zrzucania na dysk). Jezeli jednak sie przyda – nie bedziemy czekac na zaladowanie go, bo dane juz czekaja. W takiej sytuacji system nada tylko stronom wyzszy priorytet, odpowiadajacy faktycznym potrzebom w danej sytuacji. A skad Windows Vista wie, co moze byc potrzebne? Otóz sledzi dzialania uzytkowników. Uruchamiana przez svchost biblioteka sysmain.dll skrzetnie notuje (w katalogu prefetch) jakie aplikacje sa uruchamiane (swiadomie i nie) w jakiej kolejnosci, w które dni tygodnia, o której godzinie, przez którego uzytkownika itd. Dzieki temu, juz po niedlugim czasie zycia systemu, Windows wie czego moze sie po uzytkowniku spodziewac. Wbrew pozorom jestesmy wszyscy calkiem prosto przewidywalni... I to nie tylko w takim zakresie, ze skoro sie zalogowalem, to pewnie zaraz uruchomie Outlooka.
Windows Vista wie co moze byc uzytkownikowi potrzebne, wiec na zapas to do pamieci laduje. Udalo sie zgadnac – aplikacja uruchomi sie szybciej. Nie udalo sie – nikt na tym nic nie stracil. A jezeli uzytkownik znienacka postanowi uruchomic ulubiona gre maszyne wirtualna – Windows bez zbednych opóznien odda pamiec, mimo ze wczytal do niej cos innego.
Dla jasnosci nalezy napisac, ze caly ten mechanizm nazywa sie SuperFetch i jest jedna z najczesciej krytykowanych funkcjonalnosci systemu. Dlaczego krytykowanych? Bo te 7.5GB nalezy kiedys z dysku do pamieci zaladowac. To niemalo danych, wiec po starcie systemu dysk mieli, i mieli, i mieli... W Windows XP zabiloby to jakakolwiek prace uzytkownika. W Windows Vista tak sie nie dzieje, poniewaz zadania I/O wysylane do dysku równiez maja swoje priorytety. Zadania od SuperFetch grzecznie czekaja w kolejce dopóki nie zostanie obsluzone to, co wynika z interaktywnej pracy uzytkownika. Teoretycznie nie przeszkadza to nikomu, ale uzytkownicy swoje wiedza. Skoro dysk rzezi, to wydajnie pracowac sie nie da. I prawda to i nie. Z jednej strony fizyczna konstrukcja dysku HDD sprawia, ze obsluga I/O o niskim priorytecie faktycznie moze obnizac wydajnosc pracy, z drugiej jednak królowanie dysków SSD jest naprawde nieodlegle. A dyskom SSD takie mieszanie w niczym nie przeszkadza. No i nie halasuja. U mnie w laptopie jest SSD, wiec niech sobie te gigabajty system laduje skoro lubi. Aplikacje uruchamiaja sie naprawde blyskawicznie i mi sie to podoba. Jezeli ktos nie lubi – serwis SuperFetch mozna po prostu wylaczyc. Zreszta w Windows Server 2008 jest on wylaczony domyslnie, ale oczywiscie istnieje.
Aby wykorzystac taka ilosc pamieci oczywiscie potrzebny jest system w wersji 64bit. Ale o tym chyba nie trzeba nikomu przypominac. Vista w tej wersji istnieje i bardzo ladnie dziala, wiec pozwólmy x86 odejsc powoli do historii.
Po co jeszcze tyle pamieci w laptopie? Dla maszyn wirtualnych. Moze ich sporo na raz dzialac i tylko CPU jest waskim gardlem u mnie, poniewaz mam niskonapieciowy procesor, w którym priorytetem jest maly pobór mocy (wiec dlugi czas dzialania) a nie szybkosc. Ale ten sam producent laptopów oferuje modele z czterordzeniowa rakieta zamiast CPU, mój RAM pasuje, wiec kazdemu wedle upodoban...
I dla ramdysku. Mozna caly plik vhd na ram dysk wrzucic i otrzymac najszybciej startujaca Viste swiata ;) Choc w praktyce okazuje sie, ze choc wiele rzeczy dziala blyskawicznie, to jednak sam start nie jest znaczaco szybszy niz dla tego samego pliku vhd lezacego na dysku SSD. Tak swoja droga, podczas poszukiwania ram dysku okazalo sie, ze na wersji x64 dzialaja tylko wersje komercyjne. Darmowe istnieja w niemalym wyborze, ale tylko na x86 czyli 32 bity. Te komercyjne programy nie sa bardzo drogie (i maja wersje trial), za to ich mozliwosci nieraz powalaja. Automatyczne zgrywanie i wczytywanie obrazu, obsluga NUMA, wspólpraca z klastrami itd. Ale i tak, gdyby ktos znal cos darmowego 64bit – wdzieczny bede za informacje.
Pora wracac do pracy. Ciekawe, czy system dobrze wywrózyl co uruchomie po zapisaniu niniejszej notki na blogu... ;)

Autor: Grzegorz Tworek

Edit 24.09: dodalem info, ze pamieci sa juz w sklepach w Polsce. Ale jak zwykle wolalem po swojemu...