( bra | 2007. 06. 10., v – 20:11 )

strace -f -ttt -o out echo
egrep 'open|access\(' out
27261 1181497445.070474 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
27261 1181497445.070605 open("/etc/ld.so.cache", O_RDONLY) = 3
27261 1181497445.070964 open("/lib/libc.so.6", O_RDONLY) = 3
27261 1181497445.073607 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3

ktrace -d -i echo
kdump | egrep -A1 'CALL.*open|access\('
25355 echo CALL open(0x28069088,0,0x1b6)
25355 echo NAMI "/etc/libmap.conf"
--
25355 echo CALL open(0x280682e0,0,0)
25355 echo NAMI "/var/run/ld-elf.so.hints"
--
25355 echo CALL access(0x28079000,0)
25355 echo NAMI "/lib/libc.so.6"
--
25355 echo CALL open(0x280730e0,0,0)
25355 echo NAMI "/lib/libc.so.6"

Nézőpont kérdése, hogy kit tekintünk jobbnak, mindenesetre azt hiszem abban megegyezhetünk, hogy a Linuxnál több fájlt nyit meg alapból (egy default FreeBSD telepítésben nincs libmap.conf).

Nézzük a stoppert:

less out
26670 1181497445.045361 open("/etc/ld.so.cache", O_RDONLY) = 3
26670 1181497445.045698 close(3) = 0
1181497445.045698-1181497445.045361=0.000337

kdump -T | less (ez most itt a libmap.conf-ra fog vonatkozni, aminek parse-olásával turul16-nak akkora gondja van)
25355 echo 1181497763.340305 RET open 3
25355 echo 1181497763.340424 CALL close(0x3)
1181497763.340424-1181497763.340305=0.000119

Hüm, hüm.
FreeBSD:Linux=1:0

De nézzük még tovább:
27261 1181497445.069527 execve("/bin/echo", ["echo"], [/* 21 vars */]) = 0
27261 1181497445.076522 exit_group(0) = ?
1181497445.076522-1181497445.069527=0.006995

25355 echo 1181497763.340027 RET execve 0
25355 echo 1181497763.342038 CALL exit(0)
1181497763.342038-1181497763.340027=0.002011

Oh boy, FreeBSD kollega 3,4783-szer elindítja az echo-t és 2,8319-szer felparse-olja a több kB-os szöveges libmap.conf-ot, míg Linux kollega egyszer kinyög magából egy \n-t, illetve beröffenti a bináris ld.so.cache-t.

Nem is beszélve arról, hogy a libmap.conf mennyivel elegánsabb a szánalmas megoldásodhoz képest. :)