![为什么 SSD 上的顺序写入比随机写入具有更好的性能?](https://linux22.com/image/702291/%E4%B8%BA%E4%BB%80%E4%B9%88%20SSD%20%E4%B8%8A%E7%9A%84%E9%A1%BA%E5%BA%8F%E5%86%99%E5%85%A5%E6%AF%94%E9%9A%8F%E6%9C%BA%E5%86%99%E5%85%A5%E5%85%B7%E6%9C%89%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%80%A7%E8%83%BD%EF%BC%9F.png)
一个左心室射血分数(逻辑块地址)是在超速运输匹配逻辑和物理页面/块固态硬盘,我猜大多数固态硬盘(至少当它们为空时)保持物理地址与逻辑地址的顺序相同(物理地址 0 与逻辑地址 0 映射,1 与 1 映射,依此类推)。
当页面改变时固态硬盘控制器将更新的页面复制到缓存,更改页面,将旧页面标记为'无有效/陈旧'然后把新的写入不同的位置并更新LBA。
因此,即使物理地址与逻辑地址对齐,经过几次写入后,这个顺序也会被打乱!
那么为什么顺序写入比随机写入具有更好的性能?
编辑
顺序写入和随机写入之间的性能缺乏与块大小或队列深度无关。
答案1
一个相当简洁的解释希捷(WayBack 副本这里)关于垃圾收集如何导致 SSD 随机写入和顺序写入性能差异的问题:
... 垃圾收集的需求会影响 SSD 的性能,因为对“已满”磁盘(其初始可用空间或容量至少已填满一次)的任何写入操作都需要等待通过垃圾收集过程创建的新可用空间可用。由于垃圾收集发生在块级别,因此性能也存在显著差异,具体取决于涉及的是顺序数据还是随机数据。顺序文件填充整个块,这大大简化了垃圾收集。对于随机数据,情况则大不相同。
由于随机数据通常由多个应用程序写入,因此页面会按顺序写入闪存的各个块中。
问题是:这些新数据正在替换随机分布在其他块中的旧数据。这会导致大量无效页面的小“空洞”散布在仍然包含有效数据的页面中。在对这些块进行垃圾收集期间,必须将所有有效数据移动(即读取和重新写入)到另一个块中。
相比之下,当替换顺序文件时,整个块通常都是无效的,因此不需要移动任何数据。有时顺序文件的一部分可能会与另一个文件共享一个块,但平均而言,只有大约一半的块需要移动,这使得它比随机写入块的垃圾收集快得多。...
答案2
另一种解释是顺序 I/O 在所有级别上都更容易合并。通常,当您发送相同的数据但使用更少但更大的 I/O 时,开销会更少,因此您可以通过合并达到更高的吞吐量。您必须证明您使用的任何内核都没有将顺序 I/O 批处理为更大的 I/O,从而减少开销并提高性能(与随机 I/O 相比)。