首页 > 代码库 > 从/dev/zero文件dd数据到/dev/null文件会发生什么

从/dev/zero文件dd数据到/dev/null文件会发生什么

有人发现如下命令测试得到的速度是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(数据块数量)很多,还可以测试内存分配大数据块或者批量分配小数据块的性能。

 

背景知识:

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

Bin(二进制)

Oct(八进制)

Dec(十进制)

Hex(十六进制)

缩写/字符

解释

0000 0000

0

0

00

NUL(null)

空字符


从/dev/zero文件dd数据到/dev/null文件会发生什么