测试工具Bonnie++的使用

Bonnie++是一个用来测试UNIX文件系统性能的测试工具,主要目的是为了找出系统的性能瓶颈,其名字来源于作者喜爱的歌手Bonnie Raitt。

Bonnie++在类似的测试工具和软件中不是最大的和最复杂的,但是在易用性和输出结果显示方面很不错。

为什么需要bonnie++?

我们有以下假设:

    内存是有限的,因此cache经常会达到上限;因此

    许多I/O操作最终需要真正执行I/O;因此

    有必要测试真实I/O的速度,而且

    在UNIX文件系统中随机搜索是非常慢的;

Bonnie++做了什么?

Bonnie++在一个已知文件大小的文件上执行一系列的测试操作。如果不指定文件大小,Bonnie++默认使用100MB。这个默认大小对于大型服务器来说可能不够大,因此文件的大小最好比可用RAM的大小大一点,一般会要求大两倍。


Bonnie++的使用说明

Bonnie++将长时间的执行磁盘文件读写操作(中间不断给出进程报告),然后生成一个小而精的报告。

下载Bonnie++的源码;

解压tar -xzf bonnie++-1.03e.tgz

进入解压后的目录

编译Bonnie++:make

至此,Bonnie++就已经安装,并可以使用了。


命令:

#./Bonnie
You must use the "-u" switch when running as root.
usage: bonnie++ [-d scratch-dir] [-s size(MiB)[:chunk-size(b)]]
                [-n number-to-stat[:max-size[:min-size][:num-directories]]]
                [-m machine-name]
                [-r ram-size-in-MiB]
                [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]
                [-q] [-f] [-b] [-D] [-p processes | -y]


Version: 1.03e

方括号中的选项都是可选,其含义如下:

Bonnie 

      程序名字。

-d  起始路径

      目录名字;Bonnie将在该目录下创建测试文件并进行读写,即为需要测试的文件系统挂载的目录。bonnie不会对目录名字进行任何特殊的解释,只是按照原名字使用。

-s size-in-MB

      测试文件的大小,以MB为单位。默认是100MB大小。文件大小一定要是数倍于可用内存的大小,否则操作系统将会把文件的大部分文件cache到内存中,从而导致bonnie执行的真正的I/O次数非常少。建议设置至少为可用内存大小的2倍(另一种说法为4倍)。

-m machine-label

     给出bonnie用来生成报告的标识。如果不使用该选项,bonnie将不在报告中提供特定标识。

-html

     以html的格式输出测试结果
-m 机器名

     实际上我们可以认为是本次测试的方案名,可以随便定义。默认是本机的hostname。

-r 内存大小

  指定内存大小,这样可以通过-s参数创建r*2大小的文件,通常用于缩短测试时间,但是需要注意这样由于内存的cache可能导致测试结果的不准确

-x 测试的次数
-u 测试文件的属主和组,默认是执行bonnie++的当前用户和当前组
-g 测试文件的组,默认是执行bonnie++的当前用组
-b 在每次写文件时调用fsync()函数,对于测试邮件服务器或者数据库服务器这种通常需要同步操作的情况比较适合,而不使用该参数则比较适合测试copy文件或者编译等操作的效率。


在此,我们的文件系统挂载在/mnt目录下,因此我们将工作目录定为/mnt

[root@de18 bonnie++-1.03e]# ./bonnie++ -d /mnt -s 1000 -u root
Using uid:0, gid:0.
File size should be double RAM for good results, RAM is 1000M.

说明我们的文件大小设置小了,RAM的大小为1000M,因此我们设置文件大小为2000M:

#./bonnie++ -d /test -s 2000 -u root

则可以得到测试结果:

Version 1.03e       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
de18          2000M  7849  44 16681  34 15773  37 60869  86 215620  36  9076  98
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1993  24  8381  16  2545  11  2025  30  8922  17  2576  15
de18,2000M,7849,44,16681,34,15773,37,60869,86,215620,36,9075.7,98,16,1993,24,8381,16,2545,11,2025,30,8922,17,2576,15

测试结果分析:

Sequential Output部分表示写文件的相关信息
Sequential Input部分表示读文件的相关信息
Per Chr表示以字符为单位读写文件
Block表示以block为单位读写文件
Rewrite表示修改并重写已经存在的文件的每一个block
K/sec表示每秒读或写文件的速率,以K为单位
%CP表示在某阶段执行操作时平均消耗的CPU

Sequential Output

1. Per Char
就是Per-Character的含义。使用putc()函数进行循环写入,每次写入的字节很小,基本上可以放入任意一种I-Cache中,这种情况下的CPU消耗在处理putc()代码和分配磁盘文件空间上。

2. Block
使用write(2)函数创建文件。这种情况下的CPU消耗只是在分配磁盘文件空间上。

3. Rewrite
使用read(2)函数读取文件,然后修改再用write(2)函数写回。由于文件的空间已经分配好,所以这种方式可以很有效地测试文件系统缓存和数据传输的速度。

Sequential Input

1. Per Char
使用getc()函数循环 读取文件内容

2. Block
使用read(2)函数循环读取文件内容,有效测试磁盘读取的效率。

Random Seek
默认3个seeks进程作8000次的测试。用read(2)函数读取文件的block,同时有10%的操作是用write(2)函数将block修改以后写回文件中。在这个测试中,如果内存容量大于创建的文件大小,那么将会出现比较高的数值,而这个数值可能并不能准确反映磁盘本身的I/O效率。

Sequential Create和Radom Create

这两大类测试均是用创建,读取,删除大量的小文件来测试磁盘效率。文件名用7位数字和任意个数(0-12)的任意英文字母来组成。在Sequential部分,字母在数字之后,而Random部分则是字母在数字之前。
创建文件的最小值和最大值等参数可以在bonnie++命令行中用-n参数来控制。


最后需要注意的是,在测试RAID的时候,对于多CPU的系统,bonnie++并没有发挥CPU的最大潜力,也就是说bonnie++发出的I/O请求通常不够达到CPU和磁盘的最大压力,这时候显示的吞吐量就不是存储设备能够达到的最大值。因此,这些数字智能作为在单CPU系统中操作的有效性指标。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页