64位MIPS性能优化
时间:2009-08-15 来源:xiphiliu
内核:
1) 盒子要使用64位内核以支持大内存,由于内核是静态链结所以编译内核使用-mabi=64 -msym32 -mno-abicalls -mplt ,这些选项强制64位内核使用32位符号,mno-abicalls减小代码尺寸,mplt在需要时使用非PIC代码等,这些措施可以提高性能。具体原因 参见[1][2][3]。
2) 映射内核,把内核从kseg0映射到kseg2靠近模块,不过会造成中断向量远离内核。
userland优化措施:
1)-mno-shared直接调用,不用读GOT和初始化t9。
2) 使用non-pic[4],性能提升大概5%,当仅调用库函数反而会降低性能。从gcc-4.4起已经支持(glibc-2.9 binutils-2.19及以上)。在64位时需要指定-msym32,而-mno-shared不用指出,从gcc-4.3起可以自动检 测,-mabicalls是默认,也不用指出。
[1]http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html
[2]http://sourceware.org/ml/binutils/2008-06/msg00280.html
[3]http://sources.redhat.com/ml/glibc-linux/1999-q4/msg00045.html
[4]http://archives.free.net.ph/message/20080817.105110.6f1a7051.ja.html
1) 盒子要使用64位内核以支持大内存,由于内核是静态链结所以编译内核使用-mabi=64 -msym32 -mno-abicalls -mplt ,这些选项强制64位内核使用32位符号,mno-abicalls减小代码尺寸,mplt在需要时使用非PIC代码等,这些措施可以提高性能。具体原因 参见[1][2][3]。
2) 映射内核,把内核从kseg0映射到kseg2靠近模块,不过会造成中断向量远离内核。
userland优化措施:
1)-mno-shared直接调用,不用读GOT和初始化t9。
2) 使用non-pic[4],性能提升大概5%,当仅调用库函数反而会降低性能。从gcc-4.4起已经支持(glibc-2.9 binutils-2.19及以上)。在64位时需要指定-msym32,而-mno-shared不用指出,从gcc-4.3起可以自动检 测,-mabicalls是默认,也不用指出。
[1]http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html
[2]http://sourceware.org/ml/binutils/2008-06/msg00280.html
[3]http://sources.redhat.com/ml/glibc-linux/1999-q4/msg00045.html
[4]http://archives.free.net.ph/message/20080817.105110.6f1a7051.ja.html
|
相关阅读 更多 +