为什么 hdd/ssd 基准测试中的 4k 读取速度比写入速度慢?

为什么 hdd/ssd 基准测试中的 4k 读取速度比写入速度慢?

有多种基准测试工具可用于测试电脑驱动器的速度。

以下是 SATA SSD 的基准测试示例:

  • 连续读取:718.498 MB/s
  • 顺序写入:777.414 MB/s
  • 随机读取 512KB : 160.541 MB/s
  • 随机写入 512KB : 838.930 MB/s
  • 随机读取4KB(队列号=1):26.985 MB/秒[6588.1 IOPS]
  • 随机写入4KB(队列号=1):135.603 MB/秒[33106.2 IOPS]
  • 随机读取 4KB(QD=32):177.003 MB/s [ 43213.6 IOPS]
  • 随机写入 4KB(QD=32):178.397 MB/s [ 43554.0 IOPS]

m.2 固态硬盘:

  • 顺序读取 (Q= 32,T= 1) :829.119 MB/s
  • 顺序写入 (Q= 32,T= 1):677.645 MB/s
  • 随机读取 4KiB(Q= 32,T= 1):744.328 MB/s [181720.7 IOPS]
  • 随机写入 4KiB(Q= 32,T= 1):144.876 MB/s [ 35370.1 IOPS]
  • 顺序读取(T= 1):785.600 MB/s
  • 顺序写入(T= 1):789.973 MB/s
  • 随机读取4KiB(Q= 1,T= 1): 56.585 MB/秒[13814.7 IOPS]
  • 随机写入4KiB(Q= 1,T= 1): 170.449 MB/秒[41613.5 IOPS]

硬盘:

  • 连续读取:114.988 MB/s
  • 连续写入:111.043 MB/s
  • 随机读取 512KB : 39.260 MB/s
  • 随机写入 512KB:57.409 MB/s
  • 随机读取4KB(QD=1):0.546 MB/秒[133.4 IOPS]
  • 随机写入4KB(QD=1):0.757 MB/秒[184.9 IOPS]
  • 随机读取 4KB(QD=32):1.582 MB/s [ 386.3 IOPS]
  • 随机写入 4KB(QD=32):0.700 MB/s [ 171.0 IOPS]

在每种情况下,“随机读取 4KB Q1”都比写入慢,而在大多数情况下,“QD32”则相反。

在一些论坛上,人们说这是 SSD 芯片结构的限制,但通常硬盘表现出相同的行为,这似乎是其他原因?!

答案1

总结:这是因为 SSD 欺骗了你,在实际写入之前就说写入已经完成。对于读取,它无法逃脱同样的惩罚。

答案的较长版本是写入缓存。

让我们从 QD1 案例开始。SSD 收到数据并将其保存在驱动器本地的缓存中后,将向操作系统报告写入已完成,但在此之前它尚未真正将其写入 NAND。这会产生很大的不同,因为实际将数据写入 NAND 的速度非常慢。对于读取,它实际上必须先从 NAND 读取数据,然后才能将其发回(除非它之前已经读取过数据并且仍在缓存中,但随机读取时这种情况不太可能发生)。

缺点是,如果突然断电,写入 SSD 但尚未写入 NAND 的数据可能会丢失。一些企业级 SSD 包含一个超级电容器,可在突然断电的情况下存储足够的电量,以完成将缓存中的数据写入 NAND 的操作。

硬盘也会出现同样的情况,因为它们也在进行写入缓存。只是它们在这方面没有那么积极。为什么 SSD 如此积极?要回答这个问题,我们需要考虑 QD32 的情况,这既更复杂,也更有趣。

您说的 QD32 随机读取通常比随机写入快,这是不正确的。这很大程度上取决于您查看的是哪种特定的 SSD。

如果您查看许多 SATA SSD 上的 4k QD1 随机读取,它们似乎都在 20-30 MB/s 范围内执行。这是为什么?这是因为 4k QD1 随机读取主要与延迟有关,而不是吞吐量。延迟来自三个部分:

  1. SATA/AHCI 的接口延迟涉及告诉驱动器做什么以及发送数据。
  2. 控制器本身必须弄清楚如何处理收到的数据和指令。
  3. 实际读取或写入数据到 NAND 芯片所需的时间。

1. 和 3. 在很长时间内都没有发生太大变化,这就是为什么 1k QD1 随机读取也没有发生太大变化的原因。

SSD 最近从 SATA/AHCI 转向 PCIe/NVMe,大大缩短了 1 的延迟,这就是为什么某些 m.2 和 PCIe SSD 最近在这里显示出巨大改进的原因。

SSD 控制器可以极大地帮助降低延迟的一件事就是并行读取或写入多个 NAND 芯片,这样就可以掩盖大部分 3 的延迟。如果您使用 NCQ 执行 QD32 4k 随机读取,则 SSD 可以无序地处理读取请求,并确保它尽可能并行地从尽可能多的 NAND 芯片中读取。

对于 QD32 4k 随机写入,SSD 会执行所谓的写入组合操作。当大量小型写入请求进入时,SSD 控制器会将它们缓存在本地,当写入缓冲区足够大时,控制器会将其拆分为大小合适的块,并将这些块并行写入多个 NAND 芯片,同样有助于掩盖 NAND 延迟。写入组合的另一个优点是,如今大多数 SSD 的页面大小(可以读取或写入的最小量)都大于 4k,而将写入组合到页面大小之前有助于避免大量写入放大。为了做到这一点,SSD 在写入缓存方面非常积极。

相关内容