仅在启动 Windows 后 2TB NVMe 在 Linux 中速度缓慢

仅在启动 Windows 后 2TB NVMe 在 Linux 中速度缓慢

我的 SSD 是 2TB PCIe 3.0 x4 M.2 NVMe(Mega Fastro MS200,某个韩国品牌,在德国售价不到 100 美元)。根据 Windows smi_nvme_flash_id.exe 实用程序,它是一个带有 Intel 96L TLC NAND 和 2G DRAM 缓存的 SM2262EN 控制器。固件版本 42AAT7GD。它位于直接连接到 CPU 的内部插槽上。

为了进行性能测试,我在其中填充了数百 GB 的 /dev/random 数据。奇怪之处在于随机数据的读取速度。

当我打开PC并直接启动到ArchLinux(6.2.8内核)时,读取速度非常快:

  # echo 3 > /proc/sys/vm/drop_caches
  # cat /dev/nvme0n1p1 |
    ( pv -S -s 222G > /dev/null
      hexdump -C -n 32 )
222GiB 0:01:35 [2.34GiB/秒] [======================================== =>]100%
 00000000  b2 ce c5 36 de 56 bd 05  1f 65 82 8e 1c 23 18 07  |...6.V...e...#..|
 00000010  03 0e b1 44 ec 6c 2c b0  64 47 d5 47 a6 59 cc 8b  |...D.l,.dG.G.Y..|
 00000020

我可以使用 md5sum 而不是 > dev/null 并验证它总是读取相同的随机数据,只是 md5sum 比 devnull 慢一点。

所以一切都很好,除了。当我重新启动进入 Windows 10,然后重新启动回到 Linux 时。无需做任何其他事情。完全相同的过程的读取速度突然被限制在略低于 1 GiB/s。

222G的数据超出了我的RAM很多,所以它不可能与缓存相关。温度保持在正常范围内(负载下最高 80°C)。我会尝试添加一个冷却器,但我怀疑这会有所不同。我可以连续多次重复上述命令,即使温度已经很高,它也始终保持快速。如果有任何内容重新启动到 Windows(未存储在该 SSD 上)并返回,应该给它一些时间来冷却。

lspci 输出没有改变,显示设备在 PCIe 3.0 x4 模式下运行。 dmesg 不会改变。 /sys/block/nvme0n1/** 不变。 smartctl -a 不会改变。我不知道去哪里看。

再次重新启动,速度仍然很慢。关闭机器,然后重新打开并启动 Linux,它又恢复到原来快得多的速度。重新启动进入 Linux,保持快速。重新启动 Windows,然后重新启动 Linux,又恢复缓慢。

Windows 是否有可能设置某种限制,即使在重新启动到 Linux 后仍然存在?如果是这样,有什么办法可以在不冷启动的情况下重置它吗?

相关内容