关于磁盘I/O测试工具Bonnie++的专题
作者简介:
张乐奕,通常使用的网名为kamus,也曾用过seraphim,现在任职于北京某大型软件公司,Oracle数据库DBA,主要负责证券行业的核心交易系统数据库管理及维护工作。
热切关注Oracle技术和相关操作系统技术,出没于各大数据库技术论坛,目前是中国最大的Oracle技术论坛www.itpub.net的数据库管理版版主。
阅读更多技术文章和随笔可以登录我的个人blog,http://blog.cdsn.net/kamus
目录
前言
最早是eygle在itpub上推荐这个工具,起因是我对于Sun的软RAID性能提出的置疑,后来eygle陆续用这个工具作了一些盘阵IO的测试,包括EMC和T3的一些比较。
这些测试结果都发表在eygle的个人站点上,见本文最后相关链接部分。
但是我却一直没有自己用Bonnie++测试过IO性能,最近一个客户要修改自己盘阵的RAID配置,本来就是使用D2的阵列,只能支持软RAID的一个性能比较差的古老东东了,在我们的测试过程中忽然又发现12块盘的盘阵配置的是RAID10,但是同时只有2块盘在作读写,也就是stripe设置只是2,这个问题在一年多以前刚上系统的时候就是这样,居然一直没有发现用了这么长时间。
客户最终决定重新设置一下RAID的配置,首先将redo和datafile分开,redo所在的盘用4块作RAID10,剩下8块再作RAID10,供数据文件使用,并且重新设置stripe,redo所在的lun设置为2,datafile所在的lun设置为4。
从理论上看,这样的修改应该会大幅度提到整个数据库的I/O效率,但是客户要求能够有一个实际的修改效果报告,也就是需要作修改前和修改后的对比。
这样,于是决定使用bonnie++来作磁盘级的修改效果报告。至于数据库级的修改效果自然有压力测试程序可以完成,此处不表。
既然决定使用,那么自然要琢磨一下该怎么用了。刚刚bonnie++已经开始运行了,于是闲下来,写了这篇文章。
安装
其实今天大部分的时间是耗在怎么让bonnie++运行起来上面了。
从bonnie++的主页上下载了最新的source,bonnie++1.03a.tgz。
gunzip bonnie++
生成bonnie++-
tar xvf bonnie++
生成bonnie++-
cd bonnie++
make
报错。
/usr/ucb/cc: language optional software package not installed
原来编译器就根本没装。
先介绍一下主机情况,一台SunFire v480,两块
在Sun给的安装光盘中居然没有找到Companion CD,编译器应该是在这张盘上,没办法只好上网自己找,还好,很快就找到一个很棒的站点blastwave,包括了Solaris8,9的sparc和x86版本的所有需要的package。
根据gcc包下载页面中的说明,发现需要下载下面四个package。
common-
gcc3rt-
libiconv-1.8,REV=2003.01.12-SunOS5.8-sparc-CSW.pkg.gz
gcc3-
前面三个包是最后gcc3包的前提条件,必须安装。全部下载完毕,开始安装第一个包,也就是common那个包,报错。
提示操作系统的110934补丁版本过低,需要升级。
OK,再上网找,直接用google查,关键字是“110934 soalris”,通常前面几个link就会指向SunSolve站点的下载页面,patch通常不大,很快就下载完了。
开始打补丁,patchadd 110934-21。
系统运行半天,报错。
说要安装这个补丁就需要先安装110380-04的补丁。我倒。
再上网找,下载完110380-04,先patchadd 110380-04,一切正常。
再重新patchadd 110934-21,一切正常。
打完补丁以后,重新安装common包,OK,一切正常。
pkgadd -d common-
然后依次安装其它的包,一切正常。
这个包将gcc安装到/opt/csw/gcc3目录下。
说明文件指出安装完gcc将创建/opt/csw/bin下的gcc执行程序,所以要求将这个路径加入用户的PATH变量中,但是实际上安装完gcc3.3的版本以后,并没有在上面的路径中生成任何文件。
后来我再安装gcc2.95版本的时候发现这个版本的安装才是将gcc生成到/opt/csw/bin中。
所以如果我们在Solaris8中即安装了gcc2.95又安装了gcc3.3,那么要注意这两个版本的gcc文件在不同的路径下,其实这也是应该的,否则新版本会覆盖旧版本,往往是很多人不愿意的。
回到上面,安装完gcc3以后,再次运行make,仍然报错。
/usr/ucb/cc: language optional software package not installed
检查PATH环境变量,已经将/opt/csw/gcc3/bin目录加入了。
想了一下,感觉应该是系统还在使用原来的/usr/ucb/cc。于是将cc链接到新安装的gcc上,这样无论什么时候调用cc其实都是直接使用gcc了。
whereis cc
cd /usr/ucb
mv cc cc.org
ln -s /opt/csw/gcc3/bin/gcc /usr/ucb/cc
备注:如果要安装gcc2的包,那么需要下载下面两个package。
gcc2rt-2.95.3,REV=2003.03.01-SunOS5.8-sparc-CSW.pkg.gz
gcc2-2.95.3-SunOS5.8-sparc-CSW.pkg.gz
安装完毕以后,同样是将cc链接到这个版本的gcc上。
whereis cc
cd /usr/ucb
mv cc cc.org
ln -s /opt/csw/bin/gcc /usr/ucb/cc
修改完毕以后编译成功。
运行bonnie++,报错。
libstdc++.so.5: cannot open shared object file: No such file or directory.
继续查资料,发现bonnie++寻找的lib路径是环境变量LD_LIBRARY_PATH指定的路径,但是这个路径下并没有libstdc++.so.5文件,于是手工将libstdc++.so.5文件从gcc3的安装路径中ln到/usr/lib下面。
# ln -s /opt/csw/gcc3/lib/libstdc++.so.5 /usr/lib/libstdc++.so.5
再次运行,仍然报错。
libgcc_s.so.1: cannot open shared object file: No such file or directory.
这次就轻车熟路了,直接再作一次link。
# ln -s /opt/csw/gcc3/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1
终于,bonnie++可以正常运行了。
我们可以不需要自己编译,在eygle的站点上有Solaris8下载编译好的bonnie++。直接可以使用,当然如果运行报libstdc++.so.5找