顺序读取文件会导致随机磁盘查找吗?

Posted

技术标签:

【中文标题】顺序读取文件会导致随机磁盘查找吗?【英文标题】:Would reading a file sequentially result in random disk seeks? 【发布时间】:2016-12-13 17:25:47 【问题描述】:

我的印象是文件的顺序扫描实际上是磁盘上的顺序查找。但是,我最近读到文件的块可能不会被文件系统连续写入磁盘。如果使用inode作为map,每个block都是通过block指针获取的,我想知道文件系统检索文件块的实际机制是否实际上是顺序的?

如果答案是依赖于文件系统,那么最好引用一些主要的文件系统。 谢谢。

【问题讨论】:

首先你需要给出“顺序”的定义——在硬盘上没有顺序,因为硬盘是3维的(板/轨道/扇区)。 @EugeneMayevski'EldoS 连续 == 硬盘上的连续块。 @itisravi 您的评论很遗憾不适用,因为“sequential”和“contiguous”是同义词,我之前的评论中已经说明了它们的问题。此外,两个相邻的扇区是不连续的。 HDD 上的扇区从一开始就没有按顺序编号,因此逻辑扇区 1 和逻辑扇区 2,即使它们位于同一磁道(柱面)上,也不是相邻的。 @EugeneMayevski'EldoS 好吧,不知道。那么连续分配是什么意思呢?必须有一些逻辑将块分配到物理上非常接近(即使没有按顺序编号),以便在读取文件时跨同一盘片的扇区和跨盘片的寻道时间最小化。 【参考方案1】:

文件系统尝试在写入期间分配尽可能多的顺序块。但随着年龄的增长(即随着时间的推移,大量创建+删除),fragmentation 变得不可避免。有一些启发式方法可以减少碎片,例如推测性预分配、延迟预分配等。应用程序本身可以执行诸如预分配(例如 fallocate)之类的事情,根据文件系统中可用的功能启用预读和运行碎片整理工具,以使块连续或至少阅读速度更快。

【讨论】:

以上是关于顺序读取文件会导致随机磁盘查找吗?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:31 MySQL数据库的日志顺序读写以及数据文件随机读写的原理

MySQL日志顺序读写及数据文件随机读写原理

如何在处理多个文件时最大化吞吐量

git读取配置文件的顺序

在apache中-每次调用php文件时都会从磁盘读取它们吗?

博客园文章