有人发现如下命令测试得到的速度是905M/s

dd if=/dev/zero of=/dev/null bs=500M count=1

而作为对比,ddramdisk的速度是388M/s;到本地磁盘的速度是63M/s

为了解释这个现象,我们首先解释一下这两个特殊的设备文件:

  1. /dev/zero 用于读操作,内核通过这个设备文件向读取它的进程提供无穷无尽的二进制’00000000’ 字节流。在ASCII里,它意味着空字符(Null)。

  2. /dev/null 用于写操作,任何写到这个设备文件的数据都会被内核直接丢弃,并且没有任何反馈给写进程

了解了这两个特殊设备文件,我们就可以知道这个命令的作用是:从/dev/zero读出500M的空字符,然后写入到/dev/null(丢弃)。这个操作完全没有磁盘操作,也没有写入ramdisk所必需产生的ramdisk文件系统操作,所以速度当然快了很多。

事实上,这个命令的执行速度与CPU及总线速度相关,如果bsblocksize)很大或者count(数据块数量)很多,还可以测试内存分配大数据块或者批量分配小数据块的性能。

可以用这两个设备文件作为dd数据源和目的地来测试存储性能,但是要注意:这两个特殊设备也是存在性能限制的-特别是/dev/zero,对于高速存储,这个性能限制往往就是瓶颈。

下面是我笔记本上虚机测试结果,可以看到只有130MB/s

[lb@centos-i1~]$  time dd if=/dev/zero of=/dev/nullbs=160M count=1

1+0 records in

1+0 records out

167772160 bytes(168 MB) copied, 1.28577 s, 130 MB/s

 

real    0m1.289s

user    0m0.000s

sys     0m1.278s

 

背景知识:

从下面的ASCII字符表可以看出,二进制‘00000000’字符,意味着ASCII空字符

Bin(二进制)

Oct(八进制)

Dec(十进制)

Hex(十六进制)

缩写/字符

解释

0000 0000

0

0

00

NUL(null)

空字符