测试磁盘I/O性能的工具有很多,如DD、Bonnie++、fio、iometer、hdparm等。下面简单介绍其中几个工具。
1. DD
DD(命令为dd)是Linux系统上一个非常流行的文件复制工具,在复制文件的同时可以根据其具体选项进行转换和格式化等操作。通过DD工具复制同一个文件(相同数据量)所需要的时间长短即可粗略评估磁盘I/O的性能。一般的Linux系统中都自带这个工具,用man dd命令即可查看DD工具的使用手册。
例子:用DD工具向磁盘上写入文件的测试,测试4种不同的块大小.
dd if=/dev/zero of=dd1.dat conv=fsync oflag=direct bs=1K count=100K
dd if=/dev/zero of=dd1.dat conv=fsync oflag=direct bs=8K count=100K
dd if=/dev/zero of=dd1.dat conv=fsync oflag=direct bs=1M count=10K
dd if=/dev/zero of=dd1.dat conv=fsync oflag=direct bs=8M count=2K
2. fio
fio 是一个 I/O 工具用来对硬件进行压力测试和验证,支持 13 种不同的 I/O 引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等,I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, 等等。
常用参数:
filename=/dev/sdb1 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
bs=16k 单次io的块文件大小为16k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30 本次的测试线程为30.
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息。
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量。
磁盘读写常用测试点:
Read=100% Ramdon=100% rw=randread (100%随机读)
Read=100% Sequence=100% rw=read (100%顺序读)
Write=100% Sequence=100% rw=write (100%顺序写)
Write=100% Ramdon=100% rw=randwrite (100%随机写)
Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30(70%顺序读,30%顺序写)
Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30(70%随机读,30%随机写)
3. Bonnie++
Bonnie++ 是一款文件系统的基准性能自动化测试工具,包括测试文件系统的读写能力、查找能力、创建新文件的能力,它通过一系列的简单测试来生成文件系统的性能参数。其主程序提供两种风格的测试:针对单个文件的数据库风格的访问测试和针对大量小文件的创建和删除来模拟诸如 Squid , INN, 或者 Maildir 格式的 Email 这一类风格的访问测试。 Bonnie++ 对三个方面做基准测试:数据读、写速度,每秒可以完成的文件元数据操作次数。 Bonnie++ 12 项结果分为 5 大类,分别是 Sequential Output (写测试), Sequential Input (读测试), Random Seeks (读写测试), Sequential Create (顺序读写文件测试)和 Random Create (随机读写文件测试)。
常用参数:
-d:在测试时会生成一些文件,并读或更改这些文件。这个参数是设置测试文件放置的路径。
-s:单个测试文件的尺寸。这个参数值必须大于等于2倍测试使用的内存(最好为测试使用内存的两倍)。测试时应该用大文件尺寸。
-m:测试的机器名称
-r:测试需要用多少内存。如果省略这个值,则会用全部的物理内存。
-x:循环几次
-u:指定执行测试的OS用户。当以root执行时,必须显式指定。
4.hdparm
hdparm命令 提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。hdparm也可以粗略地测试磁盘的I/O性能,通过如下的命令即可粗略评估sdb这个磁盘的读性能。
hdparm -tT /dev/sdb