磁盘I/O测试工具Bonnie++的专题


** 关于磁盘 ** ** 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

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus