Linux 上的 NVME SSD 性能缓慢

Linux 上的 NVME SSD 性能缓慢

为什么我的顺序读取速度如此(相对)慢?

虽然 Win10 上的 CrystalDiskMark 报告约为 5GB/s(读取和写入),但我在 Linux 上的性能还差得远。 (在 Windows 上从/到同一驱动器复制和粘贴数百 GB 的平均速度约为 2.5GB/s,因此我认为 CDM 与此处的实际值相差不远。)

简单的 dd if=/dev/nvme0n1 of=/dev/null bs=1M count=10k 报告仅为 1.5GB/s。

在另一个 NVME(均为 Corsair Force MP600 1TB)上,dd 报告 1.4 GB/s。

我希望这样的顺序访问是从任何存储设备读取的最佳情况,所以我真的不知道这里发生了什么。

(我在 StackExchange 上看到了一些类似的问题,但它们都朝着与这个“简单问题”不同的方向发展。)

注意:如果我没有记错的话,CrystalDiskMark 使用“真实文件” - 因此它甚至有额外的文件系统开销,而我的 dd 调用应该是可能得到的最好的 - 或者不是?

系统信息:

  • 两个 NVME 均通过 4 个 PCIe 4.0 通道连接
  • 两个 NVME 的温度 < 60°C
  • 以 root 身份挂载的速度越快,卸载的速度就越慢
  • Zen2 Threadripper(所以 PCIe 4.0 通道绰绰有余......)
  • 内核5.6.4
  • BIOS更新
  • NVME固件更新

任何正确方向的想法或指示将不胜感激!

答案1

罪魁祸首是顺序访问。 NVME 仅在许多同时请求时显示其性能。因此,“cp”只会导致一次[顺序]读取,dd 和 hdparm 也是如此。如果您使用“并行”等技巧为每个文件创建一个 cp 进程,则总吞吐量会变得更高。即使对于大文件,Windows 的资源管理器似乎也能做到这一点(并行复制多个段 - 至少我猜是这样)。

答案2

请务必认真对待hdparm,请阅读手册页,其中一个有助于 Linux 提高读取性能的命令是:

sudo hdparm -tT --direct /dev/nvmexxx

衡量性能的问题dd显然是 Linux 如何在内存中进行分页。我自己仍在尝试完全理解它。我怀疑 Windows 也有同样的功能,只是隐藏得更好,因为没有dd命令。据我了解,hdparm围绕操作系统来测量设备性能就像 CrystalDiskMark 所做的那样。

它在手册页--direct选项中进行了解释。

相关内容