Om du laddar ett program måste Windows kopiera den körbara filen till minnet för att kunna köra den. Om du stänger programmet finns programmet fortfarande kvar i RAM. Om du kör programmet igen behöver Windows inte läsa in något från disken – allt kommer att finnas i RAM.

Alla dina använda RAM-minnen blir ett cacheminne på hårddisken. Eftersom disken är sex storleksordningar långsammare än RAM, vill du att så mycket som möjligt av dina program och datafiler ska sitta i RAM. Ditt oanvända RAM-minne blir en cache. Det är vad standbyminne är. Det är minne som omedelbart ges till något program som behöver det, men som istället står stand-by om innehållet skulle behövas:

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

Så just nu på min dator har jag 8 GB minne som inte gör något annat än att vara ett cacheminne för hårddisken.

Nu, om ett program behöver lite RAM, kommer Windows att ge det lite minne. Men innan det kan lämna över minne till ett program måste det se till att nollställa minnet först.

Läsarquiz: Varför måste Windows nollställa RAM-minne innan det kan ge det till en annan process?

Windows upprätthåller en del minne som har nollställts slentrianmässigt och som är redo att överlämnas till ett program när som helst. I Resource Manager kallas detta zerod out ready to go-minne för *Free memory; du kan se det i skärmdumpen ovan.

Det är också känt som zerod page list, eftersom minnet har varit zerod out och inte gör något användbart på datorn:

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

Vad är SuperFetch?

Vad SuperFetch gör är att samarbeta med minneshanteraren för att proaktivt och lamt ladda in data i ledigt minne så att det redan finns i cacheminnet när du ska köra det. SuperFetch vet vilka program, spel och utvecklingsverktyg som du brukar ladda och hämtar dem i RAM om de behövs.

Så när jag laddar WoW om tre minuter finns de 8 GB speltexturerna redan i RAM. Använd kan använda ett verktyg som RAMMap för att se vilka filer som alla RAM i din dator för närvarande cachar.

Alla som säger åt dig att inaktivera SuperFetch är en idiot, förstår inte datorer och tvingar Windows att vara långsammare eftersom de inte förstår skillnaden mellan:

  • Standby ledigt minne
  • Zerod ledigt minne

Och den personen behöver en örfil i bakhuvudet för att medvetet göra sin dator långsam.

Applikationer använder minne; inte RAM

En annan sak som de flesta människor inte förstår är skillnaden mellan committed och working set. Detta var lättare att förstå på den tiden när Windows 95 kördes på 4 MB minne.

  • På en monstermaskin med 16 MB RAM
  • kan jag ha ett program som har åtagit sig 1,5 GB minne
  • men som bara använder 117 KB RAM

Det beror på att allt som programmet behöver för att fungera får plats helt och hållet i 117 KB. Resten har antingen skrivits till swap-filen eller var redan en kopia av en fil (jag kan t.ex. mappa en datafil på 1,5 GB till mitt adressutrymme och har då lagt beslag på 1,5 GB minne samtidigt som jag inte använder något RAM-minne)

En av prylarna i sidofältet i Windows Vista/7 hade t.ex. ett minnesläckage… Detta innebar att Sidebar.exe-processen fortsatte att använda minne (upp till gränsen på 2 GB för en 32-bitars process), tills processen kraschade på grund av att den hade slut på minne. Men Sidebar.exe förbrukade bara omkring 700 KB RAM-minne, eftersom allt det läckta minnet skrevs ut till swapfilen (eftersom ingen använde det till något).

Detta är en anledning till varför du inte inaktiverar din swapfil. Window kan kopiera sidor av RAM-minne till hårddisken. Om RAM-sidorna inte används i praktiken kan de användas till annat (t.ex. diskcache), eftersom säkerhetskopian av dessa data finns i swapfilen. Om sidebar någonsin skulle be om det minnet igen (vilket den aldrig skulle göra, eftersom den glömde bort det) kan Windows byta tillbaka RAM-innehållet från hårddisken.

tl;dr: jag har 8.5 GB ledigt minne:

  • 8 GB gör något användbart för att göra min maskin snabbare
  • 0,5 GB går till spillo genom att inte göra något

Du vill att SuperFetch ska använda ditt minne – det gör maskinen snabbare. Stäng inte av det.

Dessa människor är som min far. Han tror att han vet precis tillräckligt för att vara farlig. Han ringde mig och klagade på att hans Windows 7-maskin tar tre minuter att starta upp. Jag säger till honom:

  • Det är all antivirusskit som han kör
  • Ge en SSD, den startar på 13 sekunder

Han får en SSD, och Windows tar fortfarande 3 minuter att starta. Jag säger till honom att det är hans antivirusskit. Förkastar mina åsikter utan vidare. Sex månader senare installerar han Windows på nytt, och nu startar det på 13 sekunder.

Avaktivera SuperFetch är som att avaktivera swapfilen, installera en RAM-doubler eller använda en registerrensare: det får dig att se ut som en idiot. Personligen ler jag och nickar. Bakom din rygg pratar jag skit om dig på reddit.

Bonusläsning

Mer om ämnet tidigare:

  • /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 inte SuperFetch I/O på hårddisken skada mitt spelande?

Någon frågade, jag svarade, men jag kopierar här för synlighetens skull och för att hjälpa till att sprida information.

För real tho, skulle det kunna påverka spelprestanda?

Det kommer det helt enkelt inte att göra.

Ditt största bekymmer är kanske att SuperFetch ska röra om på hårddisken och läsa in saker medan du försöker spela ditt spel. Och att all denna I/O på hårddisken kommer att skada ”riktiga” hårddiskprylar som du behöver för att spela ditt spel.

Det gör det inte.

Kontrollera Resource Monitor, fliken Disk. Windows 7 lade till en funktion där program kan ange att de vill utföra I/O-operationer med en ”bakgrundsprioritet”.

  • En SSD har en svarstid på cirka 1-2 ms
  • En hårddisk med snurrande plattor har en svarstid på cirka 10-20 ms

I Resursövervakaren kan du alltså se hur lång tid det tar att serva I/O på hårddisken. Och på snurrande hårddiskar ser du vanligtvis 10-30 ms:

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

Men medan detta sker finns det andra I/O-operationer på hårddisken som körs med bakgrundsprioritet. Windows ser till att I/O-verksamheten i bakgrunden aldrig stör den vanliga I/O-verksamheten. Bakgrunds-I/O kan straffas så mycket att det kan ta 500-1000 ms att serva en bakgrundsläsning:

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

Så har vi:

ReadResponse timeSSD1 msHDD10 msBackground Priority I/O500 ms

Det är synd att inte fler utvecklare känner till Background I/O Priority, jag tittar på dig:

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

För det hjälper verkligen.

Lämna ett svar

Din e-postadress kommer inte publiceras.