Utilizzare Gentoo è bello perchè non si smette mai di imparare. Ogni giorno c'è qualche strana e peculiare opzione del compilatore/linker/init che è stata fin ora nascosta o che è stata da poco introdotta.
Dopo aver _da sempre_ utilizzato gcc + glibc fedelmente stable ho deciso di provare ad andare oltre.
Dopo aver letto milioni di post riguardo l'argomento ho provveduto ad eseguire un aggiornamento del sistema abbastanza radicale.
Bene. Scrivo questo post per portarvi i miei primi risultati, nella speranza di aiutare più di qualcuno nella scelta del software (o versioni di questo) da utilizzare.
L'aggiornamento è consistito precisamente in:
gcc-4.1.2 => gcc-4.3.3 (~)
glibc-2.6.1 => glibc-2.9_p20081201-r1 (~)
baselayout-1.12.11.1 => baselayout-2.0.0 (~)
=> openrc-0.4.2 (~) (Aggiornato oggi alla 0.4.3)
Dato che posseggo un processore Intel(R) Core(TM)2 Duo T8100 @ 2.10GHz ho impostato le cflags nel make.conf come segue:
CFLAGS="-march=core2 -O3 -pipe -msse4.1 -fomit-frame-pointer"
Come potete vedere utilizzo -march=core2 che è un target disponibile solo con la versione di gcc che sto attualmente usando (>=4.3). In particolare, questa flag prevede la compilazione per un profilo a 64bit (ex nocona).
L'opzione -O3 prevede un ottimizzazione del codice molto spinta, non indicata per sistemi con poca memoria perchè comporta spesso la'umento della dimensione dei binari ottenuti dalla compilazione.
Per far sì che tutti i pacchetti vengano compilati con le nuove impostazioni è necessario ricompilare tutto il sistema. Dato che fra gli aggiornamenti è presente anche l'aggiornamento delle glibc e di gcc consiglio di seguire questo iter:
# emerge --verbose glibc
# emerge --verbose gcc; emerge --verbose gcc
# emerge --ask --verbose --keep-going system
Un'ulteriore stravaganza è stata quella di modificare le CFLAGS utilizzate per compilazione del kernel. Per far ciò è necessario modificare il Makefile presente nella root dei sorgenti del kernel, precisamente la variabile HOSTCFLAGS.
Il kernel è il 2.6.28-r1 (tuxonice-sources).
I primi risultati che posso portare sono la netta riduzione del tempo di boot.
Probabilmente questo sarà dovuto maggiormente all'introduzione di openrc, un sistema gestione delle dipendenze degli script di init, complementare al classico /sbin/init, totalmente scritto in C.
Quì trovate il diagramma creato grazie a bootchart che mostra in dettaglio la fase di init del sistema con i relativi tempi.
Attualmente, dato che mi trovo ad aver compilato il kernel con delle CFLAGS abbastanza aggressive, prima di passare a test delle performance sto preferendo continuare ad effettuare vari test sulla stabilità per esser certo che non vi siano problemi di base.
Fin ora non è stato rilevato alcun comportamento anomalo.
Eventuali risultati futuri saranno postati immediatamente.