Tag: BSD

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.