Als je een programma laadt, moet Windows het uitvoerbare bestand naar het geheugen kopiëren om het te kunnen uitvoeren. Als u de toepassing sluit, bevindt het programma zich nog steeds in het RAM. Als je het programma opnieuw uitvoert, hoeft Windows niets van de schijf te laden – het zit allemaal nog in het RAM.
Al je gebruikte RAM wordt een harde schijf cache. Omdat de schijf zes orden van grootte langzamer is dan RAM, wilt u zoveel mogelijk van uw programma’s en gegevensbestanden in RAM hebben. Uw ongebruikte RAM wordt een cache. Dat is wat stand-by geheugen is. Het is geheugen dat onmiddellijk wordt gegeven aan een toepassing die het nodig heeft, maar in plaats daarvan stand-by staat voor het geval de inhoud nodig is:
- https://i.imgur.com/NQwFGoB.png
Op dit moment heb ik dus 8 GB geheugen op mijn computer dat niets anders doet dan een cache zijn voor de harde schijf.
Nu, als een programma wat RAM nodig heeft, zal Windows het wat geheugen geven. Maar voordat het geheugen aan een programma kan geven, moet het eerst het geheugen op nul zetten.
Lezersquiz: Waarom moet Windows het RAM-geheugen op nul zetten voordat het het aan een ander proces kan geven?
Windows bewaart wat geheugen dat op luie wijze op nul is gezet, en klaar staat om op elk moment aan een toepassing te worden overhandigd. In Resource Manager wordt dit geheugen dat op nul staat, *vrij geheugen genoemd; u ziet het in de schermafbeelding hierboven.
Het wordt ook wel de nul-pagina lijst genoemd, omdat het geheugen op nul staat, en niets nuttigs doet op de computer:
- https://i.imgur.com/47xDkzT.png
Wat is SuperFetch?
Wat SuperFetch doet, is samenwerken met de geheugenbeheerder om proactief en lui gegevens in het vrije geheugen te laden, zodat deze al in de cache staan als u ze gaat uitvoeren. SuperFetch weet welke applicaties, games, dev tools, je meestal laadt, en laadt ze in RAM voor het geval ze nodig zijn.
Dus als ik WoW over 3 minuten ga laden, zit die 8 GB aan speltexturen al in RAM. Gebruik een hulpprogramma als RAMMap om te zien welke bestanden al het RAM-geheugen in uw computer momenteel caching is.
Iedereen die u vertelt om SuperFetch uit te schakelen is een idioot, begrijpt computers niet, en dwingt Windows om langzamer te zijn omdat ze het verschil niet begrijpen tussen:
- Standby vrij geheugen
- Zerod vrij geheugen
En die persoon moet een klap op zijn achterhoofd krijgen voor het opzettelijk traag maken van hun computer.
Applicaties gebruiken geheugen; niet RAM
Een ander ding dat de meeste mensen niet begrijpen is het verschil tussen committed en working set. Dit was vroeger gemakkelijker te begrijpen, toen Windows 95 nog op 4 MB geheugen draaide.
- op een monstermachine met 16 MB RAM
- Ik kan een programma hebben dat 1,5 GB geheugen heeft gecommitteerd
- maar slechts 117 KB RAM gebruikt
Dat komt omdat alles wat het programma nodig heeft om te werken, volledig in 117 KB past. De rest is of naar het swap-bestand geschreven, of was al een kopie van een bestand (ik kan bijvoorbeeld een gegevensbestand van 1,5 GB in mijn adresruimte plaatsen, en heb 1,5 GB geheugen vastgelegd, terwijl het geen RAM verbruikt)
Bijv. een van de gadgets in de Windows Vista/7 Sidebar had een geheugenlek. Dit betekende dat het Sidebar.exe proces geheugen bleef gebruiken (tot de limiet van 2 GB voor een 32-bit proces), totdat het proces crashte omdat het geen geheugen meer had. Maar Sidebar.exe gebruikte maar 700 KB RAM, omdat al dat gelekte geheugen werd weggeschreven naar het wisselbestand (omdat niemand het ergens voor gebruikte).
Dit is een reden waarom je je wisselbestand niet moet uitschakelen. Window kan pagina’s RAM naar de harde schijf kopiëren. Als de pagina’s RAM niet daadwerkelijk worden gebruikt, kunnen ze worden hergebruikt voor andere dingen (zoals een schijfcache), omdat de reservekopie van die gegevens in het wisselbestand zit. Als sidebar ooit weer om dat geheugen zou vragen (wat het nooit zou doen, omdat het het vergeten is), kan Windows die RAM inhoud weer vanaf de harde schijf inwisselen.
tl;dr: ik heb 8.5 GB geheugen vrij:
- 8 GB doet iets nuttigs om mijn machine sneller te maken
- 0,5 GB gaat verloren door niets te doen
Je wilt dat SuperFetch je geheugen gebruikt – het maakt de machine sneller. Zet het niet uit.
Deze mensen zijn als mijn vader. Hij denkt dat hij net genoeg weet om gevaarlijk te zijn. Hij belde me om te klagen dat zijn Windows 7 machine er 3 minuten over doet om op te starten. Ik zeg hem:
- het is al die anti-virus shit die hij draait
- krijg een SSD; het zal opstarten in 13 seconden
Hij krijgt een SSD, en Windows duurt nog steeds 3 minuten om op te starten. Ik zeg hem dat het zijn anti-virus shit is. Hij wijst mijn mening van de hand. Zes maanden later installeert hij Windows opnieuw, en nu start het in 13 seconden.
Het uitschakelen van SuperFetch is als het uitschakelen van je swapfile, of het installeren van een RAM-doubler, of het gebruik van een registry cleaner: het laat je eruit zien als een idioot. In het echt lach ik en knik. Achter je rug praat ik onzin over je op Reddit.
Bonus Reading
Meer over dit onderwerp eerder:
- /r/ProgrammerHumor/comments/68ker6/ultimate_in_garbage_collection/dh071ep/
- /r/technology/comments/1xbofp/ramdrive_to_improve_performance_and_prolong_ssd/cf9wbmf/
- /r/programming/comments/4nvimz/john_carmack_on_memory_mapped_gpu_assets/d4818ep/
Update – Kan SuperFetch harde schijf I/O mijn gaming niet schaden?
Iemand vroeg het, ik antwoordde, maar voor de zichtbaarheid en om informatie te verspreiden kopieer ik het hier.
Echt waar, kan het de spelprestaties beïnvloeden?
Het kan gewoon niet.
Jouw grootste zorg zou kunnen zijn dat SuperFetch je harde schijf omwoelt, dingen inleest terwijl jij je spel probeert te spelen. En dat al die I/O van de harde schijf schadelijk is voor de “echte” harde schijf die je nodig hebt om je spel te spelen.
Dat is niet zo.
Kijk eens naar Resource Monitor, het tabblad Disk. Windows 7 heeft een functie toegevoegd waarmee toepassingen kunnen aangeven dat ze I/O-bewerkingen met een “achtergrond” prioriteit willen uitvoeren.
- een SSD heeft een responstijd van ongeveer 1-2 ms
- een spinning platter HDD heeft een responstijd van ongeveer 10-20 ms
En dus in Resource Monitor, kun je zien hoe lang het duurt om I/O van de harde schijf te bedienen. En op draaiende HDD’s ziet u meestal 10-30 ms:
- https://i.imgur.com/m4ogUc5.png
Maar terwijl dat gebeurt, zijn er andere I/O-bewerkingen van de harde schijf die op de achtergrond worden uitgevoerd. Windows zorgt ervoor dat I/O-operaties op de achtergrond nooit de reguliere I/O verstoren. Achtergrond-I/O kan zo zwaar worden gestraft dat het 500-1000 ms kan duren om één achtergrondlezing te bedienen:
- https://i.imgur.com/3SATs9M.png
Dus we hebben:
ReadResponse tijdSSD1 msHDD10 msBackground Priority I/O500 ms
Het is jammer dat niet meer ontwikkelaars weten wat Background I/O Priority is, ik kijk naar u:
- Steam downloader
- uTorrent
- Battle.net updater
- Windows Update(!!)
Omdat het echt helpt.