LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2038|回复: 23

内核编译参数对内核性能影响的测试报告

[复制链接]
发表于 2010-1-15 00:03:04 | 显示全部楼层 |阅读模式
既然是用gentoo测的就发gentoo版吧。

测试环境:

系统:gentoo amd64兼容32位库,所有包全部重新编译过,cpu类型指定为native,cpu是amd的5200+,内存大小2G频率是ddr800。

内核版本:2.6.31-gentoo-r6

GCC版本:4.3.4

问题:

编译内核的时候可以设定cpu的类型和gcc的优化级别,

关于gcc的优化级别,内核提供两个选项:-Os和-O2,

如果修改Makefile可以设定成-O1或者是-O3,

我的目的就是测测不同的优化选项有什么不同的效果,

这个测试没有使用任何的benchmark工具,只用了一个我自己写的计算程序,[color="Magenta"]所以可能没有太多的参考价值。

测试方法:

使用同样的.config来编译内核,所有需要的东西都直接进入内核,只有一个东西(关于scsi的,好像目前没有办法直接编译进内核)编译成了模块,

使用不同参数编译内核,然后运行一个我自己写的计算程序10次,对比平均运行时间,进而比较性能。

所有测试过程中没有运行X,都是在CLI下面有一个普通用户完成的内核编译,然后由root完成的内核安装以及grub设置,测试性能时由普通用户完成。

主要对比3个指标:编译时间、内核体积、性能。

编译时间由编译过程中time make得来,内核体积由du –h得来,内核性能对比使用一个计算程序的运行时间来衡量。

调整编译选项的方法:

编译内核时如果选择了optimize for size,那么就是-Os,否则就是-O2,如果修改Makefile中的下属内容可以选择其他优化级别:
222 HOSTCC = gcc
223 HOSTCXX = g++
224 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
225 HOSTCXXFLAGS = -O2
521 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
522 KBUILD_CFLAGS += -Os
523 else
524 KBUILD_CFLAGS += -O2
525 endif

总共三个地方要修改。

编译时间对比:
-Os:
real 7m39.520s
user 6m24.961s
sys 0m51.929s

-O1:
real 6m35.099s
user 5m46.842s
sys 0m52.854s

-O2:
real 7m40.229s
user 6m52.027s
sys 0m54.033s

-O3:
real 8m28.620s
user 7m39.438s
sys 0m55.361s

-O1时间最短,-O3时间最长,-Os和-O2差不太多。

内核体积对比:
-Os 2.6m
-O1 2.7m
-O2 2.9m
-O3 3.2m

-Os体积最小,然后是-O1、-O2、-O3。

性能对比:


测试1:

内核编译参数 | 测试程序10次的平均运行时间(越小越好)
-Os      |  10.482s
-O1      |  10.809s
-O2      |  11.078s
-O3      |  10.838s

-O3貌似不怎么快啊,还是-Os比较快,可能和我的cpu有关,amd的cpu上的ccache比较小,这个时候使用-Os可能会有比较好的效果,但是也不要给所有的包用-Os,应为gentoo optimization guide上说这个选项并不适合多数包。

测试2:

刚刚用scimark测了一下,四个内核的结果对比如下:

-Os
  1. **                                                              **
  2. ** SciMark2 Numeric Benchmark, see [url]http://math.nist.gov/scimark[/url] **
  3. ** for details. (Results can be submitted to [email]pozo@nist.gov[/email])     **
  4. **                                                              **
  5. Using       2.00 seconds min time per kenel.
  6. Composite Score:          195.92
  7. FFT             Mflops:   156.86    (N=1024)
  8. SOR             Mflops:   379.32    (100 x 100)
  9. MonteCarlo:     Mflops:    64.22
  10. Sparse matmult  Mflops:   167.18    (N=1000, nz=5000)
  11. LU              Mflops:   212.01    (M=100, N=100)
复制代码

-O1
  1. **                                                              **
  2. ** SciMark2 Numeric Benchmark, see [url]http://math.nist.gov/scimark[/url] **
  3. ** for details. (Results can be submitted to [email]pozo@nist.gov[/email])     **
  4. **                                                              **
  5. Using       2.00 seconds min time per kenel.
  6. Composite Score:          196.36
  7. FFT             Mflops:   157.99    (N=1024)
  8. SOR             Mflops:   379.32    (100 x 100)
  9. MonteCarlo:     Mflops:    64.22
  10. Sparse matmult  Mflops:   167.61    (N=1000, nz=5000)
  11. LU              Mflops:   212.67    (M=100, N=100)
复制代码

-O2
  1. **                                                              **
  2. ** SciMark2 Numeric Benchmark, see [url]http://math.nist.gov/scimark[/url] **
  3. ** for details. (Results can be submitted to [email]pozo@nist.gov[/email])     **
  4. **                                                              **
  5. Using       2.00 seconds min time per kenel.
  6. Composite Score:          195.98
  7. FFT             Mflops:   156.86    (N=1024)
  8. SOR             Mflops:   379.32    (100 x 100)
  9. MonteCarlo:     Mflops:    63.61
  10. Sparse matmult  Mflops:   166.76    (N=1000, nz=5000)
  11. LU              Mflops:   213.33    (M=100, N=100)
复制代码

-O3
  1. **                                                              **
  2. ** SciMark2 Numeric Benchmark, see [url]http://math.nist.gov/scimark[/url] **
  3. ** for details. (Results can be submitted to [email]pozo@nist.gov[/email])     **
  4. **                                                              **
  5. Using       2.00 seconds min time per kenel.
  6. Composite Score:          196.30
  7. FFT             Mflops:   156.86    (N=1024)
  8. SOR             Mflops:   380.82    (100 x 100)
  9. MonteCarlo:     Mflops:    64.22
  10. Sparse matmult  Mflops:   167.61    (N=1000, nz=5000)
  11. LU              Mflops:   212.01    (M=100, N=100)
复制代码

没有太看懂数据是什么意思,但是貌似是没有太大的变化。 :yun:

参考文献:

1. http://www.gentoo.org/doc/en/gcc-optimization.xml

gentoo用户都知道,不用介绍了。

2. http://www.kroah.com/lkn/

这本书专门讲如何编译内核的,是免费的,可以直接下载打印,portage树里面也有这本书,直接安装和去下载一样,官网上提供的压缩包里面少Copyright那页,想打印的可以自己单独下载。

3. 编译内核时的帮助文档,编译内核时看不懂了就看帮助,不知道有哪些make的target就make help。

4. http://lamp.linux.gov.cn/Linux/kernel_options.html

金步国写的内核文档。

===

测完了,我还是老实点用-Os吧。

同样的硬件条件下,

我用debian stable 5.0也跑过这个程序,大概需要12秒左右。

===
发表于 2010-1-15 01:07:44 | 显示全部楼层
对测试程序是什么样的感兴趣……
回复 支持 反对

使用道具 举报

发表于 2010-1-15 09:59:56 | 显示全部楼层
不错,适合我等新人看看~~
回复 支持 反对

使用道具 举报

发表于 2010-1-15 10:33:51 | 显示全部楼层
我的大概也是2.7m的大小....我试试看Os


http://groups.google.com/group/gnu_octave_zh_CN?hl=zh-CN

毕业设计要用都matlab

lz,这个group上不了...................
被强了...
回复 支持 反对

使用道具 举报

发表于 2010-1-15 11:11:01 | 显示全部楼层
google groups 可以使用国外的服务器,比如我喜欢用 http://groups.google.com.hk
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-15 11:25:09 | 显示全部楼层
google最近很崩溃啊。 :yun:
回复 支持 反对

使用道具 举报

发表于 2010-1-15 18:46:47 | 显示全部楼层
Post by fender010
性能对比:

[QUOTE]-Os 10.482s
-O1 10.809s
-O2 11.078s
-O3 10.838s  
[/QUOTE]What does these figures mean?

May you also try other benchmarking programs such as SCIMARK2 or the Phoronix test suite http://www.phoronix-test-suite.com/ and compare the results?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-15 18:55:22 | 显示全部楼层
内核编译参数 | 测试程序10次的平均运行时间(越小越好)
-Os      |  10.482s
-O1      |  10.809s
-O2      |  11.078s
-O3      |  10.838s
回复 支持 反对

使用道具 举报

发表于 2010-1-15 18:56:36 | 显示全部楼层
"测试程序"? What is it?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-15 20:59:04 | 显示全部楼层
我自己写的一个计算程序,没有找什么专业的测试程序,哈哈。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表