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


51

我在NVMe上具有运行PCIe Gen.3x4的Samsung 960 Pro 512 GB SSD。我使用Samsung NVMe驱动程序2.0.0.1607。SSD运行正常。但是,我不明白为什么4k的写入要比4k的读取更快。我正在使用AS基准测试:

在此处输入图片说明

这是三分之一!是否有问题(使用我的系统或AS Benchmark)还是正常的?


而且仍然比旋转硬盘快得多!
Zan Lynx

Answers:


76

4k读取将是驱动器可以完成的最困难的事情。它们是驱动器能够处理的最小块大小之一,并且驱动器无法预加载大量数据,实际上,如果驱动器提前加载逻辑打算读取任何内容,它们可能效率很低。大于4kb。

“正常”驱动器读取更有可能大于4kb,因为很少有那么小文件,甚至页面文件也可能被大块读取,因为程序只有“只”读取是奇怪的调出了4KB的内存。这意味着驱动器尝试执行的任何预加载实际上都会损害驱动器的吞吐量。

4K读取可能会通过驱动器缓冲区,但是测试的“随机”部分使它们完全不可预测。控制器不知道何时驱动器可能需要再次读取更普通的“大”字。

另一方面,可以有效地顺序缓冲,排队和写出4K写入。驱动器缓冲区可以完成它原本设计的捕获和写入工作,而损耗均衡器甚至可以将所有4K写操作分配给同一驱动器擦除块,偶尔将4K“随机”写操作转换为更接近顺序写入。

实际上,我怀疑这是在“ 4K-64Thrd”写入中发生的情况,“ 64-Thrd” 显然使用了较大的队列深度,因此向驱动器发出信号,表明它有大量数据要读取或写入。这会触发大量的写入群集,因此接近驱动器的顺序写入速度。执行4K写入仍然有开销,但是现在您已经完全暴露了缓冲区的潜力。在测试的读取版本中,驱动器控制器现在意识到它处于非常恒定的重负载下,停止预加载数据,可能避开了缓冲区,而是切换到“原始”读取模式,再次接近顺序读取速度。

基本上,驱动器控制器可以做一些事情来提高4K写入的效率,尤其是当它们的集群在同一时间到达时,而它不能做任何事情来使单个 4K读取的效率更高,尤其是当它试图优化时通过将数据预加载到缓存中来实现数据流。


5
这不是答案本身的一部分,但我怀疑“ 4K读取”(非64Thrd版本)实际上将驱动器默认读取块大小公开为32K或64K。这可能是2600/50 = 52(64K,有一些开销+原始4K读取)或1200/50 = 24(32K,有一些开销+ 4K读取减少了它)。
Mokubai

16
总体而言,答案很好,但是我根本不相信“这么小的文件很少”。实际上,我怀疑在大多数系统上,大多数文件都是4k或更小。它们不占用大部分空间,但这是另一回事。
hobbs

3
最简单的答案可能是这样的:如果一次执行一次,则根本无法重叠读取,因为直到返回上一次读取的数据之前,您甚至都不知道下一次读取的目的是什么。但是您可以完全重叠写入,因为在仍在处理前一个写入的同时可以获取下一个写入的所有数据。
David Schwartz

2
@hobbs如果以NTFS为例,则默认簇大小为4K(或其倍数),这意味着NTFS文件系统本身以4K块工作,即使文件和/或元数据本身较小。因此,较小的文件没有任何区别。为了所有目的和目的,Windows系统以4K块或该块的倍数读取/写入。
Tonny

1
@hobbs:使用NTFS,您可能会免费读取这些小文件(!)。小文件存储在目录条目本身中,与文件名相邻。您必须找到接近4KB的相当特定的文件大小,才能在磁盘上拥有实际的4KB文件。
MSalters

16

其他答案已经解释了为什么写作比阅读更快的原因。我想补充一点,对于此驱动器,这绝对是正常的,因为您可以在评论中找到一些基准测试。

ArsTecnica的评论

ArsTechnica已审查了该驱动器,您的版本(512 GB)和2 TB版本:

艺术技术 (此图未在评论中立即显示,它是第一个图库中的第5个,您必须单击它)

这两个型号的性能非常相似,并且它们的编号看起来像您的型号:该驱动器的读取速度为37 MB / s,写入速度为151 MB / s。

AnandTech的评论

AnandTech还审查了该驱动器:他们使用2TB模型,对队列深度分别为1、2和4的测试结果进行平均。这些图是:

AnandTech 4K阅读 AnandTech 4K写入

该驱动器的读取速度为137 MB / s,写入速度为437 MB / s。这个数字比您的数字高得多,但这可能是由于队列深度较高。无论如何,写入速度是读取速度的3倍,这取决于您的情况。

PC World的评价

PC World的另一则评论:他们已经测试了1 TB版本,并且4K的结果是读取速度为30 MB / s,PC World图 写入速度为155 MB / s: 写入速度与您的一致,但是这里的驱动器是甚至阅读速度更慢。结果是该比率是五比一,而不是三比一。

结论

评论确认对于此驱动器,随机4K的写入速度通常比读取速度快是正常的:根据测试,速度甚至可能快5倍。

您的驱动器还可以。没有理由认为它有故障,或者您的系统有问题。


8

SSD控制器将写入内容缓存在板载NVRAM中,并在适当的时候将其刷新到闪存介质中。因此,写延迟就是缓存访问延迟,通常为20us。相反,读取是通过媒体进行的,访问时间最多为120-150us。


1

扩展Andrey的答案后,您需要查看所涉及的开销,然后SSD才能向计算机发出操作已完成的信号。

对于写操作,仅需将数据写到内部RAM缓存中。稍后,它将与检查,错误更正和定位所需的其他4k块以及元数据一起写入闪存。

对于读取,SSD必须首先找到数据。计算机要读取的位置称为逻辑地址,与闪存中数据的物理位置没有直接关系。SSD根据闪存的几何形状(单元的排列方式),坏块重映射,损耗均衡和各种其他因素,将逻辑地址转换为物理地址。然后,它必须等待其他操作完成,然后再从闪存中获取数据,然后进行检查,并在需要时重新读取并应用错误纠正,甚至可能将整个块重写到其他位置。

尽管写操作所花费的总时间可能比典型的读操作要长,但是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.