玩命式编译内核
时间:2008-11-19
来源:互联网
1. kernel
2. glibc
3. Xorg 自身
4. X 的桌面环境
当中以内核最见效,可是 kernel developer 为求稳定,默认是用 -O2 来编译的,也可以选择用 -Os 来取得较少的体积,大家可有想过用 -O3 来怎样呢?
其实是可以的,不过要分两个步骤进行:
1. 按照正常方式编译及安装内核一次,把所有相关的东西(包括模组)如常安装便行
2. 清空源码树重新再来一次,但要用 -O3,必需在 make 之前修改 Makefile。可是完全用 -O3 编译是无法完成的,因为模组的建立不能继续下去
CC arch/x86/boot/video-mode.o
CC arch/x86/boot/version.o
CC arch/x86/boot/apm.o
CC arch/x86/boot/video-vga.o
CC arch/x86/boot/video-vesa.o
CC arch/x86/boot/video-bios.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
OBJCOPY arch/x86/boot/vmlinux.bin
HOSTCC arch/x86/boot/tools/build
BUILD arch/x86/boot/bzImage
Root device is (8, 6)
Setup is 11676 bytes (padded to 11776 bytes).
System is 2302 kB
CRC 3ffd8126
Kernel: arch/x86/boot/bzImage is ready (#1)
Building modules, stage 2.
MODPOST 558 modules
ERROR: "__bad_udelay" [drivers/net/tokenring/tms380tr.ko] undefined!
WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
real 25m0.900s
user 22m28.258s
sys 1m26.889s
d00m3d@BlackMesa:~/BLFS-sources/linux-2.6.27.6$
Kernel: arch/x86/boot/bzImage is ready (#1)
现在有了 kexec-tools,http://www.linuxsir.org/bbs/thread335331.html
连重启都不用,马上可以测试新内核了。如无意外,应该一切正常"起动",模块加载也不会出问题,我不知用哪些软件做 benchmarking 好,但改用 -O3 为我带来的只有喜悦,系统突然精神数倍,反应奇佳,太棒了!
吾为求提升系统效能,不择手段,牺牲稳定性在所不计,(其实系统已运作多天也未见任何不稳定),不喜者请勿仿效!
作者: d00m3d 发布时间: 2008-11-19
作者: linux001 发布时间: 2008-11-19
作者: qufo 发布时间: 2008-11-19
个人在您的提示下尝试清空源码树修改Makefile,将其中的-O2改为-O3
可以编译模块,没有提示错误(或许这个在28内核中改进了没出错?)
察看了bzImage体积增大了点(原先用-Os出来的是1.3M,用-O3出来的是1.7M)
可速度方面好像没什么提升
或许我感觉不对
作者: goodstarting 发布时间: 2008-11-26
http://www.linuxfromscratch.org/hint...c-compiler.txt
作者: RTL 发布时间: 2008-11-26
作者: RTL
如果真的在意性能,可以用icc(Intel® C++ Compiler) 來做lfs 或者用icc 來編譯内核來提升性能
http://www.linuxfromscratch.org/hint...c-compiler.txt |
作者: d00m3d 发布时间: 2008-11-26
作者: goodstarting
d00m3d 斑竹您确定采用-O3能提速?
个人在您的提示下尝试清空源码树修改Makefile,将其中的-O2改为-O3 可以编译模块,没有提示错误(或许这个在28内核中改进了没出错?) 察看了bzImage体积增大了点(原先用-Os出来的是1.3M,用-O3出来的是1.7M) 可速度方面好像没什么提升 或许我感觉不对 |
最近看这个 http://www.phoronix-test-suite.com/,似乎不错。
作者: d00m3d 发布时间: 2008-11-26
作者: RTL
如果真的在意性能,可以用icc(Intel® C++ Compiler) 來做lfs 或者用icc 來編譯内核來提升性能
http://www.linuxfromscratch.org/hint...c-compiler.txt |
看了一下,要钱的。。。
我一穷学生,400美元还是消费不起。。。
作者: goodstarting 发布时间: 2008-11-26
作者: d00m3d
没数据说话就是说不清,编译 lmbench 死活通不过,linpack 又没有 Fortran 来跑,Java 版又只有源码,系统却没有 JDK。。。唉!
最近看这个 http://www.phoronix-test-suite.com/,似乎不错。 |
d00m3d版主加油
等待您的数据
作者: goodstarting 发布时间: 2008-11-26
作者: d00m3d
可是 icc 再牛都是无法将俺的 CPU 潜能尽量发挥,俺用的是 Sempron64 及 Athlon64。。。。
|
作者: ti8er 发布时间: 2008-11-26
作者: ti8er
自己写驱动程序来优化内核算了。Linux下的驱动并不很难写,不过要有硬件手册做对照:)
|
作者: d00m3d 发布时间: 2008-11-26
作者: d00m3d
如何写?愿闻其详。。。
|
Linux下之所以驱动比Windows好编,是因为它把所有的硬件都看成文件来对待,一个fopen()函数就可以万能地读写所有的文件,也可以读写所有的硬件,非常地统一。
我以前在学校时用汇编语言和C写过一段驱动,用来让二极管和喇叭工作的,比较简单,其实可以当作是初级的显卡和声卡驱动了。不过很久没动了,都退化了。现在我只知道相关的大原理,只能纸上谈兵,自己可写不来了,呵呵。
至于CPU优化,大体上就是给内核增加相应的CPU指令,这个好像是在内核的CPU头文件那里定义的,可以在那个地方把缺的指令加上就可以了。要是熟练的话也可以自己写CPU驱动出来,然后编译到内核中。
毁灭兄那么牛,应该能搞定的。我现在不行啦
作者: ti8er 发布时间: 2008-11-27
作者: qufo 发布时间: 2008-11-27
作者: goodstarting
d00m3d 斑竹您确定采用-O3能提速?
个人在您的提示下尝试清空源码树修改Makefile,将其中的-O2改为-O3 可以编译模块,没有提示错误(或许这个在28内核中改进了没出错?) 察看了bzImage体积增大了点(原先用-Os出来的是1.3M,用-O3出来的是1.7M) 可速度方面好像没什么提升 或许我感觉不对 |
http://www.gentoo.org/doc/en/gcc-optimization.xml
In 3.x, -O3 has been shown to lead to marginally faster execution times over -O2, but this is no longer the case with gcc 4.x. Compiling all your packages with -O3 will result in larger binaries that require more memory, and will significantly increase the odds of compilation failure or unexpected program behavior (including errors). The downsides outweigh the benefits; remember the principle of diminishing returns. Using -O3 is not recommended for gcc 4.x.
作者: hritian 发布时间: 2008-11-27
作者: hritian
gentoo上面说在gcc4.0以后o3的效果并不大。
http://www.gentoo.org/doc/en/gcc-optimization.xml In 3.x, -O3 has been shown to lead to marginally faster execution times over -O2, but this is no longer the case with gcc 4.x. Compiling all your packages with -O3 will result in larger binaries that require more memory, and will significantly increase the odds of compilation failure or unexpected program behavior (including errors). The downsides outweigh the benefits; remember the principle of diminishing returns. Using -O3 is not recommended for gcc 4.x. |
我还以为比起 40M来说很小了,没想到还搞成 1.x M,
无所谓,我内存多,费得起。
作者: qufo 发布时间: 2008-11-27
作者: hritian
gentoo上面说在gcc4.0以后o3的效果并不大。
http://www.gentoo.org/doc/en/gcc-optimization.xml In 3.x, -O3 has been shown to lead to marginally faster execution times over -O2, but this is no longer the case with gcc 4.x. Compiling all your packages with -O3 will result in larger binaries that require more memory, and will significantly increase the odds of compilation failure or unexpected program behavior (including errors). The downsides outweigh the benefits; remember the principle of diminishing returns. Using -O3 is not recommended for gcc 4.x. |
至於数据,我用 scimark2 对比过,-O3 的内核的确要比 -O2 快,数据待我整理好後再贴出来
作者: d00m3d 发布时间: 2008-12-14
大家用这个例子试一下,O2和O3的性能差异还是比较大的,
当然,这个例子是针对浮点数的。
作者: trublemaker 发布时间: 2008-12-14
作者: d00m3d
效果的大小属个人理解而矣,近日测试 2.6.28-rc6、rc7 及 rc7-git7 都能直接通过-O3 了,可惜用 gcc-4.4 的 snapshot 仍然有问题
至於数据,我用 scimark2 对比过,-O3 的内核的确要比 -O2 快,数据待我整理好後再贴出来 |
相当期待测试数据。
不过我最近测服务器的数据来看,我倒是觉得glibc的编译优化效果很好,内核优化倒是没看到什么很明显的效果。
作者: hritian 发布时间: 2008-12-16
作者: shooter 发布时间: 2008-12-19
作者: hritian
相当期待测试数据。
不过我最近测服务器的数据来看,我倒是觉得glibc的编译优化效果很好,内核优化倒是没看到什么很明显的效果。 |
刚看一下 top500,今天的超级太 BT 了,IBM 的 Roadrunner 已超越 PFlops (1000 TFlops) 之谱,偶的老机子连 GFlops 都不到 :(
Btw,中国也可以引以为敖,上海超级电脑在最新 Top500 排名现时第十位
http://www.top500.org/list/2008/11/100
SciMark2-Benchmarking.pdf (54.2 KB, 46 次查看) |
作者: d00m3d 发布时间: 2008-12-20
作者: shooter
lz就好像在玩F1,速度快,过瘾,不过很容易撞车,汽车也很容易出故障~
|
作者: d00m3d 发布时间: 2008-12-20
从3000到了3300,
默认的内核编译是Os,太保守了。
作者: trublemaker 发布时间: 2009-01-07
make HOSTCC="gcc -march=<cpu类型> -O3 -tracer " CC=" gcc -march=<cpu类型> -O3 -tracer"
作者: kangtian 发布时间: 2009-01-07
作者: zengjingpku 发布时间: 2009-01-12
好像可以先用默认的编译bzImage
然后加上优化编译modules
作者: trublemaker 发布时间: 2009-01-12
作者: strangk 发布时间: 2009-01-12
作者: trublemaker
用O3编译了之后,glxgears测显卡性能,
从3000到了3300, 默认的内核编译是Os,太保守了。 |
作者: d00m3d 发布时间: 2009-01-20
一件令人兴奋的事终於发生了,不但 gcc-4.4 的 snapshot 能通过,而且用 -O2 及 -O3 都能通过,gcc-4.4 的效能比 gcc-4.3.2 更棒,爽死了!
作者: d00m3d 发布时间: 2009-01-20
还好gcc还没编译,改之...
作者: goodstarting 发布时间: 2009-01-20
作者: goodstarting
不是吧....
还好gcc还没编译,改之... |
原因:
1. gcc-4.4 现在还在开发阶段,bug 又多,而且也有很多软件未能通过编译
2. 我的系统里有几版 gcc,可随意切换,http://www.linuxsir.org/bbs/thread329026.html
我在玩命,兄弟请勿跟随!
作者: d00m3d 发布时间: 2009-01-20
老大的帖子可是经常拜读的....
作者: goodstarting 发布时间: 2009-01-20
哈哈 喜欢这样的
作者: SuperL 发布时间: 2009-02-04
作者: qdog988 发布时间: 2009-02-05
http://helllabs.org/finit/
作者: leasor 发布时间: 2009-02-05
强贴留念
在嵌入式中很有用
作者: sinanjj 发布时间: 2009-04-10
作者: d00m3d 发布时间: 2009-04-10
作者: zpcat 发布时间: 2009-09-13
装LFS6.4时, 我毫不犹豫的选择了当时最新的gcc-4.4.0, 虽然和手册不一致.
在用的过程中, 确实有一些软件需要小修一下才能编译成功.
比方说今天编译的stardict-3.0.1
不加入几个#include <stdio.h>是不能编译成功的...
作者: swordhui 发布时间: 2009-09-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28