磁盘性能测试

关于磁盘性能测试,一般来说绕不过两个命令工具:dd和fio

 

dd命令:

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

参数说明:

1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

    bs=bytes:同时设置读入/输出的块大小为bytes个字节。

4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

8. conv=conversion:用指定的参数转换文件。

    ascii:转换ebcdic为ascii

    ebcdic:转换ascii为ebcdic

    ibm:转换ascii为alternate ebcdic

    block:把每一行转换为长度为cbs,不足部分用空格填充

    unblock:使每一行的长度都为cbs,不足部分用空格填充

    lcase:把大写字符转换为小写字符

    ucase:把小写字符转换为大写字符

    swab:交换输入的每对字节

    noerror:出错时不停止

    notrunc:不截短输出文件

    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

 

/dev/null和/dev/zero:

/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。

/dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

 

测试硬盘的读写速度:

dd if=/dev/zero of=/root/test bs=8k count=100000              -- 写

dd if=/root/test of=/dev/null bs=8k count=100000                -- 读

通过以上两个命令输出的命令执行时间,可以计算出硬盘的写、读速度

发现把bs(每次读写的字节数)改大一些,磁盘的读写速度会提高,理论上bs越大,测得的性能越高。

注意:dd 只能提供一个大概的测试结果,而且是连续 I/O 而不是随机 I/O,理论上文件规模越大,测试结果越准确。 同时,iflag/oflag 提供 direct 模式,direct 模式是把写入请求直接封装成 I/O 指令发到磁盘,非 direct 模式只是把数据写入到系统缓存就认为 I/O 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘。

 

fio工具:

安装:yum install libaio-devel fio(其中安装libaio-devel的原因见下的参数说明ioengine)

fio参数说明:

fio -filename=/root/iotest -direct=1 -iodepth=1  -rw=randrw  -ioengine=libaio -bs=16k -size=2G -numjobs=4 -runtime=30 -group_reporting -name=mytest

filename=/root/test 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
iodepth=1 队列深度 rw
=randwrite 测试随机写的I/O rw=randrw 测试随机写和读的I/O
ioengine=libaio io引擎,如果要使用libaio引擎,需要yum install libaio-devel包 bs
=16k 单次io的块文件大小为4k size=1g 本次的测试文件大小为1g,以每次16k的io进行测试。 numjobs=4 本次的测试线程为4. runtime=30 测试时间为30秒,如果不写则一直将1g文件分16k每次写完为止。
group_reporting 关于显示结果的,汇总每个进程的信息

测试举例:

dd if=/dev/zero  of=/root/iotest bs=4k count=262144(创建1G的文件)

fio -filename=/root/iotest -direct=1 -iodepth=1  -rw=randrw  -ioengine=libaio -bs=16k -size=1G -numjobs=4 -runtime=30 -group_reporting -name=mytest

 

read : io=139888KB, bw=4662.2KB/s, iops=291 , runt= 30005msec

简单说明:fio做了136mb的io,速率为4.55mb/s,iops为291,运行时间30005msec

对fio输出结果的详细说明参考:https://blog.csdn.net/feilianbb/article/details/50497845

转载于:https://www.cnblogs.com/xulan0922/p/11507814.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值