Hello all,
Nefiind un specialist in compilatoare, as dori sa deschid un thread legat de
acestea si metodele de optimizare folosite. Cu o saptamina si ceva in urma,
am compilat un vanilla kernel 2.4.20 + ac2 patch pe un Rahat 7.3, folosind
doua compilatoare diferite:
- gcc-2.96-110 care vine default pe OS
- gcc3-3.1-5 pentru RedHat updates.
Pima data am compilat cu gcc2.96, folosind fisierul Makefile default. Am
obtinut un kernel in jur de 1.1MB
A doua oara, am modificat Makefile asa cum arat mai jos, activind o metoda de
optimizare mai agresiva!
Am incercat cu gcc-2.96 dar nu se mai compileaza, da erori. In cazul acesta,
am schimbat compilatorul, cu gcc-3.1-5. De data asta s-a compilat frumos, dar
am obtinut un kernel cam cu 20-25% mai mare (nu mai am datele exacte acum).
As avea citeva intrebari:
Fisierul de configurare al kernelului a fost identic in ambele cazuri.
- este normal sa obtin un kernel mai mare in cazul in care folosesc
"agressive optimization" sau acest lucru se datoreaza folosirii lui gcc-3.1-5
(este adevarat, ca nu am mai incercat sa compilez cu gcc-3.1-5 folosind
Makefile-ul original, si apoi sa compar imagine obtinuta cu cea veche...mea
culpa... dar masina pe care eram nu ma prea indema sa tot compilez kernei)
- de ce in aceasta situatie, cind am folosit O3 obtin o imagine mai mare,
cind de fapt eu ma asteptam sa fie pe dos.
- cum ar fi mai bine sa procedez: sa pastrez imaginea obtinuta cu gcc3 (chiar
daca este mai mare), sau sa o folosesc pe cea obtinuta cu gcc-2.96?
Un kernel foarte mic, din cite stiu eu poate deveni instabil, dar...in
situatia de fata, nu este cazul. Am avut si imagini mai mici de kernel care
au fost foarte stabile. In mod normal, cind folosesti O3, nu trebuie sa se
faca oarece compresie?
Pe de alta parte, nici un kernel mare nu este recomandat (motivele se cunosc
deja)...
- cum sa tratez faptul ca gcc-2.96 nu poate sa compileze cu O3, ca pe un
lucru "bun" sau nu.... (stiu ca gcc-2.96 este un subiect de largi
controverse... dar sa presupunem ca nu este gcc-2.96-redhat ci din seria
gcc-2.9.x). Prin readme-uri scrie ca O3 nu este obligatoriu sa mai si
mearga...
- ma gindesc si la faptul ca o posibila cauza pentru care gcc-2.96 da rateuri
poate fi si pentru ca este mai vechi decit 3.1.x si nu stie sa trateze
anumite instructiuni?
Iata in continuare, modificarile facute:
Original Make file:
HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
-fno-strict-aliasing -fno-common
ifndef CONFIG_FRAME_POINTER
CFLAGS += -fomit-frame-pointer
endif
Modified Make file:
HOSTCFLAGS = -Wall -Wstrict-prototypes -O3 -funroll-loops
-fomit-frame-pointer
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O3 \
-funroll-loops -fno-strict-aliasing -fno-common
ifndef CONFIG_FRAME_POINTER
CFLAGS += -fomit-frame-pointer
endif
Best Regards,
Alex
---
Pentru dezabonare, trimiteti mail la
[EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
REGULI, arhive si alte informatii: http://www.lug.ro/mlist/