Tempo di Build… come velocizzarle.
Scritto da sarace in HowTo(s), Linux, tags: Guide, LinuxLeggendo l’articolo sulla compilazione da svn di Kde, su pollycoke, ho deciso di scrivere questa mini-guida per velocizzare le compilazioni.Diciamocelo chiaro, oramai la potenza di calcolo dei processori è tale che lanciarci nell’impresa di compilare un qualsivoglia componente, anche il più oneroso, non è più proibitivo…
Ricordo alla mia prima installazione di gentoo… sistema + kde + firefox + thunderbird, ci volle quasi una settimana sul mio vecchio Athlon XP 1800+, già con il passaggio al pentium 4 in una giornata scarsa il sistema era bello che pronto ed aggiornato… Adesso con sistemi dual/quad core i tempi sono scalati ulteriormente…
Tuttavia, pur aumentando la prestazioni della cpu, il tempo di compilazione non scala linearmente, colpa di una serie di colli di bottiglia. Essenzialmente in un sistema che scarica da un qualsiasi repository i sorgenti per poi compilarli ci sono due colli di bottiglia: la connessione ed il filesystem.
Dei due, il primo (problema) è endemico… l’unica è avere una connessione veloce… si può migliorare la cosa utilizzando, magari, dei gestori di download, ma se volete il sistema sempre aggiornato all’ultima versione presente sul repository vi dovete rassegnare e portare pazienza… (io per fortuna ho fastweb che sulla rete GARR va da Dio!
).
Quello del filesystem invece è un problema più facilmente gestibile…
Il collo di bottiglia, in questo caso, consta nello spostamento dei dati da e verso il disco nella RAM. Quindi l’ideale sarebbe poter scaricare i sorgenti direttamente in RAM e compilarli da lì… nulla di più facile: quello che ci occorre è un ramdisk. Ovviamente, per utilizzare questo sistema dovrete avere un generoso quantitativo di RAM, per poterne dedicare una porzione di dimensioni adeguate alla dimensione dei sorgenti che volete compilare… Inoltre dovete ricordarvi che la RAM è una memoria volatile, per cui, se per qualche motivo volete conservare sorgenti e file di configurazione, dovrete ricordarvi di trasferirli sul disco fisso, prima di smontare il ramdisk/spegnere il computer, pena la perdita irreparabile di quanto contenuto in esso.
Ma andiamo con ordine…
Quello che vi serve è il supporto ai ramdisk compilato nel kernel o come modulo… la maggior parte dei kernel ha tale supporto anche perchè, in fase di avvio, di solito, montano un ramdisk per caricare i moduli di cui hanno bisogno prim’ancora di aver potuto montare il rfs (ad esempio i moduli del controller dei dischi). Se questo è il vostro caso, allora si tratta semplicemente di andare ad editare il file di configurazione del vostro boot loader (grub o lilo) ed aggiungere tra i parametri da passare al kernel l’opzione:
ramdisk_size=SizeInKbytes
Una volta rebootato il sistema vi dovreste ritrovare almeno un device /dev/ramX, dove X è un numero… che potrete montare come un qualsiasi disco previa formattazione con
mkfs -t ext2 /dev/ramX
Adesso il disco è bello che pronto per i vostri esperimenti… rimane ancora però da discutere la questione dimensioni. Per determinare la dimensione del ramdisk utile allo scopo dovrete stimare la dimensione dei sorgenti e tenervi un buon margine per i prodotti di compilazione… diciamo che, mediamente, vi serve dal 40 al 50% di spazio in più per ospitare file oggetto, librerie ed eseguibili una volta compilati. Dovete però tener conto che per non penalizzare troppo il sistema, converebbe non eccedere con l’uso della RAM dedicata a ramdisk, per cui, in linea teorica (o come direbbe un mio vecchio prof dell’università, usando il metodo “spannometrico”), per il sistema servono sempre almeno quei 600-700 Mbytes di RAM puliti puliti per girare senza troppi intoppi… da cui ne viene che su un sistema con 1GB di RAM non si dovrebbe superare mai il limite ragionevole di 256MBytes.
Certo, 256Mbytes sono pochi per compilare, ad esempio, tutto KDE, allora la soluzione migliore è compilare a pezzi modulo per modulo, eventualmente swappando poi sul disco tra sorgenti ancora da compilare e moduli già compilati.
Questo ovviamente a meno di non avere un quantitativo spropositato di RAM (che nel 1990 era 4Mbytes, nel 2000 256 Mbytes, nel 2007 è… boh? 4Gigabytes?), nel qual caso potrete divertirvi con le dimensioni che più vi aggradano…
Sugli stessi temi:
Articoli (RSS)