有人发现如下命令测试得到的速度是905M/s;
dd if=/dev/zero of=/dev/null bs=500M count=1
而作为对比,dd到ramdisk的速度是388M/s;到本地磁盘的速度是63M/s
为了解释这个现象,我们首先解释一下这两个特殊的设备文件:
/dev/zero 用于读操作,内核通过这个设备文件向读取它的进程提供无穷无尽的二进制’00000000’ 字节流。在ASCII里,它意味着空字符(Null)。
/dev/null 用于写操作,任何写到这个设备文件的数据都会被内核直接丢弃,并且没有任何反馈给写进程
了解了这两个特殊设备文件,我们就可以知道这个命令的作用是:从/dev/zero读出500M的空字符,然后写入到/dev/null(丢弃)。这个操作完全没有磁盘操作,也没有写入ramdisk所必需产生的ramdisk文件系统操作,所以速度当然快了很多。
事实上,这个命令的执行速度与CPU及总线速度相关,如果bs(blocksize)很大或者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) | 空字符 |
转载于:https://blog.51cto.com/leesbing/1905379