基于文件pagecache预读加速开机启动的方法及装置
文献发布时间:2023-06-19 10:24:22
技术领域
本发明涉及Android系统开机启动的技术领域,特别涉及一种基于文件pagecache预读加速开机启动的方法及装置。
背景技术
Android系统的开机启动是用户体验至关重要的一环。当前Android系统开机过程会有大量的数据IO读取动作,从存储介质上寻址读取到数据一般是比较耗时的,此时CPU必须等到数据读取返回来时才能继续处理运行,CPU IO-Wait较多,会影响整体的开机性能。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种基于文件pagecache预读加速开机启动的方法,能够提升Android系统的开机速度。
本发明还提出一种具有上述基于文件pagecache预读加速开机启动的方法的基于文件pagecache预读加速开机启动的装置。
本发明还提出一种具有上述基于文件pagecache预读加速开机启动的方法的计算机可读存储介质。
根据本发明的第一方面实施例的基于文件pagecache预读加速开机启动的方法,包括:预读信息检测步骤,在Android系统内核启动完成,挂载好只读分区后,判断系统中是否已存在预读内容信息;预读内容获取步骤,若不存在所述预读内容信息,则通过Linux内核虚拟文件系统的读取文件接口相应的预设trace开关,收集开机启动过程中读取的文件信息,得到所述预读内容信息;预读加速开机步骤,若存在所述预读内容信息,基于Linux内核的文件预读机制,根据所述预读内容信息进行开机启动。
根据本发明实施例的基于文件pagecache预读加速开机启动的方法,至少具有如下有益效果:自动追踪前一次正常开机过程中需要读取的存储数据信息,后续的开机通过追踪的内容信息进行预读,将读取内容异步加载到page cache,减少IO-Wait,加速开机。
根据本发明的一些实施例,所述预读信息检测步骤还包括:检测所述预读内容信息是否存在备份文件,若存在,则所述预读内容信息异常,转入执行所述预读内容获取步骤。
根据本发明的一些实施例,所述预读信息检测步骤还包括:检测所述预读内容信息的构建数据,判断是否与当前机器信息一致;若一致,则执行所述预读加速开机步骤,否则执行所述预读内容获取步骤。
根据本发明的一些实施例,所述预读内容获取步骤还包括:检测系统是否为首次开机,若为首次开机,则关闭所述预设trace开关,进行开机;否则,开启所述预设trace开关,收集开机启动过程中读取的所述文件信息,得到所述预读内容信息。
根据本发明的一些实施例,通过device_provisioned判断是否为首次开机。
根据本发明的一些实施例,所述收集开机启动过程中读取的文件信息,得到所述预读内容信息的方法包括:Android系统启动完成,基于ftrace机制,通过所述预设trace开关,读取解析所述文件信息,根据文件的偏移地址进行排序,将偏移地址连续的文件进行整合,生成所述预读内容信息。
根据本发明的一些实施例,根据所述预读内容信息进行开机启动的方法包括:调用系统接口readahead,根据所述预读内容信息,将相应的文件及偏移内容读取到pagecache中。
根据本发明的第二方面实施例的基于文件pagecache预读加速开机启动的装置,包括:预读信息检测模块,用于在Android系统内核启动完成,挂载好只读分区后,判断系统中是否已存在预读内容信息;预读内容获取模块,用于通过Linux内核虚拟文件系统的读取文件接口相应的预设trace开关,收集开机启动过程中读取的文件信息,得到所述预读内容信息;预读加速开机模块,用于基于Linux内核的文件预读机制,根据所述预读内容信息进行开机启动。
根据本发明实施例的基于文件pagecache预读加速开机启动的装置,至少具有如下有益效果:自动追踪前一次正常开机过程中需要读取的存储数据信息,后续的开机通过追踪的内容信息进行预读,将读取内容异步加载到page cache,减少IO-Wait,加速开机。
根据本发明的第三方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本发明的第一方面实施例的方法。
根据本发明实施例的基于文件pagecache预读加速开机启动的装置,至少具有同本发明的第一方面实施例的方法同样的有益效果。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的方法的流程示意图;
图2为本发明实施例的方法实施后的系统启动过程示意图;
图3为本发明实施例的系统的模块示意框图。
附图标记:
预读信息检测模块100、预读内容获取模块200、预读加速开机模块300。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
名词解释:
ftrace:用于帮助开发人员了解Linux内核的运行时行为,以便进行故障调试或性能分析。
参照图1,本发明的实施例的方法包括:预读信息检测步骤,在Android系统内核启动完成,挂载好只读分区后,判断系统中是否已存在预读内容信息;预读内容获取步骤,若不存在预读内容信息,则通过Linux内核虚拟文件系统的读取文件接口相应的预设trace开关,收集开机启动过程中读取的文件信息,得到预读内容信息;预读加速开机步骤,若存在预读内容信息,基于Linux内核的文件预读机制,根据预读内容信息进行开机启动。
在本发明的实施例中,参照图2,Android系统在内核启动完成,通过init进程挂载好system、product、vendor等只读分区之后,在启动的系统服务进程中开启一个新的treadahead服务进程。在该treadahead服务进程中,检测当前是否已经有准备好的合法的预读内容,若未通过该检测,则判断需要追踪此次开机过程,追踪获取读取的文件。Android启动init进程之后在挂载了只读分区后,触发post-fs trigger方式,调用treadahead服务进程,进行相应检测。在本发明的实施例中,检测内容包括:首先判断当前已经存在相应的预读内容文件,若不存在,则需要通过追踪获取预读内容;若存在预读内容文件,则继续判断该预读内容文件是否存在相应的备份文件,若存在,则可能在开机过程中因掉电或故障退出导致该预读内容文件受损,需要重新通过追踪获取预读内容;若不存在备份文件,则继续判断该预读内容文件中的构建数据信息(build-data)是否与当前系统所在的机器信息一致,不一致则该预读内容文件非法,需要重新追踪获取预读内容,否则预读内容文件合法,此时,基于Linux内核的文件预读机制,根据预读内容信息进行开机启动。
本发明实施例中,文件信息的追踪采集,通过ftrace工具来完成。预先为Linux内核虚拟文件系统(即内核中VFS层)的读取文件接口设置相应的trace开关,开启这些预设trace开关,ftrace工具会自动追踪开机过程中读取的文件的相应信息。在开启预设trace开关前,会通过读取device_provisioned标志判断系统此次启动是否为首次启动,因为Android的第一次启动会有许多额外的文件读取操作,在后续的开机行为中是不需要的,需要识别避开此次开机。若为非首次开机,则打开预设trace开关,后续系统开机过程中读取文件的信息都将被ftrace工具记录下来。
Android系统开机完成后,触发属性boot-complete,通过检测预设trace开关是否打开,来判断是否需要通知该treadahead服务进程分析ftrace工具收集到的文件内容信息,生成相应的预读内容信息。若预设trace开关被打开,则证明本次开机过程中已进行了文件信息的追踪采集,需要分析整理ftrace工具收集到的文件信息;若未被打开,则不需要执行任何操作,该treadahead服务进程退出。若预设trace开关被打开,判定需对收集预读内容进行处理;此时,为原有的预读内容文件建立安全备份,读取ftrace工具获得的追踪信息(trace info),对追踪信息进行按预设规则(如按加载时间的先后顺序)进行排序,遍历追踪信息,根据追踪信息的索引节点(inode,储存文件元信息的区域)来匹配文件名,并将偏移地址连续的文件偏移整合到一起,减少读取次数,最后删除安全备份文件,来保证预读内容文件的可靠安全,最后关闭对应ftrace工具。
本发明实施例的装置,参照图3,包括:预读信息检测模块100,用于在Android系统内核启动完成,挂载好只读分区后,判断系统中是否已存在预读内容信息;预读内容获取模块200,用于通过Linux内核虚拟文件系统的读取文件接口中的预设trace开关,收集开机启动过程中读取的文件信息,得到预读内容信息;预读加速开机模块300,用于基于Linux内核的文件预读机制,根据预读内容信息进行开机启动。预读信息检测模块100用于检测系统中是否存在预读内容信息以及预读内容信息的合法性(如:数据是否完整、是否为为本机构建的预读内容信息),若不存在相应的预读内容信息或者预读内容信息不合法,则调用预读内容获取模块200重新获取预读内容信息,否则,调用预读加速开机模块300进行加速开机。预读内容获取模块200,还会通过device_provisioned标志来识别是否为首次启动,若未首次启动,则通过关闭预设trace开关,从而在开机过程中不采集预读信息,防止首次启动额外加载的文件造成干扰。
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的例示性具体实施和架构的许多其它修改也处于本公开的范围内。
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
- 基于文件pagecache预读加速开机启动的方法及装置
- 一种基于分布式文件系统交织读预读的优化方法、装置