PDA

View Full Version : modifica Makefile del kerne...


taiger
04-03-2003, 19:31
In un documento molto interessante Securing and optimizing linux ho trovato delle configurazioni ad-hoc per aumentare le prestazioni del kernel
per esempio modificare la linea del Makefile nell'albero dei sorgenti da

HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

a

HOSTCFLAGS = -Wall -Wstrict-prototypes -O3 -funrool-loops -fomit-frame-pointer

(c'è anche una modifica simile più avanti nello script ma la tralascio...)

ma nel make bzImage mi dice che non riconosce come opzione -funroll-loops, il testo fa riferimento al kern 2.4.5, io ho il 2.4.20
qualcuno ne sa qualcosa?
sa dove potrei approfondire?

ilsensine
04-03-2003, 19:41
Originally posted by "taiger"


HOSTCFLAGS = -Wall -Wstrict-prototypes -O3 -funrool-loops -fomit-frame-pointer

-funroll-loops esiste, -funrool-loops no.

Cmq tieni conto che -O3 e -funroll-loops generalmente tendono a ingrandire il codice e a farlo più lento. Le ottimizzazioni attualmente usate sono state studiate accuratamente per la velocità.

Per me per migliorare ulteriormente le prestazioni occorrerebbe testare -fforce-mem e -fforce-addr (le ho usate con interessanti risultati nei programmi in user space); -funroll-loops potrebbe in alcuni casi migliorare le prestazioni, ma non sempre. -funroll-all-loops non migliora le prestazioni (anzi le peggiora), come ho riscontrato peggioramenti (stranamente) anche con -fschedule-insns, -fschedule-insns2 e -fthread-jumps. Anche -fexpensive-optimizations non mi ha mai fatto guadagnare un microsecondo.

mcardini
04-03-2003, 20:13
Originally posted by "ilsensine"


-funroll-loops esiste, -funrool-loops no.

Cmq tieni conto che -O3 e -funroll-loops generalmente tendono a ingrandire il codice e a farlo più lento. Le ottimizzazioni attualmente usate sono state studiate accuratamente per la velocità.

Per me per migliorare ulteriormente le prestazioni occorrerebbe testare -fforce-mem e -fforce-addr (le ho usate con interessanti risultati nei programmi in user space); -funroll-loops potrebbe in alcuni casi migliorare le prestazioni, ma non sempre. -funroll-all-loops non migliora le prestazioni (anzi le peggiora), come ho riscontrato peggioramenti (stranamente) anche con -fschedule-insns, -fschedule-insns2 e -fthread-jumps. Anche -fexpensive-optimizations non mi ha mai fatto guadagnare un microsecondo.
Cosa consigli per una compilazione veramente ottimizzata sia in velocità che in dimensioni del kernel?
Sono interessato anche io all'argomento, propio oggi ho provato a ricompilare un kernel su un k6III con varie stringhe lette su un sito, ma mi è venuto fuori un kernel enorme e che non andava un tubo :cry:
Quale è a tuo avviso la "stringa perfetta" per la compilazione del kernel?

ilsensine
04-03-2003, 20:20
La mia "stringa perfetta" è quella di default per il mio Athlon. Non ho ancora trovato il tempo di studiare a fondo -fforce-mem e -fforce-addr nel kernel.

Per il resto, diffido di qualsiasi cosa cerchi di aumentare la velocità aumentando troppo le dimensioni. Questo vale anche per il gcc 3.x: maggiore ottimizzazione del codice, maggiore dimensione dei binari ("migliore allineamento dei dati", dicono loro) ==> minore velocità. Per un motivo molto semplice: maggiori dimensioni == maggiore spreco della preziosa cache L1.

mcardini
04-03-2003, 20:31
Originally posted by "ilsensine"

La mia "stringa perfetta" è quella di default per il mio Athlon. Non ho ancora trovato il tempo di studiare a fondo -fforce-mem e -fforce-addr nel kernel.

Per il resto, diffido di qualsiasi cosa cerchi di aumentare la velocità aumentando troppo le dimensioni. Questo vale anche per il gcc 3.x: maggiore ottimizzazione del codice, maggiore dimensione dei binari ("migliore allineamento dei dati", dicono loro) ==> minore velocità. Per un motivo molto semplice: maggiori dimensioni == maggiore spreco della preziosa cache L1.
-Wall -Wstrict-prototypes -O2 -mcpu=athonxp -march=athonxp -fomit-frame-pointer

Che dici, queta va bene per il mio athlonxp?

ilsensine
05-03-2003, 07:27
A naso direi di no. Mancano le direttive di allineamento, che dovrebbero essere presenti nei Makefile del kernel.

mcardini
05-03-2003, 19:46
Originally posted by "ilsensine"

A naso direi di no. Mancano le direttive di allineamento, che dovrebbero essere presenti nei Makefile del kernel.
Scusa la mia ignoranza ma cosa sono le direttive di allineamento?
Mi puoi postare la riga precisa, in c/c++ sono un pò ignorante ;)

ilsensine
06-03-2003, 07:48
-mpreferred-stack-boundary=2 (e su alcuni processori -malign-functions)

Cmq per "personalizzare" le opzioni del proprio processore la cosa migliore è agire su arch/i386/Makefile, non sul makefile principale.