Hvis du indlæser et program, skal Windows kopiere det eksekverbare program til hukommelsen for at kunne køre det. Hvis du lukker programmet, findes programmet stadig i RAM. Hvis du kører programmet igen, skal Windows ikke indlæse noget fra disken – det hele ligger i RAM.

Al din brugte RAM bliver til en cache på harddisken. Da disken er seks størrelsesordener langsommere end RAM, ønsker du, at så meget som muligt af dine programmer og datafiler skal sidde i RAM. Din ubrugte RAM bliver en cache. Det er det, hvad standbyhukommelse er. Det er hukommelse, der være straks gives til et program, der har brug for det, men som i stedet står standby, hvis der er brug for indholdet:

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

Så lige nu har jeg på min computer 8 GB hukommelse, der ikke laver andet end at være cache for harddisken.

Nu, hvis et program har brug for noget RAM, vil Windows give det noget hukommelse. Men før den kan aflevere hukommelse til et program, skal den sørge for at nulstille hukommelsen først.

Læserquiz: Hvorfor skal Windows nulstille RAM, før den kan give den til en anden proces?

Windows vedligeholder noget hukommelse, der er blevet nulstillet dovent, og som er klar til at blive overdraget til et program med et øjebliks varsel. I Ressourcehåndtering kaldes denne nul-ud-klar-hukommelse for *Fri hukommelse; du kan se den i skærmbilledet ovenfor.

Den kaldes også for nul-sidelisten, fordi hukommelsen er blevet nul-ud-klar og ikke gør noget nyttigt på computeren:

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

Hvad er SuperFetch?

Det, SuperFetch gør, er at arbejde sammen med memory manager for proaktivt og dovent at indlæse data i ledig hukommelse, så de allerede er cachet, når du skal køre dem. SuperFetch ved, hvilke programmer, spil, udviklingsværktøjer, du normalt indlæser, og pre-fetcher dem dovent i RAM, hvis der er brug for dem.

Så når jeg skal indlæse WoW om 3 minutter, vil de 8 GB spilteksturer allerede være i RAM. Brug kan bruge et værktøj som RAMMap til at se, hvilke filer alle RAM i din computer i øjeblikket cachelagrer.

Alle der fortæller dig at deaktivere SuperFetch er en idiot, forstår ikke computere og tvinger Windows til at være langsommere, fordi de ikke forstår forskellen mellem:

  • Standby fri hukommelse
  • Zerod fri hukommelse

Og den person skal have en lussing i baghovedet for bevidst at gøre sin computer langsom.

Applikationer bruger hukommelse; ikke RAM

En anden ting, som de fleste mennesker ikke forstår, er forskellen mellem committed og working set. Det var lettere at forstå dengang, da Windows 95 kørte i 4 MB hukommelse.

  • På en monstermaskine med 16 MB RAM
  • kan jeg have et program, der har committed 1,5 GB hukommelse
  • men kun bruger 117 KB RAM

Det skyldes, at alt det, programmet skal bruge for at fungere, kan rummes helt og holdent i 117 KB. Resten er enten blevet skrevet til swap-filen, eller var en kopi af en fil i forvejen (jeg kan f.eks. mappe en 1,5 GB datafil til mit adresseområde og har afsat 1,5 GB hukommelse, mens jeg ikke bruger nogen RAM)

For eksempel havde en af gadgets i Windows Vista/7 Sidebar en hukommelseslækage… Det betød, at Sidebar.exe-processen blev ved med at binde hukommelse (op til grænsen på 2 GB for en 32-bit proces), indtil processen gik ned, fordi den var løbet tør for hukommelse. Men Sidebar.exe brugte kun omkring 700 KB RAM, fordi al den lækkede hukommelse blev skrevet ud til swapfilen (fordi ingen brugte den til noget).

Dette er en grund til, at du ikke skal deaktivere din swapfil. Window kan kopiere sider af RAM til harddisken. Hvis RAM-siderne ikke rent faktisk bliver brugt, kan de genbruges til andre ting (f.eks. en diskcache), fordi sikkerhedskopien af disse data er i swap-filen. Hvis sidebar nogensinde bad om denne hukommelse igen (hvilket den aldrig ville gøre, fordi den har glemt den), kan Windows bytte dette RAM-indhold tilbage fra harddisken.

tl;dr: jeg har 8.5 GB ledig hukommelse:

  • 8 GB gør noget nyttigt for at gøre min maskine til hurtigere
  • 0,5 GB går til spilde ved ikke at gøre noget

Du ønsker, at SuperFetch skal bruge din hukommelse – det gør maskinen hurtigere. Du skal ikke slå det fra.

Disse mennesker er som min far. Han tror, at han ved lige nok til at være farlig. Han ringede til mig og klagede over, at hans Windows 7-maskine tager 3 minutter om at starte op. Jeg fortæller ham:

  • Det er alt det anti-virus lort han kører
  • Få en SSD, så starter den op på 13 sekunder

Han får en SSD, og Windows tager stadig 3 minutter om at starte op. Jeg fortæller ham, at det er hans anti-virus lort. Afviser mine udtalelser uden videre. Seks måneder senere geninstallerer han Windows på ny, og nu starter det på 13 sekunder.

Desaktivering af SuperFetch er ligesom at deaktivere din swapfile, eller installere en RAM-doubler, eller bruge en registry cleaner: Det får dig til at ligne en idiot. I person smiler jeg og nikker. Bag din ryg snakker jeg lort om dig på reddit.

Bonuslæsning

Mere om emnet før:

  • /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/

Ajourføring – kunne SuperFetch harddisk I/O ikke skade mit spil?

Nogen spurgte, jeg svarede, men jeg kopierer her for synlighedens skyld og for at hjælpe med at sprede information.

For reals tho, could it affect gaming performance?

It, quite simply, won’t.

Your biggest concern might be about SuperFetch churning your hard drive, reading in stuff while you’re trying to play your game. Og at alle disse harddisk-I/O’er vil skade de “rigtige” harddiskting, som du har brug for for at spille dit spil.

Det gør det ikke.

Kontroller Ressourceovervågning, fanen Disk. Windows 7 tilføjede en funktion, hvor programmer kan angive, at de ønsker at udføre I/O-operationer med en “baggrundsprioritet”.

  • En SSD har en responstid på omkring 1-2 ms
  • En harddisk med spindeltallerken har en responstid på omkring 10-20 ms

Så i Ressourceovervågning kan du se, hvor lang tid det tager at servicere harddiskens I/O. Og på spinning HDD’er vil du normalt se 10-30 ms:

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

Men mens det sker, er der andre harddisk I/O-operationer, der kører med baggrundsprioritet. Windows sørger for, at Baggrunds-I/O-operationer aldrig forstyrrer almindelige I/O-operationer. Baggrunds-I/O kan straffes så meget, at det kan tage 500-1000 ms at servicere én baggrundslæsning:

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

Sådan har vi:

ReadResponse timeSSD1 msHDD10 msBackground Priority I/O500 ms

Det er en skam, at flere udviklere ikke kender til Background I/O Priority, jeg kigger på dig:

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

For det hjælper virkelig.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.