您当前的位置:首页 > Linux 网站首页Linux

linux下使用dd命令测试硬盘的读写速度

转载请注明出处:黄桂林的博客 huangguilin.com

在服务器使用过程中经常需要知道服务器硬盘的性能,吞吐量,读写状态等,来为某些应用的稳定和使用做判断。比如需要大量写数据的应用则要看磁盘写性能是否满足需求。

而在磁盘测试中最关心的几个指标分别为:iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)。

当每次IO操作的block较小时,如512bytes/4k/8k等,测试的主要是iops。

当每次IO操作的block较大时,如256k/512k/1M等,测试的主要是bw。

一般而言,磁盘读写有两种方式:BufferIO(带缓存)、DirectIO(直接读写),DirectIO可以更好的了解纯磁盘读写的性能。

再介绍一下dd, dd用于复制,从if读取 input file,写到of  outpufile。if=/dev/zero不产生IO,因此可以用来测试纯写速度。同理of=/dev/null不产生IO,可以用来测试纯读速度。bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

1. 简单的dd命令

 dd是Linux自带的磁盘读写工具,可用于测试顺序读写。

  • dd测试DirectIO 

    iops——写测试 dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct 

    iops——读测试 dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct

    bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct 

    bw——读测试 dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct

  • dd测试BufferIO

    BufferIO主要出现在一些大文件读写的场景,由于使用内存做Cache所以读写性能上和DirectIO相比,通常会高很多,尤其是读,所以这个场景下我们仅关心bw即可。

    用dd测试BufferIO的写时,需要增加一个conv=fdatasync,使用该参数,在完成所有读写后会调用一个sync确保数

    据全部刷到磁盘上(期间操作系统也有可能会主动flush),否则就是主要在测内存读写了;

    另外还有一个参数是oflag=dsync,使用该参数也是走的BufferIO,但却是会在每次IO操作后都执行一个sync。

    通常conv=fdatasync更符合大文件读写的场景,所以这里以其作为参数进行测试。

    bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k conv=fdatasync

    bw——读测试 dd if=./a.dat of=/dev/null bs=1M count=8k

2.更专业的fio

  fio是专门用于测试磁盘IO的工具,与dd相比那是要强大非常多,它可以用于测试顺序读写、随机读写、顺序混合读写、随机混合读写,并且可以调整IO并发量,在测试完成后还会生成一份测试报告,相当给力

 

3.iozone

待续

4. hdparm

待续

转载请注明出处:黄桂林的博客
转载请注明出处:黄桂林的博客

关键字linux / dd / fio / iozone / hdparm /

上一篇:linux基础之增加swap交换分区      Tags: linux swap dd mkswap swapon swapoff

下一篇:一问三不知