View Full Version : Curiosità su compilazione kernel: O2 vs Os
Una domanda che mi sorge da tempo: che vantaggi da abilitare l'opzione "optimize for size" nel menu del kernel quando lo si ricompila?
Leggendo la descrizione dice che passa al compilatore il parametro Os invece che O2, ma cosa significano questi parametri?
Grazie in anticipo :)
Una domanda che mi sorge da tempo: che vantaggi da abilitare l'opzione "optimize for size" nel menu del kernel quando lo si ricompila?
Leggendo la descrizione dice che passa al compilatore il parametro Os invece che O2, ma cosa significano questi parametri?
Grazie in anticipo :)
dal manuale del gcc:
[quote]
-Os Optimize for size. -Os enables all -O2 optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size.
-Os disables the following optimization flags: -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version
[/code]
In pratica -Os non abilita una serie di ottimizzazioni presenti in -O2 che pur migliorando le prestazioni portano ad una dimensione maggiore dell'eseguibile. Sarebbe interessante vedere all'atto pratico la differenza di prestazioni, visto che le minori ottimizzazioni dovrebbero almeno parzialmente venir compensate da uno sfruttamento migliore della cache del processore,
dal manuale del gcc:
[quote]
-Os Optimize for size. -Os enables all -O2 optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size.
-Os disables the following optimization flags: -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version
[/code]
In pratica -Os non abilita una serie di ottimizzazioni presenti in -O2 che pur migliorando le prestazioni portano ad una dimensione maggiore dell'eseguibile. Sarebbe interessante vedere all'atto pratico la differenza di prestazioni, visto che le minori ottimizzazioni dovrebbero almeno parzialmente venir compensate da uno sfruttamento migliore della cache del processore,
Si in effetti facendo qualche ricerchina avevo trovato le info che cercavo, e quimi mi merito una partaccia perchè ancora non mi tolgo il vizio di chiedere prima di cercare :(
Certo, ecco il post l'avrei fatto lo stesso perchè sarei curioso anche io di sapere quale delle due opzioni sia più conveniente :P
maurinO_o
15-12-2006, 10:58
edit
ho scritto cosa già detta.
[QUOTE=marco.r]
fatto lo stesso perchè sarei curioso anche io di sapere quale delle due opzioni sia più conveniente :P
credo che dipenda fortemente dal tipo di architettura/pc su cui andrà il kernel, imho un kernel ottimizzato per size è utile nell'embedded in cui lo spazio è ristretto e un immagine del kernel piccola può voler dire un po più di spazio per la /
[QUOTE=Cobra78]
credo che dipenda fortemente dal tipo di architettura/pc su cui andrà il kernel, imho un kernel ottimizzato per size è utile nell'embedded in cui lo spazio è ristretto e un immagine del kernel piccola può voler dire un po più di spazio per la /
Quindi secondo te su un pc desktop non è vantaggioso prestazionalmente Os, ma è preferibile O2?
VegetaSSJ5
15-12-2006, 12:47
io ho disabilitato optimize for size. secondo me quella opzione è stata creata per i sistemi embedded con poche risorse...
[QUOTE=vizzz]
Quindi secondo te su un pc desktop non è vantaggioso prestazionalmente Os, ma è preferibile O2?
credo di si, su un desktop o server hai un bel disco capiente su cui mettere l'immagine del kernel...nell'embedded si lavora di solito con CF o SD su cui appoggiare immagine del kernel e fs compresso per poi lanciarlo in ramdisk...li allora qualche Kb in meno di immagine potrebbero aiutare, su un desktop preferirei abilitare anche ottimizzazioni che penalizzano il size ma magari aiutano da qualche altra parte imho
[QUOTE=Cobra78]
credo di si, su un desktop o server hai un bel disco capiente su cui mettere l'immagine del kernel...nell'embedded si lavora di solito con CF o SD su cui appoggiare immagine del kernel e fs compresso per poi lanciarlo in ramdisk...li allora qualche Kb in meno di immagine potrebbero aiutare, su un desktop preferirei abilitare anche ottimizzazioni che penalizzano il size ma magari aiutano da qualche altra parte imho
Ah beh, sarebbe interessante poterlo compilare con O3 e fare qualche comparazione :P
Ma forse sarebbe troppo aggressiva e a rischio stabilità per un kernel :P
Ah beh, sarebbe interessante poterlo compilare con O3 e fare qualche comparazione :P
Ma forse sarebbe troppo aggressiva e a rischio stabilità per un kernel :P
Compilando tutto con O3 ci sono rischi di stabilità, possibili regressioni della velocità dovute ad ottimizzazione troppo spinta e tempi di compilazione bibblici. :D
Io uso sempre la O2. ;)
Io sul mio nuovo server casalingo (VIA C7) ho tutto compilato (gentoo) con -Os a causa della cache di soli 128KB + 128KB; rispetto alla flag -O2 non ho riscontrato differenze a livello di sensazione, ma un paio di benchmark con script che utilizzano diversi eseguibili in sequenza sembrano leggermente più veloce -Os, forse proprio per il miglior sfruttamento della cache.
Infatti è stata la comunità di Gentoo a consigliarmi la flag -Os per il mio processore.
Io sul mio nuovo server casalingo (VIA C7) ho tutto compilato (gentoo) con -Os a causa della cache di soli 128KB + 128KB; rispetto alla flag -O2 non ho riscontrato differenze a livello di sensazione, ma un paio di benchmark con script che utilizzano diversi eseguibili in sequenza sembrano leggermente più veloce -Os, forse proprio per il miglior sfruttamento della cache.
Infatti è stata la comunità di Gentoo a consigliarmi la flag -Os per il mio processore.
Questo è interessante, adesso comincio a riflettere: il mio è u Barton con 64 + 512 quindi credo che mi convenga O2, ma il portatile? è un vecchio Duron Mobile che non penso abbia più cache del tuo C7, quindi forse su quello Os potrebbe dare qualche vantaggio......
Mmmh..
Ti dirò non è stato un vero e proprio bench perchè le "variabili ambientali" erano un po' differenti, però questo è stato il risultato.
Gentoo-wiki consiglia anche per il Duron Mobile -O2 (link: http://gentoo-wiki.com/Safe_Cflags#Mobile_Duron_.28AMD.29) però in effetti con cache piccole o bus castrati credo che -Os qualche beneficio lo porti; considerato su un intero sistema vuol dire eseguibili più piccoli, librerie più piccole, quindi in generale meno "traffico" tra CPU/cache - RAM - storage ecc..
Su macchine attuali non penso che ci sia differenza tra -Os e -O2 se non a favore di quest'ultima.
Ti dirò non è stato un vero e proprio bench perchè le "variabili ambientali" erano un po' differenti, però questo è stato il risultato.
Gentoo-wiki consiglia anche per il Duron Mobile -O2 (link: http://gentoo-wiki.com/Safe_Cflags#Mobile_Duron_.28AMD.29) però in effetti con cache piccole o bus castrati credo che -Os qualche beneficio lo porti; considerato su un intero sistema vuol dire eseguibili più piccoli, librerie più piccole, quindi in generale meno "traffico" tra CPU/cache - RAM - storage ecc..
Su macchine attuali non penso che ci sia differenza tra -Os e -O2 se non a favore di quest'ultima.
Beh conta che io parlo solo ed esclusivamente di Kernel.....
Non sono ancora a livello di compilarmi tutto il sistema, non per nulla uso Ubuntu sul fisso e Xubuntu sul portatile :p
io uso gentoo con le ottimizzazioni
-march=pentium-m -msse3 -O3 -pipe -fomit-frame-pointer
dunque ogni minimo pacchetto del mio sistema è compilato con queste impostazioni e mi trovo molto bene. sinceramente non ho mai incontrato rallentamenti con software compilato e il sistema va da dio :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.