一种Linux下针对机械硬盘的预读方法

文档序号:6441340阅读:584来源:国知局
专利名称:一种Linux下针对机械硬盘的预读方法
技术领域
本发明涉及一种Linux下针对机械硬盘的预读方法。
技术背景
随着软件越来越复杂化,软件的启动速度也越来越慢,其通常主要因素源自启动时刻软件对磁盘的随机访问。
目前常见的机械硬盘,虽然有着不错的顺序访问性能,然而其随机访问性能却不尚ο
于是一些预读技术就被提出,来优化软件的启动速度。预读主要是在磁盘空闲间隙,按照磁盘顺序,提前读取接下来要访问的内容。
预读主要包含两个任务——“收集需要预读的文件片断”和“预读文件片断”。
目前在Linux上,已有预读方法如下
1.收集需要预读的文件片断在软件启动阶段采用fanotify/inotify系统调用来监视哪些文件被打开。启动完成后,再依次对前述打开过的文件使用mincore系统调用, 来获知文件的哪些部分在内存中,在内存中的部分被认为是启动过程中被读取的,从而被记录下来,形成类似“文件路径区间1,区间2,... ”的一条记录。
最后将上述记录按照所在磁盘位置排列,写入到一个文件中。
2.预读文件片断在软件启动一开始,预读程序根据上点生成的记录文件,逐个打开文件并通过readahead/posi^fadvise系统调用,来指示操作系统内核进行预读。
然而上述预读方法表现并不尽如人意。
首先,预读操作按照了磁盘序,固然提高了磁盘效率,却往往会干扰正常的读访问。例如某软件启动时,依次访问了四个文件片段a,b,c,d,而其磁盘顺序为d,c,b,a。这样在启动时刻,按照磁盘序预读的d并不是立即需要的,反而与启动的软件竞争磁盘带宽。
其次,预读仅仅涵盖了启动时刻的文件访问,却忽略了对文件系统元数据的访问。 在实测中,启动时刻相当一部分磁盘访问对应到了文件系统的元数据。发明内容
本发明所要解决的技术问题是提供一种Linux下针对机械硬盘的预读方法,该方法可以有效改善机械硬盘上的软件启动速度。
为了解决上述的技术问题,本发明的一种Linux下针对机械硬盘的预读方法,包括步骤
1)收集需要预读的文件片断。
无缝记录软件正常启动过程中的磁盘读访问。与已有方案相比,记录对象为磁盘块,从而能记录对文件系统元数据的读取;每次读取块的顺序和块号都将被记录。
启动完成后,按照其磁盘块被访问的顺序,写入到预读镜像。与已有方案相比,写入的是预读内容的一个副本,而非引用。
2)预读文件片断。
软件启动时刻,将优先尝试从预读镜像中读取所需块。与已有方案相比,由于预读镜像磁盘块的顺序与访问顺序一致,从而既满足了最大利用机械磁盘特性,又能避免预读非急需内容,干扰正常启动。
3)维持预读镜像的有效性。
定期同步预读镜像中的磁盘块副本。由于软件更新等原因造成的原件更新,将被发现并更新到镜像中的磁盘块副本中。
采用本发明所提出的预读方法,有效地把软件启动时刻的磁盘随机读访问转化为顺序读取,最大利用机械磁盘特性。同时预读顺序与正常访问顺序一致,有效解决了原有预读干扰问题。另外,对于文件系统元数据的读访问,也能进行预读。


下面结合附图和具体实施方式
对本发明作进一步详细的说明。
图1是本发明“收集需要预读的文件片断”任务在软件启动阶段的工作流程图2是本发明“收集需要预读的文件片断”任务在软件启动完成后的工作流程图3是本发明“预读文件片断”任务的工作流程图4是本发明“维持预读镜像的有效性”任务的工作流程图;具体实施方式
本发明实现使用了 Linux内核的LVM子系统,LVM子系统能够将多个磁盘或镜像文件按照不同目标需求,组成一个虚拟的磁盘。
在本发明中,需要为LVM子系统增加一个readahead目标,该目标下,预读镜像与机械磁盘组成一个虚拟的磁盘。readahead目标对预读的三个任务实现如下
1)收集需要预读的文件片断在软件启动阶段,对磁盘块的读请求被依次记录到一块内存区域。图1显示了这个工作流。
在启动完成后,通知readahead目标,生成预读镜像。图2显示了这个工作流,即根据先前记录,依次从机械磁盘上读取磁盘块填充到预读镜像。预读镜像是启动时读取的磁盘块集合的一个副本,按照读取的顺序排列。
2)预读文件片断所有磁盘的访问将通过虚拟磁盘。其中读请求优先从预读镜像中满足。图3显示了这个工作流,点状虚线代表请求的磁盘块不在预读镜像时,再从机械硬盘中查找。
3)维持预读镜像的有效性所有磁盘的访问将通过虚拟磁盘,如果发现更新磁盘块在预读镜像中有副本,则对副本置位无效。系统周期性对无效副本进行重填。图4显示了这个工作流。
在说明书附图中,图1-3带有数字的小方框代表一个读请求,图4中带有数字的小方框代表一个写请求。框中数字代表请求的磁盘块号。
上述实施例不以任何方式限制本发明,凡是采用等同替换或等效变换的方式获得的技术方案均落在本发明的保护范围内。
权利要求
1. 一种Linux下针对机械硬盘的预读方法,其特征在于包括以下步骤1)收集需要预读的文件片断,无缝记录软件正常启动过程中的磁盘读访问,启动完成后,按照其磁盘块被访问的顺序,写入到预读镜像;2)预读文件片断,软件启动时刻,将优先尝试从预读镜像中读取所需块;3)维持预读镜像的有效性,定期同步预读镜像中的磁盘块副本,对于各种原因造成的原件更新,将被发现并更新到镜像中的磁盘块副本中。
全文摘要
本发明公开了一种Linux下针对机械硬盘的预读方法,改方法包括步骤1)收集需要预读的文件片断;2)预读文件片断;3)维持预读镜像的有效性;采用本发明所提出的预读方法,有效地把软件启动时刻的磁盘随机读访问转化为顺序读取,最大利用机械磁盘特性。同时预读顺序与正常访问顺序一致,有效解决了原有预读干扰问题。另外,对于文件系统元数据的读访问,也能进行预读。
文档编号G06F3/06GK102520884SQ20111042000
公开日2012年6月27日 申请日期2011年12月15日 优先权日2011年12月15日
发明者吴少刚, 张福新, 陈杰 申请人:江苏中科梦兰电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1