Pamięć

Pamięć

  • Comments 7
  • Likes

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

Comments
  • PingBack from http://www.w-files.pl/superfetch/

  • 1. Zapytałbym o pamięć, jedynie mogę domyślać się, jaką kupiłeś ale chciałbym się przekonać. Cóż za kości masz w swoim T61p ?

    2. Grzegorz, czy po zmianie dysku na SSD jest efekt "łaaał, wyrywa z butów" ? :)

  • @mateusz:

    1. dostałem a nie kupiłem... ;] nazywa się to KTL-TP667/4G. Wprawdzie przesiadłem się jakiś czas temu na X300, ale do T61p też pasuje.

    2. wyrywa...

  • tez mialem troszke zdziwiona mine jak zobaczylem, ze z 3GB odlogiem lezy mi z 20mb. Ale faktycznie sprawdza sie to dobrze - programy, ktore najczesciej startuje zaraz po zalogowaniu juz na mnie czekaja gdzies tam za rogiem i gdy klikne na ikone radosnie wyskakuja na ekran

    Poki co Visty uzywam do: - filmy, media center, praca, net, dokumenty i sporo starszych rpgow, ktore w koncu mam czas przejsc ponownie.

    W zadnym z tych zastosowan mnie nie zawiodla - nie wiem jak nowsze gry ale jakos mnie nie ciagnie z 8400GS na pokladzie

    No i co mi sie podoba - ciezko w sumie system uwalic - zaczal mi przeszkadzac limit polaczen tcpip i szukalem nieoficjalnego rozwiazania tego problemu. System sie spieprzyl - bluescreen przy stacie - myslalem, ze bede musial przeinstalowywac go od poczatku albo walczyc jak w xp w dosie z przywracaniem plikow. A system sam zapytal czy sprobowac naprawic - chwile pomielil, zresecil sie i odpalil bez problemow. To mi sie podoba

  • @lukpep: Jeżeli tylko programiści (aplikacji i sterowników) zachowują się przyzwoicie (czyli zorientowali się, że istnieje na świecie Windows Vista) to da się z tym systemem żyć... ;)

    A że wymagania ma większe? To prawda. WindowsXP też ma większe niż Windows95 i też kilka lat temu straszny płacz o to był.

  • SuperFetch mnie czasem przeraża:) Co będzie jak sam zacznie za mnie decydować co chciałbym uruchomić?:)

    A tak całkiem serio to kiedyś ta funkcja mnie denerwowała ale po jakimś czasie bardzo ją doceniłem:) Fakt, jestem przewidywalny:)

  • @Karol:

    Wszyscy jesteśmy w niemałym stopniu, a im dłużej zbiera się dane tym lepiej wiadomo jak się zachowamy. Poza tym, nawet jeżeli się nie uda przewidzieć, to nikt na tym nie stracił. Po prostu pamięć jest natychmiast zwalniana i może ją zająć ktoś inny. Mi też się superfetch podoba i niech sobie zjada ile potrzebuje.

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment