为什么SSD上的顺序写入比随机写入具有更好的性能?

为什么SSD上的顺序写入比随机写入具有更好的性能?

标签列表为什么SSD上的顺序写入比随机写入具有更好的性能?performancehard-drivessdiobenchmark9LBA(逻辑块地址)是在SSD中实现的映射表,用于将逻辑页/块与物理页/块进行匹配。我猜大多数SSD(至少在空置时)会按照相同顺序保留物理地址和逻辑地址的映射关系(物理地址0与逻辑地址0对应,1与1对应,以此类推)。

当页面发生变化时,SSD控制器将更新过的页面复制到缓存中,修改页面,将旧页面标记为“无效/陈旧”,然后将新页面写入不同的位置并更新LBA。

因此,经过几次写操作后,即使物理地址与逻辑地址对齐,这个顺序也会被打乱!

那么,为什么顺序写操作的性能比随机写操作好呢?

编辑:

无论块大小还是队列深度如何,顺序写和随机写之间的性能差别不大。

- SamTh3D3v53为什么要给负评呢!这是一个非常合理的问题,有很多令人困惑的解释存在! - SamTh3D3v5由于哲学和设计的原因,投票是匿名的,而且既不需要强制性的解释就能进行点赞或踩的投票。当鼠标指针悬停在踩按钮上时,会显示一个提示信息:"这个问题没有展示出任何研究努力;它不清楚或者没有用处"。此外,如果问题写得不好,或者不完全符合主题要求,或者缺少细节,也可能会被踩。 - HBruijn@Elhamer,我给你点了踩因为我无法理解你在说什么。当你说“随机写入”时,你是指随机的4KB写入吗?还是与SSD的本机块大小相等的随机写入?你是一个接一个地进行写入吗?或者是有一定的队列深度吗? - David Schwartz@DavidSchwartz嗯,我并未提到大小或队列深度,因为我发现无论其他参数是什么(如4k、128k等),以及队列深度是16还是32,随机写入和顺序写入之间都存在性能不足的问题。 - SamTh3D3v这篇文章现在被引用在一个关于顺序与随机数据访问的有趣文章中:https://jack-vanlightly.com/blog/2023/5/9/is-sequential-io-dead-in-the-era-of-the-nvme-drive - warren2个回答10一个相当简明的解释,由Seagate(WayBack副本在这里)提供,解释了垃圾回收对于随机写入和顺序写入的SSD性能差异负有责任。

... 垃圾回收的需求会影响SSD的性能,因为对于“满”盘(初始的可用空间或容量已经被填满至少一次的盘),任何写操作都需要等待通过垃圾回收过程创建的新的可用空间。由于垃圾回收是在块级别进行的,所以根据是否涉及顺序或随机数据,性能差异也很大。顺序文件填满整个块,这极大地简化了垃圾回收。而对于随机数据来说情况则完全不同。

随机数据被多个应用程序频繁写入时,页面会按顺序写入到闪存的各个块中。问题在于:这些新数据正在替换其他块中随机分布的旧数据。这导致大量小的无效页面“洞”散布在仍包含有效数据的页面之间。在对这些块进行垃圾回收时,所有有效数据都必须被移动(即读取和重新写入)到另一个块中。

相比之下,当顺序文件被替换时,通常整个块都是无效的,因此不需要移动任何数据。有时候一个顺序文件的部分内容可能与另一个文件共享一个块,但平均只有大约一半的这样的块需要被移动,所以相比于随机写入块的垃圾回收来说速度要快得多。...

- HBruijn4是的,这很有道理,谢谢。但是让我困扰的是,顺序读取将根据逻辑块地址(LBA)上的映射来读取数据页。如果某个页面被更新了,它的逻辑地址将保持不变,但物理地址将会改变(因为更新页面意味着在空闲空间中重新写入该页面,并将旧页面标记为过时以供垃圾回收使用)。基于此,在进行几次随机更新后,物理层面上实际上无法执行物理顺序写入(这在大多数情况下应该是必要的)! - SamTh3D3v链接需要更新吗? - dtc@dtc - 大概要等五年吧。这就是为什么建议像我一样,引用回答中相关的部分,而不仅仅是链接到在线资源。 - HBruijn非常感谢!阅读这篇文章对我来说非常有帮助。 - dtc回答链接2另一个解释是,顺序I/O在各个层面上更容易合并。通常情况下,当您发送相同的数据但使用较少但更大的I/O时,开销会更小,从而通过合并可以达到更高的吞吐量。您需要证明您使用的内核没有将顺序I/O批量处理成更大的I/O,从而减少开销并改善性能,与随机I/O相比所需的操作。

- Anon回答链接相关问题6 低的SSD写入IOPS(约100)6 持续顺序写入导致性能严重下降© 2023 根据CC BY-SA 4.0 许可证授权京ICP备19056307号-1