有人发现如下命令测试得到的速度是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(数据块数量)很多,还可以测试内存分配大数据块或者批量分配小数据块的性能。
背景知识:
从下面的ASCII字符表可以看出,二进制‘00000000’字符,意味着ASCII空字符
Bin(二进制) | Oct(八进制) | Dec(十进制) | Hex(十六进制) | 缩写/字符 | 解释 |
0000 0000 | 0 | 0 | 00 | NUL(null) | 空字符 |
从/dev/zero文件dd数据到/dev/null文件会发生什么
原文地址:http://leesbing.blog.51cto.com/1344594/1905379