分享

bonnie

 linchq 2010-08-23

(转)Bonnie++的使用方法及结果含义

(2010-01-20 13:18:48)
标签:

杂谈

分类:快乐工作

usage: bonnie++ [-d scratch-dir] [-s size(Mb)[:chunk-size(b)]]

[-n number-to-stat[:max-size[:min-size][:num-directories]]]

[-m machine-name]

[-r ram-size-in-Mb]

[-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]

[-q] [-f] [-b] [-p processes | -y]

首先说明一下命令中常用的参数。

-d 生成测试文件的路径

-s 生成测试文件的大小,以M为单位(如果不使用-r参数,则要求文件大小至少是系统物理内存的2倍)

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

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

测试结果的不准确

-x 测试的次数

-u 测试文件的属主和组,默认是执行bonnie++的当前用户和当前组

-g 测试文件的组,默认是执行bonnie++的当前用组

-b 在每次写文件时调用fsync()函数,对于测试邮件服务器或者数据库服务器这种通常需要同步操作的情况比较适合,而不使用该参数则比较

适合测试copy文件或者编译等操作的效率。

通常我们可以简单地运行如下命令进行磁盘性能测试:

bonnie++ -d /global/oradata –m sun3510

这样将会在指定的目录下(通常我们会指定一个盘阵上卷的挂载点),生成相当于主机物理内存两倍的文件,如果总量大于1G,则生成多个大

小为1G的文件。假设主机内存为4G,那么在测试中就会生成8个1G的文件,到测试结束,这些文件会被自动删除。

如果我们的主机内存是4G,但是我们想缩短测试的时间,比如说只写2G的文件,就应该执行下面的命令:

bonnie++ -d /global/oradata –m sun3510 –s 2048 –r 1024

bonnie++的在测试的时候通常会占用大量的IO和CPU,所以请不要在生产环境的业务高峰期进行测试。

下面看一个测试结果,通过这个结果我们解释一下到底bonnie++在测试过程中都作了什么,而每一个输出的结果又表示了什么。

这个测试结果是在一台SunFire V880 + D2阵列上进行的,主机配置是2个UltraSparc-III+ 900MHz的CPU,4G内存,而D2阵列是满配的12块36G

SCSI磁盘,划分了两个LUN,我们的测试目的地/global/oradata建立在其中的一个LUN上,使用了8块磁盘,用Veritas Volum Manager作了

RAID10,stripe(也就是ncol)设置为4。

bonnie++ -d /global/oradata -s 8192 -m d2new -u oracle

Using uid:1001, gid:101.

Writing with putc()…done

Writing intelligently…done

Rewriting…done

Reading with getc()…done

Reading intelligently…done

start ‘em…done…done…done…

Create files in sequential order…done.

Stat files in sequential order…done.

Delete files in sequential order…done.

Create files in random order…done.

Stat files in random order…done.

Delete files in random order…done.

Version  1.03       ——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

d2new            8G 18275  62 32832  26 25423  55 27444  94 106842  60 549.9   7

——Sequential Create—— ——–Random Create——–

-Create– –Read— -Delete– -Create– –Read— -Delete–

files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

16  1723  15 +++++ +++  5059  40  4821  37 +++++ +++   653   5

依次解读一下,从Writing with putc()开始到Delete files in random order…结束,这是bonnie++作的12项测试,这12项测试依次对应12项

结果,而这12项结果又被分为了5大类,分别是Sequential Output(写测试),Sequential Input(读测试),Random Seeks(读写测试),

Sequential Create(顺序读写文件测试)和Random Create(随意读写文件测试)。

那么测试步骤和测试结果依次对应的顺序就是:

Writing with putc() -> Sequential Output的Per Chr

Writing intelligently -> Sequential Output的Block

Rewriting -> Sequential Output的Rewrite

Reading with getc() -> Sequential Input的Per Chr

Reading intelligently -> Sequential Input的Block

start ‘em -> Random Seeks

Create files in sequential order -> Sequential Create的Create

Stat files in sequential order -> Sequential Create的Read

Delete files in sequential order -> Sequential Create的Delete

Create files in random order -> Random Create的Create

Stat files in random order -> Random Create的Read

Delete files in random order -> Random Create的Delete

每个结果中又包括了2项数值,一个是K字节数或者文件数,另一个是%CP,就是执行这项测试时CPU的平均占用率。

对于输出结果的评价,我们认为在相等CPU的占用率情况下,存取字节数越高表示该存储设备的吞吐量越大,自然性能也就越好。

值得注意的是,在测试RAID的时候,对于多CPU的系统,bonnie++并没有发挥CPU的最大潜力,也就是说bonnie++发出的I/O请求通常不够达到

CPU和磁盘的最大压力,这时候显示的吞吐量就不是这个存储设备能够达到的最大值。我们可以在测试的同时通过iostat,mpstat,sar等命令监

控系统状况,如果没有明显的I/O等待,通常表示测试软件的压力不够。在bonnie++的主页上也表示对于多CPU多进程的支持将放到2.0版本中去

实现。

明白了测试步骤和测试结果之后,我们再来进一步看看每个测试结果都是什么含义。

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个进程作8000次的测试。用read(2)函数读取文件的block,同时有10%的操作是用write(2)函数将block修改以后写回文件中。在这个测试

中,如果内存容量大于创建的文件大小,那么将会出现比较高的数值,而这个数值可能并不能准确反映磁盘本身的I/O效率。

Sequential Create和Radom Create

这两大类测试均是用创建,读取,删除大量的小文件来测试磁盘效率。文件名用7位数字和任意个数(0-12)的任意英文字母来组成。在

Sequential部分,字母在数字之后,而Random部分则是字母在数字之前。

创建文件的最小值和最大值等参数可以在bonnie++命令行中用-n参数来控制。

评测.

我们通过bonnie++来测试各种磁盘配置,或者测试各种RAID设置下的磁盘效率,可以有助于我们对于各个产品或者各个方案的磁盘吞吐效率有

个大体认识。

在测试结果的最后一行是用逗号隔开的一列数字,第一个位置是我们在运行bonnie++时用-m参数指定的机器名,第二个位置是测试时生成的文

件大小,后面依次是各类测试的结果。我们将多个测试的最后一行粘贴到Excel中,然后用图表功能生成柱状图,就可以对多项测试有一个极为

直观的评测比较。

下面列出了几种评测的结果,以后也会陆续添加更多的评测,同时欢迎大家将自己的评测结果mail给我,我会加入到这篇文章中。我的邮件地

址是kamus@itpub.net。

SunFire v480 4*(UltraSparc-III+ 1050MHz) 8GRAM 本地光纤硬盘

>bonnie++ -d . -s 16384 -m report -u oracle:dba

Version  1.03       ——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

report          16G 18703  52 28812  17 10800  12 33700  98 68172  32 260.1   2

——Sequential Create—— ——–Random Create——–

-Create– –Read— -Delete– -Create– –Read— -Delete–

files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

16    99   0 +++++ +++   166   1   101   0 +++++ +++   205   1

report,16G,18703,52,28812,17,10800,12,33700,98,68172,32,260.1,2,16,99,0,+++++,+++,166,1,101,0,+++++,+++,205,1

SunFire v880 2*(UltraSparc-III+ 900MHz) 4GRAM  D2阵列(36G*12,RAID10,2 stripe)

>bonnie++ -d /global/oradata -s 8192 -m d2org -u oracle

Version  1.03       ——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

d2org            8G 15681  55 26302  23 13877  31 26420  91 88215  49 462.6   5

——Sequential Create—— ——–Random Create——–

-Create– –Read— -Delete– -Create– –Read— -Delete–

files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

16  1245  10 +++++ +++  3541  27  2837  21 +++++ +++   385   3

d2org,8G,15681,55,26302,23,13877,31,26420,91,88215,49,462.6,5,16,1245,10,+++++,+++,3541,27,2837,21,+++++,+++,385,3

SunFire v880 2*(UltraSparc-III+ 900MHz) 4GRAM  D2阵列(36G*8,RAID10,4 stripe)

>bonnie++ -d /global/oradata -s 8192 -m d2new -u oracle

Version  1.03       ——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

d2new            8G 18275  62 32832  26 25423  55 27444  94 106842  60 549.9   7

——Sequential Create—— ——–Random Create——–

-Create– –Read— -Delete– -Create– –Read— -Delete–

files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP

16  1723  15 +++++ +++  5059  40  4821  37 +++++ +++   653   5

d2new,8G,18275,62,32832,26,25423,55,27444,94,106842,60,549.9,7,16,1723,15,+++++,+++,5059,40,4821,37,+++++,+++,

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多