用bonnie测试存储
首先下载安装bonnie解压后在当前目录自动生存一个make文件直接make就行了。
tar zxvf bonnie.tar
make
参数说明
-d 生成测试文件的路径
-s 生成测试文件的大小,以m为单位(如果不使用-r参数,则要求文件大小至少是系统物理内存的2倍)
-m 机器名,实际上我们可以认为是本次测试的方案名,可以随便定义。默认是本机的hostname。
-r 内存大小,指定内存大小,这样可以通过-s参数创建r*2大小的文件,通常用于缩短测试时间,但是需要注意这样由于内存的cache可能导致测试结果的不准确
-x 测试的次数
-u 测试文件的属主和组,默认是执行bonnie的当前用户和当前组
-g 测试文件的组,默认是执行bonnie的当前用组
-b 在每次写文件时调用fsync()函数,对于测试邮件服务器或者数据库服务器这种通常需要同步操作的情况比较适合,而不使用该参数则比较适合测试copy文件或者编译等操作的效率。
通常我们可以简单地运行如下命令进行磁盘性能测试:
bonnie -d /data1 –m hostname
可以结合 iostat 观察磁盘情况。
实例+注解
[root@localhost ~]# ./Bonnie -d /data1 -s 2048 -m hostname
File '/data1/Bonnie.19850', size: 2147483648
Writing with putc()...done
Rewriting...done
Writing intelligently...done
Reading with getc()...done
Reading intelligently...done
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
写入速度 读取速度
-------Sequential Output-------- ---Sequential Input-- --Random--
字节循环写入 块写入 读改写 循环读字节 循环读取块 随机8000次的测试
-Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
hostname2048 54687 99.9 666835 92.6 792649 100.0 54640 100.0 2157448 100.0 128592.6 225.0
分空间上 cpu耗在分空间上 测缓存和 测试磁盘读取的效率 内存容量大于创建的文件大小值就会很高不能准确反映磁盘本身的i/o效率
数据传输的速度
sequential output(写测试),sequential input(读测试),random seeks(读写测试),sequential create(顺序读写文件测试)和random create(随意读写文件测试)。
[root@localhost ~]# iostat -dx 5 10 平均每次设备I/O
操作的数据大小 平均每次设备 平均每次 一秒中有多少
Linux 2.6.9-42.ELsmp (localhost.localdomain) 05/11/2008 每秒读 每秒写K (扇区) I/O操作的等 设备I/O操 时间 I/O 队列是非空的
每秒进行merge |读I/O设备次数 | 读扇区数 | K字节数 字节数 I/O队列长度 待时间 作的服务时间
的读操作数目 每秒
Device: rrqm/s wrqm/s | r/s w/s | rsec/s wsec/s | rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.25 71.23 | 0.09 1.02| 4.14 579.62 | 2.07 289.81 527.57 0.27 243.70 9.08 1.00
sdb 0.01 79.69 | 0.00 2.74| 0.04 659.48 | 0.02 329.74 240.20 2.08 756.09 0.38 0.10
-c 只显示CPU行
-d 显示磁盘行
-k 以千字节为单位显示磁盘输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标
rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。
即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),
svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多
也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及
I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明
I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用
得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑
更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是
按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。