OpenHarmony之开机优化
一丶环境信息 源码版本:OpenHarmony-4.1-Release 板子型号:dayu200(RK3568) 二丶Bootchart工具 在进行性能优化时,我们需要借助Bootchart工具,当前OpenHarmony已经支持了Bootchart工具,Bootchart工具介绍如下:
一丶环境信息
源码版本:OpenHarmony-4.1-Release
板子型号:dayu200(RK3568)
二丶Bootchart工具
在开机优化时,我们需要借助Bootchart工具,当前OpenHarmony已经支持了Bootchart工具,我们可以直接使用Bootchart工具,Bootchart工具介绍如下:
概述
Bootchart是一个用于系统启动过程性能分析的开源软件工具。它可以在内核装载后就开始运行,记录系统启动过程中各个程序启动所占用的时间、CPU使用情况以及硬盘读写情况,直到系统启动完成为止。进入系统后,Bootchart可以将启动时记录下的内容生成多种格式(如PNG或PDF)的图形报表,以便用户进行深入分析。功能与用途
- 分析系统启动时间和启动过程中资源的使用情况。
- 发现可能影响系统启动速度的因素,如某些进程启动缓慢或占用过多资源等。
- 对系统进行优化,提高系统启动速度和运行效率。
- 主要特点
- 简单易用:只需在系统启动时启用Bootchart,即可生成详细的分析报告。
- 全面详细:Bootchart可以记录系统启动过程中的各种数据,包括CPU使用率、内存使用量、磁盘I/O等,并以图表形式展示出来。
通过Bootchart工具,开发者可以深入了解系统的启动过程,并对其进行详细的性能分析,从而优化系统启动速度和运行效率。
三丶开机优化
开机优化的主要目的是为了快速启动开机动画和退出开机动画(显示桌面)。所以在优化之前,我们需要了解一下OpenHarmony系统中投票机制,此机制是针对开机动画而设计的,参考文档:OpenHarmony开机动画流程_小~Q-Laval社区
可以使用Bootchart工具抓一份火焰图如下所示:
可以看到用户态/bin/init->deviceprofile之间的启动时序,从kthreadd之后都是内核态的进程,这段优化暂且不关注,本文的只关注用户态的。
四丶启动顺序
从火焰图来看,bootanimation服务启动比较靠后,而通过投票机制所知,涉及投票的SA服务有:
param get | grep ohos.boot.time
ohos.boot.time.kernel | init进程 | init.cfg |
---|---|---|
ohos.boot.time.init | init进程 | init.cfg |
ohos.boot.time.wms.fullscreen.ready | 窗口子系统 | foundation.cfg |
ohos.boot.time.samgr.ready | Samgr | samgr_standard.cfg |
ohos.boot.time.boot.completed | init进程 | init.cfg |
ohos.boot.time.param_watcher.started | param_watcher | param_watcher.cfg |
ohos.boot.time.appspawn.started | appspawn | appspawn.cfg |
ohos.boot.time.useriam.fwkready | Useriam | useriam.cfg |
ohos.boot.time.appfwk.ready | 元能力 | foundation.cfg |
ohos.boot.time.account.ready | 账号服务 | accountmgr.cfg |
ohos.boot.time.lockscreen.ready | hap锁屏服务 | foundation.cfg |
ohos.boot.time.bootanimation.ready | bootanimation进程 | graphic.cfg |
ohos.boot.time.bootanimation.started | bootanimation进程 | graphic.cfg |
ohos.boot.time.bootanimation.finished | bootanimation进程 | graphic.cfg |
所以这个时候我们可以从启动顺序来入手,由于init是用户态的第一个程序,是1号进程,所以对应的init.cfg就无需修改,而需要修改的就是foundation.cfg/samgr_standard.cfg/param_watcher.cfg/appspawn.cfg/useriam.cfg/access_token.cfg/graphic.cfg。那么如何修改这些cfg文件,能够保证启动顺序提前呢?在文档:
zh-cn/device-dev/subsystems/subsys-boot-init-service.md · OpenHarmony/docs - Gitee.com
中有一个start-mode字段,可以提前启动顺序,我们先来看看详细的定义:
start-mode | 可选 | 标准系统 | 服务的启动模式。 | 类型:字符串, 如 "start-mode" : "condition"。 目前支持"boot", "normal", "condition"。具体说明参考:init服务启动控制。 |
---|
- init服务启动控制(仅标准系统以上提供)init会根据用户的服务配置,把服务分成三类,在不同的阶段并行启动。
- “boot”类型:对应系统中需要优先启动的服务,该类服务在“init”阶段启动。
- “normal”类型:默认配置,对应系统中的普通服务,该类服务在“post-init"阶段启动。
- “condition”类型:必须通过启动命令启动,通过在jobs中添加“start xxxx”来启动对应服务。
然后将graphic.cfg文件推入进去
hdc_std shell mount -o remount,rw /
hdc_std file send ./graphic.cfg /system/etc/init/
hdc_std shell reboot
然后重新抓取火焰图如下图所示:
可以看到bootanimation服务已经提前了,而且相关的bootanimation投票也提前了,这个可以用 param get | grep ohos.boot.time 做对比。
修改前:
# param get | grep ohos.boot.time
ohos.boot.time.kernel = 5537210
ohos.boot.time.init = 10416358
ohos.boot.time.wms.fullscreen.ready = 15211367
ohos.boot.time.samgr.ready = 10458907
ohos.boot.time.boot.completed = 19373746
ohos.boot.time.param_watcher.started = 10459057
ohos.boot.time.appspawn.started = 11468966
ohos.boot.time.useriam.fwkready = 11864341
ohos.boot.time.appfwk.ready = 13266774
ohos.boot.time.account.ready = 13625761
ohos.boot.time.lockscreen.ready = 15299111
ohos.boot.time.bootanimation.ready = 12451068
ohos.boot.time.bootanimation.started = 14088725
ohos.boot.time.bootanimation.finished = 19373672
修改后:
# param get | grep ohos.boot.time
ohos.boot.time.kernel = 5586509
ohos.boot.time.init = 10401376
ohos.boot.time.wms.fullscreen.ready = 14766809
ohos.boot.time.samgr.ready = 10413935
ohos.boot.time.boot.completed = 19100843
ohos.boot.time.param_watcher.started = 10414320
ohos.boot.time.appspawn.started = 10780621
ohos.boot.time.useriam.fwkready = 11267694
ohos.boot.time.appfwk.ready = 12927512
ohos.boot.time.account.ready = 13355032
ohos.boot.time.lockscreen.ready = 14901581
ohos.boot.time.bootanimation.ready = 11741167
ohos.boot.time.bootanimation.started = 13810675
ohos.boot.time.bootanimation.finished = 19100758
所以依次可修改foundation.cfg/access_token.cfg等跟投票机制有关的sa服务。
不过这个可能跟设备相关,有些cfg文件提前可能效果不显著,有些提前会有很明显的效果。
五丶注意事项
1.需要标准系统以上。
2.如果开启了selinux功能的话,需要关闭selinux功能,才能抓取火焰图。
更多推荐
所有评论(0)