对于I/O的性能测试,基本都是用dd开始的,dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。它是缺省的工具,也是最简单的工具,但是没有并行化,对于SSD不友好。
接着进阶的就是IOmeter,在SSD出现之前,IOmeter基本可以满足大部分工作,除了他的Linux版本的I/O generator在早期的时候对Linux的Direct I/O的支持不好。
之后,就是Fio的出现,在目前所有的性能测试工具中,Fio生成一个IO请求的代价是最小的。
1 dd命令测试方法
1.1参数说明
if=file |
输入文件名,缺省为标准输入 |
of=file |
输出文件名,缺省为标准输出 |
ibs=bytes |
一次读入 bytes 个字节(即一个块大小为 bytes 个字节) |
obs=bytes |
一次写 bytes 个字节(即一个块大小为 bytes 个字节) |
bs=bytes |
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs |
cbs=bytes |
一次转换 bytes 个字节,即转换缓冲区大小 |
skip=blocks |
从输入文件开头跳过 blocks 个块后再开始复制 |
seek=blocks |
从输出文件开头跳过 blocks 个块后再开始复制(通常只有当输出文件是磁盘或磁带时才有效) |
count=blocks |
仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数 |
conv=conversion[,conversion…] |
用指定的参数转换文件 |
iflag=FLAGS |
指定读的方式FLAGS,参见“FLAGS参数说明” |
oflag=FLAGS |
指定写的方式FLAGS,参见“FLAGS参数说明” |
1.2 测试磁盘写能力
dd if=/dev/zero of=/opt/iotest bs=4k count=100000 |
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。命令结尾添加oflag=direct将跳过内存缓存,添加oflag=sync将跳过hdd缓存。
1.3 测试磁盘读能力
dd if=/dev/sdb of=/dev/null bs=4k
因为/dev/sdb是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb上,也相当于测试磁盘的读能力。
1.4 测试同时读写能力
time dd if=/dev/sdb of=/testrw.dbf bs=4k
在这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb是读,对/testrw.dbf是写),假设它们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。
1.5 测试纯写入性能
登录后复制
dd if=/dev/zero of=test bs=8k count=10000 oflag=direct
1.
1.6、测试纯读取性能
dd if=test of=/dev/null bs=8k count=10000 iflag=direct
1.
注意:dd 只能提供一个大概的测试结果,而且是连续 I/O 而不是随机 I/O,理论上文件规模越大,测试结果越准确。 同时,iflag/oflag 提供 direct 模式,direct 模式是把写入请求直接封装成 I/O 指令发到磁盘,非 direct 模式只是把数据写入到系统缓存就认为 I/O 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘。
-----------------------------------
Linux 中用 dd 命令来测试硬盘读写速度
https://blog.51cto.com/moerjinrong/2286323
1.1 主要选项
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m
参数 说明
if=file 输入文件名,缺省为标准输入
of=file 输出文件名,缺省为标准输出
ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节)
obs=bytes 一次写 bytes 个字节(即一个块大小为 bytes 个字节)
bs=bytes 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs
cbs=bytes 一次转换 bytes 个字节,即转换缓冲区大小
skip=blocks 从输入文件开头跳过 blocks 个块后再开始复制
seek=blocks 从输出文件开头跳过 blocks 个块后再开始复制(通常只有当输出文件是磁盘或磁带时才有效)
count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数
conv=conversion[,conversion…] 用指定的参数转换文件
iflag=FLAGS 指定读的方式FLAGS,参见“FLAGS参数说明”
oflag=FLAGS 指定写的方式FLAGS,参见“FLAGS参数说明”
1.2 conv 转换参数:
-----------------------------------
Linux 中用 dd 命令来测试硬盘读写速度
https://blog.51cto.com/moerjinrong/2286323
FIO测试方法
1、安装fio
在fio官网下载fio-2.1.10.tar文件,解压后./configure、make、make install之后就可以使用fio了。
2、fio参数详解
filename=/dev/emcpowerb |
支持的文件系统或者设备,-filename=/dev/sda2或-filename=/dev/sdb |
direct=1 |
测试过程绕过机器自带的buffer,使测试结果更真实 |
rw=randwread |
测试随机读的I/O |
rw=randwrite |
测试随机写的I/O |
rw=randrw |
测试随机混合写和读的I/O |
rw=read |
测试顺序读的I/O |
rw=write |
测试顺序写的I/O |
rw=rw |
测试顺序混合写和读的I/O |
bs=4k |
单次io的块文件大小为4k |
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 |
每个进程生成文件的数量 |