DD 从 /dev/zero 到 /dev/null ......实际发生了什么

agz*_*agz 16 linux

命令中会发生什么

sudo dd if=/dev/zero of=/dev/null bs=500M count=1. 
Run Code Online (Sandbox Code Playgroud)

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

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

bwD*_*aco 17

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

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

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


mvp*_*mvp 9

我会为你翻译这个命令:

dd if=/dev/zero of=/dev/null bs=500M count=1
Run Code Online (Sandbox Code Playgroud)

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

通常,此命令应仅测量内存和总线速度。但是,如果您没有 500MB 的可用 RAM,它可能会失败。因此,从某种意义上说,它也隐含地衡量了您的操作系统分配大内存块的速度。

  • 因为 ramdisk 仍然需要格式化才能有一个文件系统,它必须由内核驱动程序维护。这也意味着写入 ramdisk 将产生将数据从用户空间复制到内核空间的开销 - 并非完全免费。对于 /dev/zero 或 /dev/null,这种开销几乎为零。 (4认同)

MaQ*_*eod 6

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

/dev/zero与读取类似。它不需要头部移动来读取,它只是无限供应空字符,所以它总是比任何本地读取都快。

换句话说,这就像在空白中进行测试,无法准确描述正常的本地读取和写入应该产生的结果。