發表文章

目前顯示的是 二月, 2007的文章

使用 GNU_HASH 改進 ELF 效能

在 Linux 上執行程式效能會不好,很多時候都是因為程式動態連結 Library 的效能不彰,過去 Redhat 曾經就使用了 prelink 來修改 ELF 檔的標頭,使 ELF 能以最直接最快的途徑直接動態連結正確的 Library。同樣道理,GNU_HASH可以使 ELF 提升 50% 以上的執行效能,也是運用這樣的原理。

我們要如何知道 ELF 是否有用GNU_HASH,可以運用 readelf 指令來讀取 ELF 的 Section:

[root@localhost bin]# readelf -S Xorg
There are 39 section headers, starting at offset 0x6ab66c:

Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .interp PROGBITS 08048134 000134 000013 00 A 0 0 1
[ 2] .note.ABI-tag NOTE 08048148 000148 000020 00 A 0 0 4
[ 3] .gnu.hash GNU_HASH 08048168 000168 006238 04 A 4 0 4 [ 4] .dynsym DYNSYM 0804e3a0 0063a0 00da40 10 A 5 1 4
[ 5] .dynstr STRTAB 0805bde0 013de0 00d9d2 00 A 0 0 1
[ 6] .gnu.version VERSYM 080697b2 0217b2 001b48 02 A 4 0 2
[ 7] .gnu.version_r VERNEED 0…