glibc optimizacija
Ne tako davne 2003 godine, moj prijatelj i ja smo primetili lošu optimizaciju nekih kompajlera (na nekim platformama) pokušavajući da kreiramo specifično okruženje za ultra siguran server koji je trebao da trpi izuzetno veliko opterećenje. Posle dužeg ćaskanja na ES forumu (što se tada svelo na praktično gubljenje vremena, jer su neki držali takozvani gnu-brain-wash stav), priču smo preneli na malo ozbiljniji nivo. Poslali smo email na glibc dev listu, gde se kasnije vodila diskusija. Rezultate kao i logove svega ovoga nalaze se lokalno u ovom fajlu. Ukratko i radi najjednostavnijeg primera, kompajlirali smo prazan program:
echo "int main() {}" > linux.c
gcc -o linux linux.c
gcc -static -o linux-static linux.c
strip linux-static
ls -al
A rezultati su varirali od platforme do platforme:
system | arch. | glibc ver. | dynamic | static strip | +--------------+-------+--------------+-----------+--------------+ Slackware 7.1 | x86 | 2.91.66 | 11505 | 205360 | Slackware 8 | x86 | 2.95.3 | 13102 | 339360 | Slackware 9 | x86 | 3.2.2 | 10960 | 413360 | Debian 3 | ia64 | ia64 3.3 | 6831 | 848600 | Debian 3 | alpha | 2.95.4 | 8669 | 518224 | Red Hat 7.2 | alpha | 2.96 | 178107 | 493464 | SuSe 7.1 | alpha | 2.96 | 167243 | 451560 | FreeBSD 4.8 | x86 | 2.95.4 | 4180 | 12284 | NetBSD 1.6 | x86 | 2.95.3 | 5737 | 12500 | OpenBSD 3.2 | x86 | 2.95.3 | 25306 | 20480 | HP-UX B.11.11 |hppa64 | 3.2 | 8440 | 234832 | SunOS 5.6 | sparc | 2.8.1 | 24156 | 77364 | SunOS 5.8 | sparc | 3.2 | 6164 | 77312 | +--------------+-------+--------------+-----------+--------------+
Još tada videlo se koje platforme i koji operativni sistemi imaju daleko bolju optimizaciju, i vode računa (opet priča o malloc()-u). Razlike su bile drastične, iz gornje tabele se može videti da su neki fajlovi bili i do 10 puta veći. Iako su gore prikazane verzije operativnih sistema dosta stare, situacija se popravila samo kod nekih.