从/ dev / zero到/ dev / null的DD ...实际发生的情况


13

命令中会发生什么

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

零实际上在哪里,一般会发生什么?速度为905 MB / s

如果我dd到ramdisk,速度仅为388 MB / s。如果我dd使用硬盘,速度仅为63.2 MB / s


1
/dev/null是测试/定时读取操作的好地方。 /dev/zero是测试/定时写入操作的良好来源。将此源和目标合并到一个操作中没有多大意义。甚至不确定这是否提供任何有意义的间接费用数字。
锯末2013年

@sawdust其他方式,不是吗?
杰米

2
是的,@ sawdust,您的上述评论令人讨厌(对于新手)。of = / dev / sda将覆盖某人的硬盘分区,内容等。of =〜/ bigfile.tmp会是使用的更好示例...
Kevin Traas 2015年

2
我知道我参加聚会已经很晚了,但是万一有人想自己尝试一下:不需要以root用户身份运行此命令,因此不需要sudo。
Roel Schroeven '16

@Jamie Nah,这是正确的方法。
Awn

Answers:


14

/dev/zero读取时提供零字节的无限流。此功能由内核提供,不需要分配内存。所有写入/dev/null均被静默删除。

结果,当您执行时dd,系统会在零字节中生成500兆字节,这些字节会被丢弃。除临时缓冲区外,在此操作之前,期间或之后均不存储任何数据。

/dev/zero到的传输速度/dev/null主要取决于处理器的速度和相关的系统调用。(在您的情况下,缓冲区的大小为500 MB,因此该操作也会测试内存的速度。)


7

我将为您翻译此命令:

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

使用500M大小的块(=块大小)将(虚拟无限供应的dd)输入文件(if)中的数据()复制到(虚拟沉孔)的输出文件()中,然后仅重复一次()。/dev/zero0of/dev/nullbscount1

通常,此命令应仅测量内存和总线速度。但是,如果没有500MB的可用内存,则可能会失败。因此,从某种意义上讲,它还隐含了基准测试OS分配大内存块的速度。


如果它测量内存,那么写入ramdisk的速度会大大降低吗?
2013年

2
因为ramdisk仍必须进行格式化才能具有文件系统,该文件系统必须由内核驱动程序维护。这也意味着写入ramdisk将产生将数据从用户空间复制到内核空间的开销-并非完全免费。使用/ dev / zero或/ dev / null,此开销几乎为零。
mvp

我以前从未见过“重复数据”。我记得在SunOS的旧手册页中读到dd代表“复制并转换”(已抄送)。
丹·普里茨

5

/ dev / null是一个黑洞。测试正常的写入操作并不准确,因为它实际上没有像普通文件那样写入磁盘。而不是将磁头写入磁盘,而是在写入设备后立即丢弃数据,因此它总是比正常的本地写入更快。

/ dev / zero与读取类似。它不需要读取磁头,只是提供了无限数量的空字符,因此它的读取速度总是比任何本地读取都快。

换句话说,这就像在空白区域中进行测试一样,不会给出正常的本地读取和写入应产生的结果的准确图片。


我认为Ram也没有参与...所以这个测试是什么...时钟速度?
2013年

1
  1. /dev/null无处 写入其中的数据将被删除。

  2. 您的ramdisk具有必须使用的文件系统。dd必须创建一个文件系统条目并按照文件系统规则进行写入。另外,您的操作系统同时将您的内存用于其他用途,因此您的写操作可以得到剩余的内容。

  3. 非SSD硬盘驱动器只是缓慢而已,所以这也是正确的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.