MegaLab.it
Stampa Articolo
Aperiodico gratuito di informatica
 
20080829220708

Guida definitiva all'ottimizzazione della memoria

a cura di Zane
04/10/2006 - articolo
Trucchi & Suggerimenti - La gestione della memoria di Windows può essere realmente migliorata, ma fra bufale, utility fasulle e suggerimenti ormai obsoleti sono molte le procedure che possono sortire l'effetto esattamente contrario. Ecco una guida ragionata e pesata alla gestione della memoria.

Ripensando ai vecchi Windows 3.1 prima e 9x in seguito, non posso che ricordare con (pochissima) nostalgia i tanti problemi relativi alla gestione della memoria: scarsa oppure nulla protezione dei processi e dei dati, frammentazione delle pagine altissima ed una serie di inconvenienti che portavano di sovente al crash di sistema.

Vi siete mai chiesti come mai le vecchie versioni di Windows crashavano così spesso? Uno dei fattori principali della pessima stabilità era proprio la gestione approssimativa della memoria.

Da allora di acqua sotto ai ponti ne è passata, ed a partire da Windows 2000, basato su un kernel nettamente migliore (derivato da Windows NT) le cose sono migliorate parecchio. Windows XP ha rappresentato una ulteriore evoluzione in tal senso, e (a meno di qualche falla di sicurezza di troppo) possiamo considerarlo un sistema operativo con una buona gestione della memoria.

Nonostante questo ci sono ancora alcuni aspetti che possono essere migliorati: d'altra parte stiamo pur sempre parlando di prodotti rilasciati più di quattro anni fa, quando l'hardware sottostante era meno potente, e la quantità di memoria a disposizione assai più limitata!

Prima di procedere con il tweaking del nostro sistema vediamo di fare un po' di chiarezza fra tutti i termini tecnici che orbitano attorno al sottosistema di gestione della memoria.

Memoria Fisica

Per quanto interessa a noi, memoria fisica è un sinonimo per indicare RAM fisicamente installata sul sistema. Possiamo scoprire questo valore da Pannello di Controllo -> Sistema -> Generale: è la quantità in basso a destra. 64, 128, 256, 512 megabyte oppure 1 gigabyte sono i valori più comuni.

Cominciamo innanzitutto a capire che per lavorare al massimo delle proprie potenzialità, Windows 2000/XP/2003 abbisogna di 512MB di RAM fisica. Certo, anche con quantitativi inferiori si può ottenere un ambiente di lavoro dignitoso, ma solo con questa quantità il sistema offre il meglio: con meno di 50€ si può oggi portare a casa un banco da 512 MB, che sicuramente migliorerà e non di poco la velocità generale del sistema.

File di paging, memoria virtuale e swap

S tratta principalmente della stessa cosa chiamata con nomi diversi a seconda dell'ambiente in cui ci si trova.

La memoria virtuale è una estensione della memoria fisica su disco fisso: quando il sistema ha riempito tutta RAM a disposizione, trasferisce temporaneamente alcune porzioni di programmi o dati non utilizzati di recente su disco fisso, per poi ricaricarli alla bisogna.

Questa operazione, detta appunto swap, è una delle situazioni da evitare per gestire al meglio la memoria: la differenza di prestazioni fra RAM e disco è di circa 1.000 volte, quindi è facilmente intuibile che tutte le volte in cui il sistema è costretto a swappare si verifica un calo generale delle performance. L'abbiamo sperimentato tutti almeno una volta: quando il disco comincia a "rosicchiare" furiosamente e il sistema diviene lentissimo è generalmente colpa del paging.

Inoltre l'accesso al disco impiega moltissimo il processore, e quindi le cose peggiorano ulteriormente: si può addirittura verificare un fenomeno, detto trashing, in cui il sistema impiega più tempo nello swappare che non nell'eseguire "lavoro utile"!

Memoria disponibile

È la quantità di RAM non ancora impiegata, e che può essere utilizzata per caricare programmi in memoria.

Tenete presente che il kernel di Windows, la shell (il desktop e tutte le icone, tanto per intenderci), i buffer per la gestione delle porte, le finestre per comunicare via rete e molti altri elementi del sistema operativo stesso, devono essere caricati in memoria per poter far funzionare la macchina: è quindi più che naturale ritrovarsi con la maggior parte della memoria occupata, anche a sistema appena riavviato!

Memoria occupata

Precisamente l'opposto di Memoria disponibile.

Cache di sistema / Cache del disco

È una porzione di RAM che il sistema utilizza per salvarvi dati utilizzati di recente, come ad esempio le icone dei vari documenti visualizzati in Esplora Risorse: in questo modo non è necessario richiederli nuovamente all'hard drive in caso siano necessari nuovamente, velocizzando quindi moltissimo le operazioni in caso fossero necessari nuovamente i medesimi file.

Ora che sono chiari i concetti principali, passiamo all'ottimizzazione vera e propria... non prima però di aver sfatato qualche mito.

Prima di procedere con i suggerimenti per ottimizzare la gestione della nostra memoria vediamo di sfatare qualche mito.

Memory Optimizer

Chi non ha mai visto quelle piccole utility che promettono di liberata la memoria? Ce ne sono a bizzeffe, alcune gratuite altre addirittura a pagamento.

Si tratta di programmi in cui viene mostrata una barra che indica la quantità di memoria disponibile: con un click su un pulsante la memoria viene "magicamente" liberata. Insomma, sembra che sia stata fatta pulizia e che vi sia più RAM a disposizione dei programmi.

In realtà non solo questo trucchetto non funziona, ma può addirittura peggiorare (molto) le prestazioni del sistema! Infatti quando questi programmini fanno "il proprio lavoro", scaricano quanto più possibile in memoria virtuale: insomma, di fatto RAM viene liberata.... ma dai programmi attualmente in esecuzione!

Se avete una di queste utility installate, fate una prova: aprite qualche programma un po' pesante (come Photoshop, Dreamweaver, 3D Studio Max o altro) e lanciate quindi la procedura "magica" della vostra utility. Tornate quindi ad uno dei programmi aperti: notate una pesantezza inaspettata ed il disco comincia a rumoreggiare? Si tratta di Windows che ripristina in RAM il programma appena swappato su disco dall'utility...

Potrebbe anche andare peggio: queste utility potrebbero essere anche più aggressive, e tentare di swappare intere porzioni di kernel. Questo si traduce in un aumento pauroso del ritardo di risposta del sistema operativo... ed anche in un crash del sistema, in caso qualcosa vada storto!

Insomma, i magici ottimizzatori di memoria nella mia esperienza non solo non funzionano, ma addirittura possono peggiorare le cose... statene lontani!

Deframmentatori di RAM

Sono simili agli ottimizzatori di memoria, ma questi promettono di deframmentare RAM, di fatto spostando le parti degli stessi programmi caricati in memoria in locazioni contigue.

Anche in questo caso si tratta di una cosa ben poco utile: contrariamente al disco, in cui i dati vengono letti da una testina motorizzata che, in caso di frammentazione, deve effettivamente saltare da parte a parte, la lettura di dati RAM avviene mediante trasferimento diretto di cariche elettriche: lo stesso acronimo "RAM" significa "Random Access Memory" ovvero "Memoria ad Accesso Casuale" (in cui il "casuale" deve intendersi come "non-sequenziale", ovvero "impiega lo stesso tempo a accedere all'inizio, alla fine o dalla parte opposta della locazione correte").

Anche i deframmentatori sono quindi inutili: anzi, sebbene meno peggio degli ottimizzatori, anche i deframmentatori fanno qualche piccolo danno: poiché essi stessi devono essere caricati in RAM per poter funzionare, occupano una porzione di memoria che il sistema avrebbe invece potuto utilizzare per caricare programmi utili!

Eliminare la cartella Prefetch

In molti parlano di come eliminare la cartella windowsprefetch possa portare a miglioramenti delle performance. Nel mio articolo "Pulizia di Windows XP" io stesso raccomando di eliminarne di tanto il contenuto.

Questa però è una procedura che può liberare alcuni megabyte di spazio su disco, ma non migliorare la gestione della memoria: anzi (come preciso anche nel suddetto articolo) la pulizia della cartella prefetch porterà ad un rallentamento nell'avvio dei programmi, almeno fino a quando i file eliminati non verranno ricreati. Quindi in questo caso sta a voi scegliere se preferite un sistema più veloce o risparmiare qualche megabyte di spazio su disco: personalmente prediligo la seconda, ma è una scelta strettamente soggettiva.

/Prefetch: 1

Si dice che aggiungendo questo fantomatico switch dopo un programma si migliori l'avvio.

In realtà questo non è assolutamente vero: si tratta di uno switch utilizzato da Windows Media Player che ben poco ha a che vedere con le prestazioni! Per maggiori informazioni al riguardo rimando a questo articolo su blogs.msdn.com, in questa sede mi limito ad affermare solo che lo switch /Prefetch: 1 è del tutto inutile!

EnablePrefetcher

Alcuni siti suggeriscono di modificare un valore nel registro, impostando EnablePrefetcher=4/5/6 alla voce

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control Session Manager\Memory Management\Prefetch\Parameters

http://msdn.microsoft.com documenta che gli unici valori disponibili per quel valore sono da 0 (disattivato) fino a 3 (valore di default e il più performante). Anche in questo caso si tratta quindi di una bufala: i valori maggiori di tre non hanno alcun significato per il kernel.

EnableSuperfetch

Un altro falso mito narra che sarebbe possibile abilitare la funzionalità di Superfetch anche nelle versioni correnti di Windows, semplicemente modificando un valore del registro.

Se è vero che Windows Vista includerà una funzionalità di ottimizzazione chiamata appunto Superfetch, è stato ormai ampiamente confermato che questa funzionalità non è presente nel kernel di Windows 2000/XP/2003. Aggiungere la chiave suddetta è quindi del tutto inutile.

Disabilitare la memoria virtuale

È una dei consigli più vecchi del mondo per chi dispone di molta memoria... ma anche uno dei sbagliati!

Il supporto Microsoft documenta da tempo e con grande chiarezza come funzioni realmente l'indirizzamento della memoria nei sistemi Windows: il presupposto è sempre che la memoria virtuale sia presente, anche in caso non venga utilizzata.

Spostare il file di paging su un'altra partizione

Anche in questo caso si tratta di una vecchia ed erronea credenza: se è vero che spostando la memoria virtuale su di una unità a disco diversa da quella su cui risede il sistema operativo porta ad interessanti vantaggi, lo stesso non si può dire se semplicemente si sposta il file su di un'altra partizione sul medesimo disco.

Di più, alcuni riferimenti sul sito Microsoft fanno notare che spostando lo swap su di un'altra partizione ma nella stessa unità disco del sistema operativo si potrebbero addirittura peggiorare le cose, poiché la testina dovrebbe fare sempre molti spostamenti fra sistema operativo e swap...

IoPageLockLimit, SecondLevelDataCache, AlwaysUnloadDLL, LargeSystemCache

Si tratta di altri settaggi per il registro: è sufficiente però fare un giro sul sito di supporto di Microsoft per scoprire che se le prime tre voci sono assolutamente obsolete ed ormai non più usate da tempo, l'ultima è ideonea unicamente per i sistemi utilizzati come server (equivale tra l'altro ad impostare Cache di sistema nella finestra raggiungibile da Pannello di Controllo -> Sistema -> Avanzate -> Prestazioni -> Avanzate).

Insomma, nessuna delle quattro sortisce alcun miglioramento!

ClearPageFileAtShutdown

Si tratta di un settaggio veramente funzionante, ma che porta a notevoli riduzioni nella velocità di spegnimento: impostando una nuova entry chiamata ClearPageFileAtShutdown di tipo decimale ed impostata ad 1 in

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet Control\SessionManager\Memory Management

Si fa si che il sistema riempia di 0 il file di swap poco prima dello specgnimento, cancellando quasliasi traccia presente.

Un interessante tweak per gli ambienti in cui la riservatezza delle informazioni debba essere mantenuta ad altissimi livelli (penso in particolare a governi o istituti di credito) ma che può essere tranquillamente ignorata altrove.

Una volta sfatati un po' di miti, possiamo buttarci a capofitto nelle varie modifiche che renderanno veramente più performante il vostro sistema.

Ottimizzazioni generali

Come prima cosa è bene controllare che il computer sia esente da spyware, worm, virus, dialer o quant'altro: tutti questi programmini risiedono in memoria e spesso sono programmati talmente male da causare danni ben maggiori da quelli previsti. Molti virus inoltre utilizzano le risorse di sistema per tentare di diffondersi via mail o mediante connessioni di rete, tutte operazioni estremamente lesive per la velocità della macchina.

Prima di iniziare ad ottimizzare fate quindi qualche controllo con le utility proposte nel nostro canale Sicurezza per assicurarvi di essere "puliti".

Ricordatevi anche di aggiornare i driver di tutte le periferiche e, in generale, di effettuare tutti i controlli principali per assicurarvi che il sistema sia in buona forma: sono riassunti nell'articolo "I problemi più comuni"

Opzioni prestazioni

Portatevi su Pannello di Controllo -> Sistema -> Avanzate -> Prestazioni -> Avanzate

Pianificazione processore

Assicuratevi che questa opzione sia impostata su Programmi: con questo settaggio infatti il processore darà una priorità di esecuzione maggiore alle applicazioni in primo piano. Selezionando l'altra opzione invece tutti i processi avranno la stessa priorità, sia che si tratti di servizi che di applicazioni: una cosa interessante solamente per i server.

Utilizzo memoria

Nella medesima schermata impostate Programmi anche come scelta di utilizzo memoria . Come documentato in questo articolo Microsoft si tratta della scelta migliore per le workstation.

Deframmentare il file di swap

L'utility di deframmentazione standard inclusa in Windows non è in grado di deframmentare il file di swap, e dopo alcuni mesi di utilizzo questo può essere memorizzato in modo molto frammentato sul disco, riducendo sensibilmente i tempi di accesso.

Per risolvere il problema possiamo utilizzare PageDefrag, una pratica utility gratuita che ci consente di deframmentare proprio il file di paginazione.

Una volta scaricato il programma (che non necessita di installazione) è sufficiente avviarlo (DOPO aver ultimato una normale deframmentazione con l'utilità inclusa nel sistema operativo), e quindi mettere la spunta a defragment every boot: in questo modo il file di paginazione verrà automaticamente deframmentato (assieme ad altri file di sistema critici) ad ogni avvio del sistema.

La guida alla gestione della memoria virtuale, originariamente presentata a questa pagina, è stata in seguito ulteriormente ampliata ed aggiornata.

Per ottimizzarne la fruibilità abbiamo deciso quindi di scorporarla in un articolo a sé stante, intitolato "Guida definitiva alla memoria virtuale".

MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .

Copyright 2008 MegaLab.it - Tutti i diritti sono riservati