Preload è un servizio, un demone Linux per intenderci, che si occupa di pre-caricare in memoria i file degli applicativi che vengono eseguiti più di frequente, comprese eventuali librerie e dipendenze. In questo modo l´avvio dell´applicativo da parte dell´utente risulterà più veloce in quanto tutti i dati saranno già disponibili in memoria.
Per capire come funziona preload bisogna leggere il file "preload/doc/proposal.txt" che si trova nell´albero dei sorgenti (scaricabili dalla pagina del progetto ospitata su SourceForge).
Si comprende che il demone, eseguito all´avvio del sistema grazie ad uno script SysV (System V), è composto principalmente da tre componenti: profeta, database, e modulo di readahead.
Il "profeta" (file prophet.c, spy.c, state.c e proc.c) ha il compito di capire quali saranno i file da pre-caricare in memoria. Utilizzando alcune euristiche basate sull´osservazione dei processi in esecuzione esso costruiste il "database" delle applicazioni e degli stati di esecuzioni. Una volta capita quale sarà l´applicazione che con molta probabilità sta per eseguita il profeta incarica il modulo di "readehead" (file readehead.c) di effettuare la lettura anticipata dei file.
Inutile dire che per andare a regime il demone preload richiede un po´ di tempo, in quanto deve osservare il sistema e costruire il database dei comportamenti. Se l´utente, poi, cambia comportamento e modifica le proprie preferenze allora preload accuserà il cambio di abitudini con qualche giorno di ritardo.
Come installare preload su Ubuntu 9.04? Sul sito HowtoForge è stata pubblicata una breve guida che spiega come installare preload su Ubuntu 9.04. Niente paura, non bisogna ricompilare i sorgenti. È sufficiente installare il pacchetto precompilato fornito da Canonical, ed eventualmente mettere mano al file di configurazione.
Quali sono i principali componenti di preload? Senza farla troppo lunga elenchiamo i principali componenti, ovvero i binari, gli script, i file dati, e i file di configurazione, utilizzati da preload.
- /usr/sbin/preload: il demone vero e proprio, che viene eseguito in background;
- /usr/share/man/man8/preload.8: la man-page del demone;
- /etc/preload.conf: il file di configurazione del demone;
- /var/log/preload: il file di log del demone;
- /etc/logrotate.d/preload: il file configurazione per il logging del demone;
- /var/lib/preload/preload.state: il database gestito dal demone;
- /etc/rc.d/init.d/preload: l´init-script SysV eseguito per avviare o arrestare il demone;
- /etc/sysconfig/preload: il file di configurazione dell´init-script.
Qualcuno di voi si sarà certamente chiesto come fa nella pratica il demone preload a pre-caricare in memoria i file, e quindi a velocizzare l´avvio delle applicazioni. La risposta è semplice, preload utilizza una system-call che si chiama proprio "readahead". Se date un colpo di "man readahead" sulla vostra console potrete leggere quello che fa questa funzione, che esiste fin dal lontano Kernel Linux 2.4.13.
Questa system-call alloca, forse è meglio dire riempie, "porzioni" della "page-cache del Kernel Linux" con i dati del file associato al suo primo parametro (il famoso file-descriptor). La page-cache, come indica il nome, è una cache, quindi un´area di memoria (opportunamente organizzata e gestita) che contiene i dati che vengono utilizzati frequentemente, o di cui si ha bisogno nell´immediato. Caricando il file nella page-cache il Kernel Linux avrà già i dati a disposizione quando questi verranno richiesti.