为什么在传输大数据时 nvme ssd 传输速度会降低?

use*_*585 3 ssd file-transfer nvme

我的笔记本电脑有 PCIe NVMe 512GB M.2 SSD。当我传输低于 7 GB 的数据时,它的传输速度从大约 400 MB/s 到 500 MB/s。但是当我传输像 35GB 这样的大数据时,它的速度会降低到 50MB/s,有时它会降低到 25MB/s。所以我只想知道为什么会这样。

bwD*_*aco 7

TL; 博士

大多数现代 SSD 使用相对较慢的 TLC NAND。为了弥补这一点,使用了更快的 SLC NAND 的小缓冲区,这在大多数使用条件下隐藏了这种较慢的性能。在短时间内将大量数据写入驱动器时,此缓冲区可能会耗尽,从而导致在大量传输期间性能降低。


技术细节

NAND闪存是当今几乎所有 SSD 中使用的内存类型,有多种不同的种类。最值得注意的是,NAND 可以配置为每个存储单元存储 1 到 4 位数据:

  • 每个单元一位:SLC
  • 每单元两位:MLC
  • 每单元三位:TLC
  • 每单元四位:QLC

每个单元的位数越多,单个 NAND 闪存芯片中可以存储的数据就越多,制造具有给定存储容量的驱动器的成本就越低。但是,每个单元中存储的位越多,性能和写入耐久性就越低。(这里的性能差异很重要;除了一些例外,通常涉及非常小的驱动器,大多数消费者不需要担心写入耐久性,因为他们不会在足够接近的地方写入,甚至在合理大小的 QLC NAND 上也不会磨损驱动器在其预期使用寿命内。)实际上,在需要极高写入耐久性的专业工业应用的驱动器之外很难找到 SLC,而 MLC 驱动器(例如三星 SSD 970 PRO)并不常见且非常昂贵。

因此,大多数驱动器使用 TLC NAND,少数开始使用 QLC NAND。对于这两种类型的 NAND,写入性能都很慢,对于消费类 PC 来说通常是不可接受的。幸运的是,NAND 存储单元可以配置为存储更少的位,例如,TL​​C NAND 可以被制作为每个单元存储一位,就好像它是 SLC NAND 而不是三位。在几乎所有使用 TLC 或 QLC NAND 的驱动器上,都会在内部预留少量空间(通常为几 GB)以在这种更快的 SLC 模式下运行。这会创建一个快速缓冲区缓存,数据总是首先写入。1(MLC NAND 通常足够快,不需要 SLC 缓冲区,但我离题了。)

当驱动器空闲时,此 SLC 缓冲区中的数据会自动移动到底层 TLC 或 QLC NAND。由于大多数消费者工作负载只能在短时间内访问驱动器,因此驱动器将有足够的空闲时间来刷新 SLC 缓冲区,因此很少会完全填满它。因此,您通常不会注意到 TLC 或 QLC NAND 的性能较慢。但是,当在短时间内写入大量数据时,例如安装大型游戏或执行大型文件传输时,此缓冲区可能会耗尽。这就是您遇到性能下降的原因。


1驱动器原始容量的固定部分专用于 SLC 缓冲区;较大的驱动器通常具有较大的缓冲区。许多较新的驱动器可以通过利用驱动器中的可用空间来自动扩展此缓冲区:可以将未使用的存储单元配置为在 SLC 模式下运行,从而可以更长时间地保持更高的性能。当实际需要该空间来存储数据时,这些单元将转换回 TLC 或 QLC 模式。此功能取决于操作系统发送驱动器TRIM 命令,这些命令指定哪些块未使用,并且设计为对用户透明。三星称其为智能 TurboWrite,通常将其称为动态 SLC 缓冲区。