顺序写入和随机写入之间的区别

时间:2010-01-20 10:23:27

标签: memory-management operating-system disk virtual-memory ssd

在以下情况下顺序写入和随机写入之间有什么区别: - 1)基于磁盘的系统 2)基于SSD [闪存设备]的系统

当应用程序写入某些东西并且需要在磁盘上修改信息/数据时,我们如何知道它是顺序写入还是随机写入。到此为止,写入不能被区分为“顺序”或“随机”。写入只是缓冲,然后在我们刷新缓冲区时应用到磁盘。

如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:75)

当人们谈论顺序 vs 随机写入文件时,他们通常会在没有中间搜索(“顺序”)的情况下区分写作,而不是寻求 - 写 - 寻 - 写 - 寻 - 写等模式(“随机”)。

这种区别在传统的基于磁盘的系统中非常重要,每个磁盘搜索大约需要10毫秒。按顺序将数据写入同一磁盘大约需要30 MB / MB。因此,如果您按顺序将100MB数据写入磁盘,则需要大约3秒钟。但如果你每次进行100次随机写入1MB,那么总共需要4秒钟(实际写入时间为3秒,所有搜索时间为10ms * 100 = 1秒)。

随着每个随机写入变小,您为磁盘搜索付出的代价越来越高。在你执行1亿个随机1字节写入的极端情况下,所有实际写入仍然会净3秒,但你现在有 11.57天值得做!很明显,您的写入顺序与随机的程度可能会影响完成任务所需的时间。

闪光灯的情况有点不同。使用闪存,您没有必须移动的物理磁盘头。 (这是10ms寻求成本来自传统磁盘的地方)。但是,闪存设备往往具有较大的页面大小(根据wikipedia,最小的“典型”页面大小约为512字节,并且4K页面大小似乎也很常见)。因此,如果您正在写少量字节,则闪存仍然有开销,您必须读出整个页面,修改您正在编写的字节,然后回写整个页面。我不知道闪光灯顶部的特征数字。但经验法则是,如果每个写入的大小通常与设备的页面大小相当,那么在闪存上,那么随机写入和顺序写入之间不会有太大的性能差异。如果您的每次写入与设备页面大小相比都很小,那么在进行随机写入时您会看到一些开销。

现在,对于上述所有情况,在应用程序层确实隐藏了很多内容。内核,磁盘/闪存控制器等中有层,例如可以在“顺序”写入过程中插入非显而易见的搜索。但在大多数情况下,在应用层编写“看起来”顺序(没有搜索,大量连续I / O)将具有顺序写入性能,而在应用层写入“看起来”随机将具有(通常更糟)随机写性能。