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

ut

有几种基准测试工具可用来测试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芯片结构的局限性,但是像往常一样,硬盘驱动器也表现出相同的行为,这似乎是另一个原因吗?

阿尔法先生

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在写缓存方面如此积极。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NVMe ssd:为什么4k的写入速度比读取速度快?

来自分类Dev

为什么第一次从HDD读取文件要慢于随后的文件?

来自分类Dev

SSD和HDD的健康状况如何(为什么有那么多读取错误?)

来自分类Dev

将文件从SSD复制到HDD,SSD显示为100%忙碌-为什么?

来自分类Dev

为什么需要卸下HDD才能将OS干净地安装在SSD上?

来自分类Dev

为什么2.5英寸SSD比2.5英寸HDD消耗更多功率?

来自分类Dev

为什么在oracle函数中进行比较要比没有它时慢,并且如何提高性能?

来自分类Dev

为什么这个Clojure微型基准测试这么慢?

来自分类Dev

为什么操作系统需要将所有RAM复制到HDD才能进行休眠?

来自分类Dev

为什么我的A *实施要比Floodfill慢?

来自分类Dev

为什么我的A *实施要比Floodfill慢?

来自分类Dev

Linux基准SSD与HDD

来自分类Dev

为什么我的PC突然无法再与SSD驱动器一起使用,而与HDD驱动器一起正常工作?

来自分类Dev

为什么使用tf.keras进行推理要比使用TFLite慢75倍?

来自分类Dev

为什么在对基准进行基准测试时NetHogs会报告0 KB /秒?

来自分类Dev

为什么boost :: circular_buffer在我的基准测试中这么慢?

来自分类Dev

为什么要在循环中进行hasOwnProperty()测试

来自分类Dev

为什么我的C程序要比等效的Haskell慢?

来自分类Dev

为什么并行pi估计要比顺序pi估计慢?

来自分类Dev

为什么gdb在请求写入后自动进行读取?

来自分类Dev

为什么<$>慢?

来自分类Dev

为什么psql慢?

来自分类Dev

记录和SSD 4K写入

来自分类Dev

如何对USB集线器进行故障排除/测试/基准测试(集线器充当瓶颈……为什么?)

来自分类Dev

是什么决定了HDD写入哪个盘片/扇区?

来自分类Dev

为什么目录/ lost + found 16K而不是4K字节?

来自分类Dev

为什么第一次进行微基准测试总是最慢?

来自分类Dev

HDD上的随机读取/写入速度非常慢

来自分类Dev

为什么在依赖注入中进行反思?

Related 相关文章

  1. 1

    NVMe ssd:为什么4k的写入速度比读取速度快?

  2. 2

    为什么第一次从HDD读取文件要慢于随后的文件?

  3. 3

    SSD和HDD的健康状况如何(为什么有那么多读取错误?)

  4. 4

    将文件从SSD复制到HDD,SSD显示为100%忙碌-为什么?

  5. 5

    为什么需要卸下HDD才能将OS干净地安装在SSD上?

  6. 6

    为什么2.5英寸SSD比2.5英寸HDD消耗更多功率?

  7. 7

    为什么在oracle函数中进行比较要比没有它时慢,并且如何提高性能?

  8. 8

    为什么这个Clojure微型基准测试这么慢?

  9. 9

    为什么操作系统需要将所有RAM复制到HDD才能进行休眠?

  10. 10

    为什么我的A *实施要比Floodfill慢?

  11. 11

    为什么我的A *实施要比Floodfill慢?

  12. 12

    Linux基准SSD与HDD

  13. 13

    为什么我的PC突然无法再与SSD驱动器一起使用,而与HDD驱动器一起正常工作?

  14. 14

    为什么使用tf.keras进行推理要比使用TFLite慢75倍?

  15. 15

    为什么在对基准进行基准测试时NetHogs会报告0 KB /秒?

  16. 16

    为什么boost :: circular_buffer在我的基准测试中这么慢?

  17. 17

    为什么要在循环中进行hasOwnProperty()测试

  18. 18

    为什么我的C程序要比等效的Haskell慢?

  19. 19

    为什么并行pi估计要比顺序pi估计慢?

  20. 20

    为什么gdb在请求写入后自动进行读取?

  21. 21

    为什么<$>慢?

  22. 22

    为什么psql慢?

  23. 23

    记录和SSD 4K写入

  24. 24

    如何对USB集线器进行故障排除/测试/基准测试(集线器充当瓶颈……为什么?)

  25. 25

    是什么决定了HDD写入哪个盘片/扇区?

  26. 26

    为什么目录/ lost + found 16K而不是4K字节?

  27. 27

    为什么第一次进行微基准测试总是最慢?

  28. 28

    HDD上的随机读取/写入速度非常慢

  29. 29

    为什么在依赖注入中进行反思?

热门标签

归档