Tag: ottimizzare installazioni

Compilare e ottimizzare il kernel FreeBSD

Posted by – November 22, 2006

Una volta eseguita l’installazione di una macchina FreeBSD solitamente si richiede una minima ottimizzazione ricompilando il kernel installato di default.
Prima di addentrarsi nei meandri della compilazione è necessario procurarsi i sorgenti del kernel con questi pochi passaggi:

# /stand/sysinstall

scegliere


'Configure'
'Distributions'
'src'
'sys'

quindi ‘OK’ e di nuovo ‘OK’

Selezionare un FTP da cui scaricare i sorgenti. Quindi, ad installazione completata uscire da sysinstall scegliendo ‘Exit’

Il nuovo albero dei sorgenti risiede in /usr/src/sys

Entriamo in /usr/src/sys/i386/conf
GENERIC è il file di configurazione di un kernel generico che dovrebbe funzionare con qualsiasi sistema.
E’ chiaro che se non si possiede alcuna interfaccia scsi o dispositivi elencati nel file suddetto sarebbe bene commentarli o rimuovere le voci corrispondeti.
Di solito si copia il file GENERIC in un file miokernel e si eseguono le modifiche su quest’ultimo.
A questo punto lanciare un config , dove è il file di configurazione.
Il comando config ritorna alla console il path relativo dalla directory di compilazione vera e propria.

cd alla directory ritornata da config quindi
make depend
make
make install

Qualora ci fossero errori già dopo la fase di make è bene non lanciare il make install

Ottimizzazione in fase di compilazione

Un primo upgrade lo fa il buon vecchio
portupgrade -ra

Il processo di compilazione necessita di un pò di tempo (dipendente dalla macchina).
In alternativa si scaricano i soli distfiles e poi si aggiorna offline con
portupgrade -Fra

Il resto delle ottimizzazioni si fanno a livello di compilazione quindi è necessario modificare il file /etc/make.conf, che presenta dei tag molto comprensibili (a rigor di logica).
I tag sono:

CPUTYPE=cpu_type dove cpu_type può essere uno di questi: i386, i486, i586, i586/mmx i686, p2, p3, p4,
k6, k6-2, or k7. Attenzione perchè gcc v2 di FreeBSD non supporta le ottimizzazioni per l’ultimo Athlon.
In quei casi usare k7. Con gcc v3 c’è maggior supporto alle ottimizzazioni

CFLAGS= -O3 -pipe -funroll-loops -ffast-math dove
-O3 setta il livello di ottimizzazione al massimo (il codice del kernel non viene considerato per questo livello
-pipe permette il passaggio di codice da un processo all’altro attraverso pipeline anzichè file temporanei riducendo fortemente le operazioni di I/O.
-funroll-loops permette l’iterazione di cicli per un numero prefissato di volte
-ffast-math breaks IEEE/ANSI regole matematiche strict, assumendo che la radice quadrata di un numero è positiva. Non si consiglia di usare questo flag se si sta compilando codice basato sull’ implementazione esatta delle regole ANSI di IEEE.

COPTFLAGS= -O2 -pipe -funroll-loops -ffast-math stessa cosa del CFLAGS ma usata per la compilazione del kernel. Si preferisce -O2 invece di -O3 perche -O3 genera kernel non corretti. Ufficialmente è supportato solo -O ma usare -O2 è ormai uno standard de facto.
Si potrebbe compilare con ottimizzazione anche aggiungendo la riga ‘makeoptions COPTFLAGS’ al file di configurazione del kernel.

Ottimizzare le installazioni in GNU/Debian

Posted by – November 13, 2006

Per installare pacchetti per debian in modo ottimizzato è necessario configurare il proprio /etc/apt/apt-build.conf in cui scegliere l’architettura della propria macchina e i flag di ottimizzazione per il gcc.

Pertanto bisogna installare apt-build con apt-get lanciando il comando
apt-get install apt-build
e selezionare la corretta ottimizzazione. Con il livello strong si fanno ottimizzazioni molto pesanti ma si allunga il tempo di compilazione del pacchetto in modo non prevedibile (si possono avere compilazioni di qualche giorno per l’intero sistema, esattamente come gentoo….).

Ad esempio il mio /etc/apt/apt-build.conf ha questa configurazione:

build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = -mtune=pentium3
options = " "
make_options = " "

Una volta fatto questo è possibile scaricare dal repository il pacchetto sottoforma di sorgente con:
apt-get source nomepacchetto

Quindi scoprire le dipendenze per quel pacchetto con
apt-get build-dep nomepacchetto

e scaricare i sorgenti delle dipendenze richieste.

Con dpkg-source -x nomepacchetto_version-revision.dsc è possibile decomprimere tutto il sorgente nella directory nomepacchetto_version.

Per compilare il sorgente bisogna entrare nella dir nomepacchetto_version e lanciare il comando
dpkg-buildpackage -rfakeroot -b

Questo genererà il pacchetto .deb installabile alla solita maniera con
dpkg -i ../nomepacchetto_version-revision_arch.deb