domenica 29 marzo 2015

Aumentare le prestazioni di Windows (PARTE 2): configurare prefetch e superfetch in Windows 8.x/7/Vista/XP

Le tecnologie prefetch e superfetch, sono state progettate per aumentare le prestazioni di Windows. In realtà la questione se sia invece preferibile disabilitarle è stata a lungo dibattuta e fonte di discussioni, in particolare per il superfetch. In questo articolo vediamo come funzionano prefetch e superfetch e come si configurano.

A prescindere dalle considerazioni che faremo nel seguito, si sottolinea che

le tecnologie di prefetch e superfetch devono essere sempre disabilitate quando all'interno del computer sono presenti SSD (Solid State Drive), al fine di evitare una inutile usura delle celle di memoria flash di tali dispositivi.

Nel resto dell'articolo faremo riferimento alle impostazioni migliori per i sistemi Windows XP, Windows Vista, Windows 7, Windows 8 e 8.1; si fa presente che:
  • Windows XP ha solo il prefetch (ma non il superfetch);
  • le versioni di Windows precedenti a XP (2000, NT, ME, 9x) non hanno né il prefetch né il superfetch.

Voci di registro interessate dalla configurazione

La configurazione di prefetch/superfetch è regolata da chiavi del registro di sistema comuni a tutte le versioni di Windows nella sezione
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters

Le sottochiavi coinvolte sono
  • EnablePrefetcher per il prefetch;
  • EnableSuperfetch per il superfetch (tranne Windows XP, dove non esiste).
Prefetch e Superfetch - Chiavi di registro

Prefetch

Il prefetch (letteralmente prelevare in anticipo) tiene traccia sia dei file caricati al boot di Windows che di quelli coinvolti nel lancio delle applicazioni. Tali informazioni vengono salvate in una serie di piccoli file (con estensione .bin, .db, .pf e .ini) all'interno della cartella \Windows\Prefetch. La cartella \Prefetch\ ha un limite di 128 file e si auto-ripulisce quando tale limite viene raggiunto (vengono conservati i 32 file di prefetch più usati).

Il prefetch monitora l'avvio delle applicazioni e costruisce una sorta di indice che indica quali parti di un'applicazione ed in quale ordine devono essere caricate per prime in memoria, al fine di velocizzarne l'avvio. All'avvio di un'applicazione, Windows usa le informazioni di prefetch per caricarne in modo ottimale i "segmenti" che la compongono, ma tali informazioni non sono usate fino a quando l'applicazione non sarà realmente avviata: ciò implica che la cartella \Prefetch\ non è una cache e che i file al suo interno non vengono caricati al boot di Windows (per cui il prefetch non può rallentare il boot di sistema).
In virtù di tale meccanismo, qualunque suggerimento di cancellare/pulire manualmente la cartella \Prefetch\ è completamente errato:
  • l'ammontare di spazio occupato è piuttosto piccolo, non è sufficiente per causare una significativa frammentazione dell'HDD (hard-disk drive);
  • i file "indice" contenuti in \Prefetch\ sono usati solo quando un'applicazione viene lanciata e permettono di avviarla più velocemente (viceversa, cancellando il contenuto della cartella peggioreranno le prestazioni di un HDD tradizionale);
  • le informazioni di prefetch possono essere usate dalle utility di deframmentazione dei dischi per ottimizzare la posizione dei file sull'hard-disk (solo sugli HDD, gli SSD non hanno il problema della frammentazione).
La tecnologia di prefetch è stata effettivamente utile e l'impostazione predefinita di abilitarla è, in linea di principio corretta, salvo due casi particolari in cui il prefetch deve essere disabilitato:
  1. computer con meno di 512 MiB di RAM, dove il monitoraggio costante delle applicazioni incide negativamente sulle prestazioni a causa della scarsa quantità di memoria fisica;
  2. computer dotati di SSD, in quanto tali unità sono così veloci che il guadagno di prestazioni dato dal prefetch è praticamente nullo (ed inoltre si evitano scritture inutili all'unità).
Come anticipato, le impostazioni di prefetch sono regolate dalla chiave di registro
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher
I valori possibili per la sottochiave EnablePrefetcher sono:
  • 0 - disabilita il prefetch
  • 1 - prefetch abilitato solo per il lancio di applicazioni
  • 2 - prefetch abilitato solo per il boot
  • 3 - prefetch abilitato sia per il boot che per il lancio di applicazioni
Il valore predefinito di EnablePrefetcher per Windows XP/Vista è 3.
Windows 7/8/8.1 disabilitano in modo automatico il prefetch al momento dell'installazione del sistema operativo nel caso venga rilevato un SSD impostando per EnablePrefetcher il valore 0, altrimenti impostano il valore 3.

A prescindere dalla versione di Windows usata, vale sempre la pena di verificare il valore di EnablePrefetcher accedendo al registro di Windows: un errato rilevamento hardware è sempre possibile, inoltre potreste aver usato un'immagine di sistema oppure un software di clonazione per trasferire il sistema operativo da un HDD ad un SSD (in tal caso sull'immagine del disco avrete probabilmente il valore EnablePrefetcher=3 e dovete cambiarlo in 0).

Avviare il registro di configurazione:
  • Windows XP/Vista/7: premere il pulsante START>Esegui e digitare regedit
  • Windows 8 e 8.1: nella casella di ricerca digitare regedit e fare click sul risultato (regedit.exe)
Impostare la sottochiave EnablePrefetcher con il valore:
  • 0 (prefetch disabilitato) se il computer include un SSD oppure ha una memoria RAM inferiore a 512 MiB.
  • 2 (prefetch abilitato solo per il boot) se il computer non include un SSD ed ha una memoria RAM maggiore o uguale a 512 MiB. Personalmente preferisco disabilitarla inserendo il valore 0 (prefetch disabilitato) perché non ho rilevato aumento lasciandolo abilitato.
EnablePrefetcher

Superfetch

Con Windows Vista è stato introdotta la tecnologia superfetch, una evoluzione del prefetch. Il superfetch fa parte del meccanismo di gestione della memoria di Windows e, idealmente, permette al sistema operativo di gestire in più efficiente la memoria RAM del computer. Il superfetch si prefigge di:
  1. diminuire il tempo di boot del sistema;
  2. accelerare l'avvio delle applicazioni usate più di frequente;
  3. adattare il proprio funzionamento in base all'uso che l'utente fa del computer.
Per diminuire il tempo di boot, il superfetch registra dati e file a cui si accede e memorizza tali dati in file appositi; a differenza del prefetch non si tratta solo di riferimenti, ma di veri e propri "pezzi" di programma che verranno precaricati per intero ai successivi avvii. Il superfetch interagisce anche con il deframmentatore di sistema, assicurandosi che i file da caricare per primi siano messi su disco (HDD) nell'ordine giusto, per abbreviare i tempi di boot. I file necessari al funzionamento del superfetch sono memorizzati nella stessa cartella del prefetch, ossia in \Windows\Prefetch\.

L'altro obiettivo del superfetch è di velocizzare l'avvio delle applicazioni. Ciò si ottiene precaricando in memoria le applicazioni più usate, anche in base a quando vengono usate; per esempio, se nella vostra routine quotidiana al mattino usate un browser ed un client di e-mail, ed alla sera usate Microsoft Word ed Excel, il superfetch precarica in RAM browser e client e-mail al mattino mentre di sera precaricherà in RAM Word ed Excel.

In parole povere, il superfetch è un meccanismo che cerca di sfruttare "l'eccesso di memoria RAM" a bordo del computer, secondo il principio che la RAM libera è inutilizzata, quindi è memoria sprecata e di conseguenza è vantaggioso sfruttarla precaricandovi le applicazioni più usate.
Il ragionamento in linea di principio è corretto: quando il superfetch è attivo, la RAM del computer tende ad essere tutta occupata, tanto che, se si apre il Task Manager (Gestione attività), ne rimane libera per le applicazioni apparentemente poca, tuttavia non è così: la RAM occupata dal superfetch è di tipo "cached", il che significa che è gestita con bassa priorità e viene immediatamente resa disponibile alle applicazioni che la richiedono. Questo equivoco sulla RAM è alla base del falso mito che il superfetch sia un divoratore di memoria.

In effetti il superfetch (e le altre tecnologie ad esso correlate come ReadyBoot e ReadyBoost) riesce a velocizzare su un HDD l'avvio delle applicazioni più usate fino al 50%. Misure alla mano, qualsiasi esperto di tecnologia Windows vi dirà che disabilitare il superfetch è sbagliato e che se lo fate le vostre applicazioni si avvieranno più lentamente (vero) e che, dopo un paio di settimane, non impatterà più negativamente sul sistema. Quest'ultima affermazione deve essere rivista alla luce dell'esperienza degli utenti, inoltre l'utilità del superfetch è stata annullata dall'introduzione sul mercato degli SSD.

Il superfetch è un meccanismo molto invasivo: ogni volta che entra in azione viene letta, scritta, spostata e creata su disco una enorme quantità di dati e di file (in media tra i 500 e gli 800 MiB). Questo processo può durare diversi minuti durante i quali un computer senza SSD, anche se molto potente, diventa praticamente inutilizzabile: ad un certo punto l'HDD lavora furiosamente (si sente un ronzio, un "frullare" continuo), segno che sta scrivendo centinaia di megabyte tutti in una volta; molti utenti pensano che il superlavoro del disco ed il relativo rumore sia causato dalla deframmentazione, invece è il superfetch. Ronzii e rumori ovviamente non sono percepibili su un SSD ma una simile attività è assolutamente deleteria perché, a lungo andare, può provocare il logorio delle celle di memoria flash del dispositivo. Inoltre c'è da considerare che le applicazioni vengono aggiornate continuamente il che implica che il superfetch dovrà agire molto più spesso delle "2 settimane" profetizzate dagli esperti.
  • Su Windows Vista il superfetch entra in azione immediatamente dopo il boot, "occupando" tutta (o quasi) la RAM ed impegnando l'HDD praticamente al 100%; questo è uno dei motivi, se non il principale, per cui Windows Vista ha la pessima reputazione di sistema pesantissimo ed inefficiente; le cose sono migliorate dopo il Service Pack 1, ma ormai il danno era fatto.
  • Su Windows 7 il superfetch entra in azione dopo circa 6 minuti che il sistema è avviato, anche se le cose vanno meglio rispetto a Windows Vista. Tuttavia, sebbene gli algoritmi di predizione siano stati affinati, molti utenti lamentano il fatto che il superfetch carichi in RAM cose sbagliate molto più spesso di quanto non dovrebbe fare. Gli appassionati di videogiochi segnalano che il superfetch può entrare in azione durante le sessioni di gioco e bloccarli del tutto. Inoltre, all'epoca dell'uscita di Windows 7 cominciarono ad apparire i primi SSD.
  • Con Windows 8.1 gli algoritmi di predizione sono stati ulteriormente migliorati, ma nel frattempo gli SSD hanno avuto una notevole diffusione.
Fortunatamente, l'invasività del superfetch può essere limitata configurando in modo opportuno la chiave di registro che ne regola il funzionamento, ossia
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnableSuperfetch
I valori possibili per la sottochiave EnableSuperfetch sono:
  • 0 - disabilita il superfetch
  • 1 - superfetch abilitato solo per il lancio di applicazioni
  • 2 - superfetch abilitato solo per il boot
  • 3 - superfetch abilitato sia per il boot che per il lancio di applicazioni
Il valore predefinito di EnableSuperfetch per Windows Vista è 3.
Windows 7/8/8.1 disabilitano in modo automatico il superfetch al momento dell'installazione del sistema operativo nel caso venga rilevato un SSD impostando per EnableSuperfetch il valore 0, altrimenti impostano il valore 3.

È comunque consigliabile verificare il valore di EnableSuperfetch nel registro di Windows (per prevenire un errato rilevamento hardware o perché potreste aver usato un'immagine di sistema o un software di clonazione per trasferire il sistema su un SSD a partire da un'immagine creata su un HDD, dove probabilmente era impostato EnableSuperfetch=3).

Per quanto detto, il superfetch deve essere disabilitato nei computer con SSD.
In presenza di soli HDD, l'impostazione che suggerisco è di limitare l'azione del superfetch alla sola fase di boot, oppure disabilitarlo del tutto. Sebbene il superfetch in condizioni ideali dimezzi i tempi di avvio dei programmi, i pochi secondi risparmiati ad avviare un'applicazione non compensano gli svantaggi: avviare il browser in 6 secondi invece che in 3 è meglio che subire il blocco temporaneo del computer! In genere, non si avviano decine di applicazioni al giorno, ma poche e da usare per un periodo di tempo prolungato. Viceversa con il superfetch abilitato per qualunque cosa, avrete tutti gli inconvenienti precedentemente menzionati.

Avviare il registro di configurazione:
  • Windows Vista/7: premere il pulsante START>Esegui e digitare regedit
  • Windows 8 e 8.1: nella casella di ricerca digitare regedit e fare click sul risultato (regedit.exe)
Impostare il valore della sottochiave EnableSuperfetch come segue:
  • 0 (superfetch disabilitato) se il computer include un SSD oppure ha una memoria RAM inferiore a 1 GiB, oppure se volete evitare del tutto il superlavoro del disco.
  • 2 (superfetch abilitato solo per il boot) se il computer non include un SSD ed ha una memoria RAM maggiore o uguale a 1 GiB. Questa opzione aumenta il tempo di boot e personalmente preferisco disabilitarla inserendo il valore 0 (superefetch disabilitato).

  • EnableSuperfetch
Un altro modo per annullare il superfetch è disabilitare il servizio "Ottimizzazione avvio" (nelle versioni in Inglese di Windows tale servizio si chiama proprio "Superfetch"):
  • Windows Vista/7: premere il pulsante START>Esegui e digitare services.msc
  • Windows 8 e 8.1: nella casella di ricerca digitare services.msc e fare click sul risultato (services.msc)
Individuare il servizio "Ottimizzazione avvio" ed impostarlo come Disabilitato.
Disabilitare Ottimizzazione avvio


POTREBBE INTERESSARTI ANCHE…