Se si carica un programma, Windows deve copiare l’eseguibile in memoria per poterlo eseguire. Se si chiude l’applicazione, il programma esiste ancora nella RAM. Se si esegue di nuovo il programma, Windows non dovrà caricare nulla dal disco – sarà tutto nella RAM.
Tutta la RAM usata diventa una cache del disco rigido. Poiché il disco è sei ordini di grandezza più lento della RAM, vuoi che la maggior parte dei tuoi programmi e dei tuoi file di dati si trovi nella RAM. La vostra RAM inutilizzata diventa una cache. Questo è ciò che è la memoria di riserva. È una memoria che viene data immediatamente a qualsiasi applicazione che ne ha bisogno, ma invece è in stand-by nel caso in cui il contenuto sia necessario:
- https://i.imgur.com/NQwFGoB.png
Così in questo momento sul mio computer ho 8 GB di memoria che non sta facendo altro che essere una cache per il disco rigido.
Ora, se un programma ha bisogno di RAM, Windows gli darà della memoria. Ma prima di consegnare la memoria ad un programma, deve essere sicuro di azzerare la memoria prima.
Quiz per il lettore: Perché Windows deve azzerare la RAM prima di poterla dare ad un altro processo?
Windows mantiene una certa memoria che è stata pigramente azzerata, ed è pronta per essere consegnata ad un’applicazione in un attimo. In Resource Manager questa memoria azzerata e pronta a partire è chiamata *Memoria libera; potete vederla nello screenshot qui sopra.
E’ anche conosciuta come lista delle pagine azzerate, perché la memoria è stata azzerata e non sta facendo nulla di utile sul computer:
- https://i.imgur.com/47xDkzT.png
Cos’è SuperFetch?
Quello che SuperFetch fa è lavorare con il gestore della memoria per caricare proattivamente e pigramente i dati nella memoria libera in modo che siano già memorizzati nella cache quando si va ad eseguirli. SuperFetch sa quali applicazioni, giochi, strumenti di sviluppo si caricano di solito, e pigramente li pre-carica nella RAM nel caso siano necessari.
Così quando andrò a caricare WoW tra 3 minuti, quegli 8 GB di texture di gioco saranno già nella RAM. Puoi usare uno strumento come RAMMap per vedere quali file tutta la RAM del tuo computer sta attualmente memorizzando nella cache.
Chiunque ti dica di disabilitare SuperFetch è un idiota, non capisce i computer, e sta forzando Windows ad essere più lento perché non capisce la differenza tra:
- Memoria libera in standby
- Memoria libera in Zerod
E quella persona ha bisogno di un ceffone sulla nuca per aver reso intenzionalmente lento il proprio computer.
Le applicazioni usano la memoria; non la RAM
Un’altra cosa che la maggior parte delle persone non capisce è la differenza tra set impegnato e set funzionante. Questo è più facile da capire ai tempi in cui Windows 95 girava in 4 MB di memoria.
- Su una macchina mostruosa con 16 MB di RAM
- posso avere un programma che ha impegnato 1,5 GB di memoria
- ma sta usando solo 117 KB di RAM
Questo perché tutto ciò di cui il programma ha bisogno per funzionare può stare interamente in 117 KB. Il resto è stato scritto nel file di swap, o era già una copia di un file (ad esempio, posso mappare un file di dati di 1,5 GB nel mio spazio di indirizzamento, e ho impegnato 1,5 GB di memoria, pur non consumando RAM)
Per esempio, uno dei gadget nella Sidebar di Windows Vista/7 aveva una perdita di memoria. Questo significava che il processo Sidebar.exe avrebbe continuato a impegnare la memoria (fino al limite di 2 GB per un processo a 32 bit), fino a quando il processo si è bloccato perché aveva finito la memoria. Ma Sidebar.exe consumava solo circa 700 KB di RAM, perché tutta quella memoria che perdeva veniva scritta nel file di swap (perché nessuno la usava per niente).
Questa è una ragione per non disabilitare il file di swap. Window può copiare pagine di RAM sul disco rigido. Se le pagine di RAM non vengono effettivamente utilizzate, possono essere riutilizzate per altre cose (come una cache del disco), perché la copia di backup di quei dati è nel file di swap. Se sidebar dovesse mai chiedere di nuovo quella memoria (cosa che non farebbe mai, perché l’ha dimenticata), Windows può scambiare di nuovo quei contenuti di RAM dal disco rigido.
tl;dr: ho 8.5 GB di memoria libera:
- 8 GB stanno facendo qualcosa di utile per rendere la mia macchina più veloce
- 0,5 GB stanno andando sprecati non facendo nulla
Vuoi che SuperFetch usi la memoria – rende la macchina più veloce. Non spegnerlo.
Questa gente è come mio padre. Pensa di saperne abbastanza per essere pericoloso. Mi ha chiamato lamentandosi che la sua macchina Windows 7 impiega 3 minuti per avviarsi. Gli ho detto:
- è tutta la merda dell’anti-virus che usa
- diventa un SSD; si avvierà in 13 secondi
Ha preso un SSD, e Windows impiega ancora 3 minuti per avviarsi. Gli dico che è la sua merda di antivirus. Rifiuta le mie opinioni a priori. Sei mesi dopo reinstalla Windows di nuovo, e ora si avvia in 13 secondi.
Disabilitare SuperFetch è come disabilitare lo swapfile, o installare un duplicatore di RAM, o usare un pulitore di registro: ti fa sembrare un idiota. Di persona sorrido e annuisco. Alle tue spalle parlo male di te su Reddit.
Lettura bonus
Più sull’argomento prima:
- /r/ProgrammerHumor/comments/68ker6/ultimate_in_garbage_collection/dh071ep/
- /r/technology/comments/1xbofp/ramdrive_to_improve_performance_and_prolong_ssd/cf9wbmf/
- /r/programmazione/commenti/4nvimz/john_carmack_on_memory_mapped_gpu_assets/d4818ep/
Aggiornamento – l’I/O del disco rigido SuperFetch non potrebbe danneggiare il mio gioco?
Qualcuno l’ha chiesto, io ho risposto, ma lo copierò qui per visibilità e per aiutare a diffondere informazioni.
Per davvero, potrebbe influenzare le prestazioni di gioco?
Semplicemente, non lo farà.
La vostra maggiore preoccupazione potrebbe essere che SuperFetch faccia girare il vostro disco rigido, leggendo roba mentre state cercando di giocare. E tutto questo I/O del disco rigido danneggerà le “vere” cose del disco rigido di cui avete bisogno per giocare.
Non lo farà.
Controllate Resource Monitor, la scheda Disco. Windows 7 ha aggiunto una funzione in cui le applicazioni possono indicare che vogliono eseguire operazioni di I/O con una priorità “in background”.
- Un SSD ha un tempo di risposta di circa 1-2 ms
- Un HDD a piatto rotante ha un tempo di risposta di circa 10-20 ms
E così in Resource Monitor, si può vedere quanto tempo ci vuole per servire l’I/O del disco rigido. E sugli HDD che girano, di solito vedrete 10-30ms:
- https://i.imgur.com/m4ogUc5.png
Ma mentre questo accade, ci sono altre operazioni di I/O del disco rigido che sono in esecuzione con priorità in Background. Windows si assicurerà che le operazioni di I/O in background non interferiscano mai con l’I/O regolare. L’I/O in background può essere punito così tanto che può richiedere 500-1000ms per servire una lettura in background:
- https://i.imgur.com/3SATs9M.png
Così abbiamo:
Tempo di lettura/rispostaSSD1 msHDD10 msPriorità I/O in background500 ms
È un peccato che più sviluppatori non conoscano la priorità I/O in background, ti sto guardando:
- Steam downloader
- uTorrent
- Battle.net updater
- Windows Update(!!)
Perché aiuta davvero.