Nonostante abbia già parlato dell'argomento, ne torno volentieri a riparlare per dipanare un po' di confusione che si legge (a volte maliziosamente) in giro su SuperFetch. Per questo post trarrò spunto da un interessante articolo sul kernel di Vista firmato Russinovich e tradotto in Italiano qui.

Il concetto di SuperFetch è quello di utilizzare la RAM libera (solo quella!) per tenere in memoria i file o le applicazioni che si preveda stiano per essere usate. Notare che non ho detto "usate più spesso", ma che "si prevede stiano per essere usate". Ciò significa che se tutte le sere alle 5pm apro la mia applicazione preferita (Settlers of Catan) SuperFetch, dopo qualche giorno di adattamento, me la farà trovare "pronta" a quell'ora (non molto prima, non molto dopo). Questo richiede un'analisi statistica che non può essere perfetta: se un giorno devo fare gli straordinari ed invece di Catan devo aprire Excel poco male; Excel verrebbe caricato da disco esattamente come "ai tempi" di XP. Nessun peggioramento di performance nel caso peggiore, ma notevole miglioramento nel caso migliore (cioè quello dell'abitudinario).

I due aspetti spesso ingiustamente criticati di SuperFetch sono:

  1. il caricamento delle applicazioni in memoria (o l'analisi statistica) richiede risorse e rallenta l'uso normale del PC
  2. se una applicazione dovesse avere bisogno urgente di RAM  - e questa è occupata da SuperFetch - viene costretta inutilmente a "swappare su disco"

Entrambe le affermazioni sono scorrette. Per la prima affermazione vale la pena notare, come dice Russinovich, che:

Quando la memoria si libera, ad esempio quando un'applicazione viene chiusa o rilascia memoria, SuperFetch chiede a Memory Manager di recuperare i dati e il codice rimossi di recente. Questa operazione viene eseguita alla velocità di poche pagine al secondo con una priorità di I/O Molto Bassa, in modo che il precaricamento non abbia un impatto sulle applicazioni attive dell'utente o di altra natura.

Vista implementa l'I/O con priorità (credo sia il primo - ed al momento unico - sistema operativo desktop a farlo): ne ho parlato già in questo post. Quello che vuol dire è che la richiesta di lettura da disco dei file da tenere in cache viene fatta con una priorità così bassa che non c'è nessuna differenza percepibile ad occhio umano nell'uso delle altre applicazioni. Quindi non è teoricamente possibile percepire nessun rallentamento.

Per quanto riguarda la seconda affermazione, ho già detto nella premessa che SuperFetch usa solo la memoria libera. A questo va aggiunto che la memoria "occupata" da SuperFetch viene sotto ogni aspetto considerata "disponibile" alle applicazioni. Se una applicazione avesse bisogno urgente di una quantità di RAM, questa verrebbe "tolta" a SuperFetch ed "assegnata" all'applicazione: SEMPRE e senza grossa penalità in termini di performance. In nessun caso le applicazioni saranno costrette ad usare il paging file se c'è memoria assegnata a SuperFetch. A dimostrazione di quanto detto questa immagine tratta dalla versione inglese dell'articolo di Russinovich (nella traduzione italiana l'immagine ha perso il "senso" originale):

Il gradino "verso il basso" corrisponde alla chiusura dell'applicazione affamata di RAM. Se la RAM fosse stata assegnata a SuperFetch e non all'applicazione, non si sarebbe notato il drastico "rilascio" di memoria come da grafico. Ripetere l'esperimento sul proprio PC, usando il metodo scientifico, è molto semplice: aspettare che SuperFetch saturi la RAM (potrebbe richiedere qualche minuto dall'accensione), lanciare una applicazione avida o caricare un file immenso in memoria e chiudere l'applicazione e si potrà notare la drastica caduta di RAM allocata (e SuperFetch riprendere il suo sporco e silenzioso lavoro).

Un'ultima nota conclusiva: tra i requisiti di SuperFetch ci sono un paio di feature esclusive di Windows Vista (in confronto ad esempio con Windows XP). Queste sono il nuovo "memory management system" e il già nominato I/O con priorità. Per tale motivo, a meno di non ridisegnare Windows XP, non è possibile implementare SuperFetch su piattaforme Windows più "vecchie". Sarà interessante vedere quanto "rapidamente" altri OS adotteranno qualcosa di simile in futuro.

-quack

Technorati tags: ,