为什么在HDD / SSD基准测试中4k读取比写入慢?


12

有几种基准测试工具可用来测试PC驱动器的速度。

这是SATA SSD的基准示例:

  • 顺序读取:718.498 MB / s
  • 顺序写入:777.414 MB / s
  • 随机读取512KB:160.541 MB / s
  • 随机写入512KB:838.930 MB / s
  • 随机读取 4KB(QD = 1):26.985 MB / s [6588.1 IOPS]
  • 随机写入 4KB(QD = 1):135.603 MB / s [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 SSD:

  • 顺序读取(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 / s [13814.7 IOPS]
  • 随机写入4KiB(Q = 1,T = 1): 170.449 MB / s [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 / s [133.4 IOPS]
  • 随机写入4KB(QD = 1):0.757 MB / s [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芯片结构的局限性,但是像往常一样,硬盘驱动器表现出相同的行为,这似乎是另一个原因吗?

Answers:


9

TL; DR:这是因为SSD对您说谎,并且说写操作要先完成。读同样的东西是不可能的。

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

让我们从QD1案例开始。SSD接收到数据并将其保存到驱动器本地的缓存后,但实际上尚未将其写入NAND之前,将向OS报告写入已完成。这有很大的不同,因为将数据实际写入NAND的速度相当慢。对于读取,它实际上必须先从NAND读取数据,然后才能将其发送回(除非它已较早读取并且仍将其保存在缓存中,但这对于随机读取来说是非常不可能的)。

不利的一面是,在突然断电的情况下,写入SSD的数据可能会丢失数据,但尚未写入NAND。一些企业级固态硬盘包括一个超级电容器,该超级电容器可以存储足够的功率,以防突然断电,从而将高速缓存中的数据写入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在写缓存方面如此积极。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.