使用dd来测试硬盘读写速度

dd只能提供一个大概的测试结果,而且是连续IO 而不是随机IO ,理论上文件规模越大,测试结果越准确。

 

读性能测试

# time dd  iflag=direct,nonblock  if=/dev/sda2 of=/dev/null bs=8k count=8388608

    因为/dev/sda2是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。

写测试

# time dd oflag=direct,nonblock if=/dev/zero f=/opt/iotest bs=8k count=8388608 

    因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。 

读写测试

# time dd iflag=direct,nonblock oflag=direct,nonblock if=/dev/sda2 f=/opt/iotest bs=8k count=8388608  

 

  注:bs是一次io读的规模,理论上bs越大,所测得性能越高

      count是读多少个"bs",也可以写成count=16G

     

规避掉文件系统cache,直接读写,不使用buffer cache

iflag=direct,nonblock

oflag=direct,nonblock

iflag=cio

oflag=cio

 

direct 模式就是把写入请求直接封装成io 指令发到磁盘

direct 模式,就把数据写入系统缓存,然后就认为io 成功,并由操作系统决定缓存中的数据什么时候被写入磁盘