为什么 dd 在 NVMe SSD 上这么慢?

the*_*ian 3 performance io dd files

我最近看了这个视频,其中作者解释说,在使用命令时,RAM 磁盘比 HDD/SSD 快得多dd。我明白为什么会这样。然而,我不明白的是,为什么当我在dd if=/dev/zero of=test.iso bs=1M count=8000具有 16GB RAM、12 核 Ryzen 3600X CPU 和额定 NVMe SSD 的系统上执行他的示例命令时,写入速度为 220MB/s写入速度可达 5GB/s。

我知道 RAM 总是会更快,但这看起来太慢了,肯定还有其他东西在起作用。这是他使用命令的方式吗dd?我不知道其内部原理,dd但这是系统限制性能的情况,还是命令被误用了?

注意:连续第二次运行完全相同的命令后,第二次写入速度更快,为 1.4GB/s,但这并不能消除我的困惑。

emk*_*203 7

SSD 等 NAND 闪存介质具有最小块擦除大小,这意味着如果您dd在较小的块大小上存储数据,SSD 控制器必须多次擦除块才能写入块内的位置。如果最小块擦除大小为 4M,则 1M 意味着该块必须重写 4 次以上。SSD 需要擦除同一个 4M 块 4 次。

事实上,第二次dd运行相同的命令时它会变得更快,这可以通过内核、驱动程序和控制器的缓存和内部优化来解释,类似于重复命令时看到的情况find

我参考@greg-kennedy 的优秀答案以获取更多信息和用于查找最小擦除块大小的脚本,该脚本应用作dds 块大小值以获得最佳性能。

有时,您也可以在设备规格中或通过阅读 找到它/sys/class/mtd/mtdx/erasesize,具体取决于各个设备。

  • 我混淆了 dd 块大小和计数。已更正。 (2认同)
  • 我的经验是,默认块大小 512 字节会使“dd”本身变慢。但我发现[对于典型的 USB 闪存介质,块大小为 4096 字节 (4K) 或更大,速度没有显着差异](https://askubuntu.com/questions/931581/flashing-ubuntu-iso-to-usb-stick-with -dd-推荐块大小/931588#931588)。为了解决这个问题,我还测试了块大小 1 M 和 4 M。写入速度没有显着差异(包括刷新缓冲区时)。 (2认同)