** 关于磁盘 ** ** I/O ** ** 测试工具 ** ** Bonnie++ ** ** 的专题 ** ** **
作者简介:
张乐奕,通常使用的网名为 kamus ,也曾用过 seraphim ,现在任职于北京某大型软件公司, Oracle 数据库 DBA ,主要负责证券行业的核心交易系统数据库管理及维护工作。
热切关注 Oracle 技术和相关操作系统技术,出没于各大数据库技术论坛,目前是中国最大的 Oracle 技术论坛 www.itpub.net 的数据库管理版版主。
阅读更多技术文章和随笔可以登录我的个人 blog , http://blog.cdsn.net/kamus
** 目录 ** ** **
** 前言 .... 1 **
** 安装 .... 2 **
** 使用 . .. 4 **
** 评测 . .. 7 **
** 相关链接 .... 8 **
前言
最早是 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++ -1.03a .tgz
生成 bonnie++- 1.03a .tar 文件,然后解包
tar xvf bonnie++ -1.03a .tar
生成 bonnie++- 1.03a 文件夹
cd bonnie++ -1.03a
make
报错。
/usr/ucb/cc: language optional software package not installed
原来编译器就根本没装。
先介绍一下主机情况,一台 SunFire v480 ,两块 73G 内置硬盘, 4 个 UltraSPARC-III+ 的 CPU , 8G 内存,安装的是 Solaris8 ,由于需要模拟真实环境,所以安装的是比较老的 02.2 版本,而且没有打任何 patch 。
在 Sun 给的安装光盘中居然没有找到 Companion CD ,编译器应该是在这张盘上,没办法只好上网自己找,还好,很快就找到一个很棒的站点 blastwave ,包括了 Solaris8 , 9 的 sparc 和 x86 版本的所有需要的 package 。
根据 gcc 包下载页面中的说明,发现需要下载下面四个 package 。
common- 1.3.3 -SunOS5.8-sparc-CSW.pkg.gz
gcc3rt- 3.3.3 ,REV=2004.04.23-SunOS5.8-sparc-CSW.pkg.gz
libiconv-1.8,REV=2003.01.12-SunOS5.8-sparc-CSW.pkg.gz
gcc3- 3.3.3 ,REV=2004.03.22-SunOS5.8-sparc-CSW.pkg.gz
前面三个包是最后 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- 1.3.3 -SunOS5.8-sparc-CSW.pkg.gz
然后依次安装其它的包,一切正常。
这个包将 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 找不到的问题,还需要按照上面的方法解决。
<H1 style="MARGIN: 17pt 0cm 16.5pt; LINE-HEIGHT: 150