写速度:

time dd if=/dev/zero of=test.dbf bs=8k count=300000

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

输出的结果类似(因为一般更长测试时间更准确,所以可以设置count大一些):

300000+0 records in

300000+0 records out

real    0m36.669s

user    0m0.185s

sys    0m9.340s

所以写速度为:8*300000/1024/36.669=63.916M/s

读速度:

time dd if=/dev/sda1 of=/dev/null bs=8k

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

输出的结果类似:

448494+0 records in

448494+0 records out

real    0m51.070s

user    0m0.054s

sys    0m10.028s

所以sda1上的读取速度为:8*448494/1024/51.070=68.61M/s

补充:Windows下安装Cygwin也可以使用time和dd命令,而且输出结果中直接包含IO的时间和速度,有兴趣的朋友可以试一下,不过我测试下来的速度读写都只有40多M每秒,不知道是否是平台的原因,可能Cygwin的机制和Linux下还是有所不同吧。




《测试磁盘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  

(一) Direct IO
在有些系统上,没有mtd节点或者不能直接操作存储设别,如果想测试文件读写性能,如何消除文件系统的影响呢?

   dd命令有一组参数oflag和iflag, 控制源文件和目标文件的读写方式为direct IO,即读或写文件时越过操作系统的读写buffer。如果指定oflag=direct,nonblock,写文件时忽略cache的影响;而如果指定iflag=direct,nonblock,读文件时忽略cache的影响

   下面就是一组实测数据,从中可以看出cache对最终性能的影响。

   


    
.

(二) 拷贝屏幕

利用dd可以实现截屏,假设屏幕对应的设备节点/dev/fb0,屏幕大小是600×800,屏幕像素的格式是rgb565(每个像素对应两个字节),则命令如下:

    反之,也可以利用dd,直接写屏幕,例如下面的命令将随机渲染屏幕:
          

(三) 串口读写
dd还可以写串口,假设串口节点为/dev/ttyS0, 下面的命令将文件写入串口中: