Ha betölt egy programot, a Windowsnak a futtatáshoz be kell másolnia a futtatható fájlt a memóriába. Ha bezárja az alkalmazást, a program továbbra is létezik a RAM-ban. Ha újra futtatja a programot, a Windowsnak nem kell betöltenie semmit a lemezről – minden a RAM-ban fog ülni.

A felhasznált RAM a merevlemez gyorsítótárává válik. Mivel a lemez hat nagyságrenddel lassabb, mint a RAM, azt szeretné, ha a programok és adatfájlok minél nagyobb része a RAM-ban ülne. A fel nem használt RAM-od gyorsítótárrá válik. Ez a készenléti memória. Olyan memória, amelyet azonnal oda kell adni bármely alkalmazásnak, amelynek szüksége van rá, de ehelyett készenlétben áll arra az esetre, ha szükség lenne a tartalmára:

  • https://i.imgur.com/NQwFGoB.png

A számítógépemen tehát jelenleg 8 GB memória van, amely nem csinál semmit, csak a merevlemez gyorsítótáraként szolgál.

Most, ha egy programnak szüksége van egy kis RAM-ra, a Windows ad neki egy kis memóriát. De mielőtt átadná a memóriát egy programnak, először biztosan ki kell nulláznia a memóriát.

Reader Quiz: Miért kell a Windowsnak lenulláznia a RAM-ot, mielőtt átadná egy másik folyamatnak?

A Windows fenntart némi memóriát, amelyet lustán lenullázott, és készen áll arra, hogy egy pillanat alatt átadja egy alkalmazásnak. Az Erőforrás-kezelőben ezt a nullázásra kész memóriát *Free memóriának nevezik; a fenti képernyőképen látható.

Ezt a memóriát nullázási laplistának is nevezik, mert a memória nullázva van, és semmi hasznosat nem csinál a számítógépen:

  • https://i.imgur.com/47xDkzT.png

Mi a SuperFetch?

A SuperFetch a memóriakezelővel együttműködve proaktívan és lustán tölt be adatokat a szabad memóriába, hogy azok már a gyorsítótárban legyenek, amikor futtatni akarod őket. A SuperFetch tudja, hogy milyen alkalmazásokat, játékokat, fejlesztőeszközöket szoktál betölteni, és lustán előretölti őket a RAM-ba arra az esetre, ha szükség lenne rájuk.

Szóval amikor 3 perc múlva megyek betölteni a WoW-ot, az a 8 GB játéktextúra már a RAM-ban lesz. Használhatsz egy olyan eszközt, mint a RAMMap, hogy megnézd, milyen fájlokat tárol jelenleg a számítógéped összes RAM-ja.

Aki azt mondja, hogy tiltsd le a SuperFetch-et, az egy idióta, nem ért a számítógépekhez, és arra kényszeríti a Windowst, hogy lassabb legyen, mert nem érti a különbséget:

  • Standby free memory
  • Zerod free memory

És annak a személynek egy pofon kell a tarkójára, mert szándékosan lassítja a számítógépét.

Az alkalmazások használják a memóriát; nem a RAM-ot

A másik dolog, amit a legtöbb ember nem ért, az az elkötelezett és a munkakészlet közötti különbség. Ezt könnyebb volt megérteni annak idején, amikor a Windows 95 4 MB memóriában futott.

  • Egy 16 MB RAM-mal rendelkező szörnygépen
  • lehet olyan programom, amely 1,5 GB memóriát kötött le
  • de csak 117 KB RAM-ot használ

Ez azért van, mert minden, ami a program működéséhez szükséges, teljes egészében elfér 117 KB-ban. A többi vagy a swap-fájlba íródott, vagy már egy fájl másolata volt (pl. egy 1,5 GB-os adatfájlt leképezhetek a címtartományomba, és 1,5 GB memóriát kötöttem le, miközben nem fogyaszt RAM-ot)

A Windows Vista/7 oldalsávjának egyik szerkentyűje például memóriaszivárgást mutatott… Ez azt jelentette, hogy a Sidebar.exe folyamat folyamatosan memóriát kötött le (egy 32 bites folyamat esetében a 2 GB-os határértékig), amíg a folyamat le nem zuhant, mert elfogyott a memória. De a Sidebar.exe csak kb. 700 KB RAM-ot fogyasztott, mert az összes kiszivárgott memóriát kiírta a swapfájlba (mert senki sem használta semmire).

Ez az oka annak, hogy miért nem kapcsolja ki a swapfájlt. A Window képes oldalakat másolni a RAM-ból a merevlemezre. Ha a RAM-lapokat ténylegesen nem használják, akkor másra (pl. a lemez gyorsítótárára) át lehet őket használni, mert az adatok biztonsági másolata a swapfájlban van. Ha a sidebar valaha is újra kérné ezt a memóriát (ami soha nem történne meg, mert elfelejtette), a Windows vissza tudja cserélni a RAM tartalmát a merevlemezről.

tl;dr: nekem 8.5 GB szabad memória:

  • 8 GB valami hasznosat csinál, hogy a gépem gyorsabb legyen
  • 0,5 GB kárba vész azzal, hogy nem csinál semmit

A SuperFetch-et akarod, hogy használja a memóriát – gyorsabbá teszi a gépet. Ne kapcsold ki.

Ezek az emberek olyanok, mint az apám. Azt hiszi, hogy épp eleget tud ahhoz, hogy veszélyes legyen. Felhívott és panaszkodott, hogy a Windows 7-es gépének 3 percig tart a bootolás. Mondtam neki:

  • az összes vírusirtó szar miatt, amit futtat
  • vegyen egy SSD-t, az 13 másodperc alatt bootol

Vesz egy SSD-t, és a Windows még mindig 3 percig tart a bootolás. Mondom neki, hogy a vírusirtó szarságai miatt van. Kézből elutasítja a véleményemet. Hat hónappal később újra telepíti a Windowst frissen, és most 13 másodperc alatt indul.

A SuperFetch letiltása olyan, mint a swapfile letiltása, vagy egy RAM-dubler telepítése, vagy egy registry cleaner használata: idiótának tűnsz tőle. Személyesen mosolygok és bólogatok. A hátad mögött szarságokat beszélek rólad a redditen.

Bónusz olvasmány

Még többet a témáról korábban:

  • /r/ProgrammerHumor/comments/68ker6/ultimate_in_garbage_collection/dh071ep/
  • /r/technológia/comments/1xbofp/ramdrive_to_improve_performance_and_prolong_ssd/cf9wbmf/
  • /r/programozás/kommentek/4nvimz/john_carmack_on_memory_mapped_gpu_assets/d4818ep/

Update – SuperFetch merevlemez I/O nem árthat a játékomnak?

Valaki megkérdezte, én válaszoltam, de a láthatóság és az információ terjesztésének elősegítése érdekében bemásolom ide.

Azért komolyan, befolyásolhatja a játékteljesítményt?

Elég egyszerűen nem fogja.

A legnagyobb aggodalmad talán az, hogy a SuperFetch felforgatja a merevlemezt, és beolvas dolgokat, miközben próbálsz játszani a játékoddal. És ez a sok merevlemezes I/O károsítja a “valódi” merevlemezes dolgokat, amelyekre szükséged van a játékodhoz.

Nem fog.

Nézd meg az Erőforrásfigyelőt, a Lemez lapot. A Windows 7 hozzáadott egy olyan funkciót, amellyel az alkalmazások jelezhetik, hogy “háttérben” prioritással akarnak I/O műveleteket végezni.

  • Egy SSD-nek 1-2 ms körüli a válaszideje
  • Egy forgólemezes HDD-nek 10-20 ms körüli a válaszideje

És így az Erőforrásfigyelőben láthatja, hogy mennyi ideig tart a merevlemez I/O kiszolgálása. És a pörgős HDD-ken általában 10-30 ms:

  • https://i.imgur.com/m4ogUc5.png

De amíg ez történik, addig más merevlemezes I/O műveletek is futnak Háttér prioritással. A Windows gondoskodik arról, hogy a Háttér I/O műveletek soha ne zavarják a rendszeres I/O műveleteket. A Background I/O olyannyira büntethető, hogy egy háttérben történő olvasás kiszolgálása 500-1000 ms-ig is eltarthat:

  • https://i.imgur.com/3SATs9M.png

Szóval van:

ReadResponse timeSSD1 msHDD10 msBackground Priority I/O500 ms

Kár, hogy több fejlesztő nem ismeri a Background I/O Priority-t, rád nézek:

  • Steam downloader
  • uTorrent
  • Battle.net updater
  • Windows Update(!!)

Mert ez tényleg segít.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.