0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony标准系统开机时长优化

OpenAtom OpenHarmony 来源:未知 2023-04-08 02:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

点击蓝字 ╳ 关注我们


开源项目 OpenHarmony
是每个人的 OpenHarmony

戴学跃

深圳市优博终端科技有限公司

OpenHarmony知识体系工作组

简介

万物互联时代,产品性能至关重要,而系统启动时间是系统性能的重要组成部分,因为用户必须等待系统启动完成后才能使用设备。对于经常需要进行冷启动的汽车等设备而言,较短的启动时间至关重要(没有人喜欢在等待几十秒后才能输入导航目的地),在金融交易设备、电子商务服务器、实时通信设备同样也有较高的应用场景,那我们该如何在OpenAtom OpenHarmony(简称OpenHarmony ) 标准系统现有的能力下,完成秒级开机?本文由深圳市优博终端科技有限公司的研发同学介绍一套关于优化OpenHarmony标准系统开机时长优化的方案,通过对硬件、Kernel、 Framework的相应优化让系统开机时长尽量缩短。

效果展示

下面给出系统开机时长优化前后的对比效果视频,优化前的开机时长在18秒左右,优化后的开机时间在7秒左右。



开发环境

硬件平台:RK3588
系统版本:OpenHarmony 3.1 Release
开发语言:C、 C++

四步带你体验OpenHarmony标准系统开机时长优化

一、调整硬件资源使用率
调整硬件资源相应配置参数使之尽可能地达到最优运行状态,这里所指的硬件资源是指 RAM、FLASH。

RAM:运存的调优需要根据厂商的指导文档在设备树文件<.dtsi文件>中进行调整,比如设定运存的时钟频率 memory-frequency、
设定内存带宽 memory-bandwidth、内存时序 memory-timings 等,Kernel 层可以对 swappiness、dirty_ratio、dirty_background_ratio、min_free_kbytes等相应值进行调整,来达到运存的性能调优。

FLASH:比如对 physical_block_size 项进行调整,目前 OpenHarmony 采用的文件系统为 ext4,可以在熟悉ext4文件系统后,然后对其中缓存、模式、压缩、清理等方向进行调优。减少KMSG与HiLog 日志输出,调整其输出等级。

二、Kernel 启动时长优化
Kernel 启动阶段会进行硬件检测、驱动加载、文件系统挂载、设置网络等,其中耗时比较长的基本上为驱动加载,因为这中间会有重复尝试跟 Sleep 的时间,需要重点关注,在 Kernel 启动的过程中可以将一些无用的子系统进行裁剪,比如 bootchart。

三、系统框架启动时长优化
在系统层启动时,需要启动很多服务,可以采用并行启动系统必要服务,延迟启动非必要服务,这些服务从加载到启动完成、其中比较耗时的有 so 加载,可采用多线程的方式对其进行加载,下面贴出多线程加载多个 so 文件的 Demo 代码;
#include 
#include
#include
#include
#include
void thread_func(void* handle){
// 空函数
}
int main(){
std::vector<std::string> lib_names = {"mpp1.so", "mpp2.so", "mpp3.so"};
std::vector<void*> handles;
for (const auto& lib_name : lib_names) {
void* handle = dlopen(lib_name.c_str(), RTLD_LAZY);
if (handle == nullptr) {
std::cerr << "Error loading library " << lib_name << ": " << dlerror() << std::endl;
return 1;
}
handles.push_back(handle);
}
std::vector<std::thread> threads;
for (const auto& handle : handles) {
threads.emplace_back(thread_func, handle);
}
for (auto& thread : threads) {
thread.join();
}
for (const auto& handle : handles) {
dlclose(handle);
}
return 0;
}
如果发现加载的单个so文件过大时,可采用多线程分段加载此so 文件。

四、 开机动画显示优化
优化思路大致为进入 bootAnimation 的 main 函数后,将动画图片采用数组或者链表的方式进行预加载,开启每秒60帧的刷新率,此处为什么要开60帧,因为如果设定为30帧时,出现掉帧的情况后,会出现肉眼可见的卡顿。当图片播放完成后,延迟几百毫秒左右再进入桌面,因为Launcher 加载已安装的 app ,需要一定的时间。下面是开机动画优化的部分内容 :
1.提高开机动画、渲染进程优先级;
"services" : [{
"name" : "render_service",
"path" : ["/system/bin/render_service"],
"uid" : "root",
"importance" : -20,
"gid" : ["system", "shell", "uhid", "root"]
}, {
"name" : "bootanimation",
"path" : ["/system/bin/bootanimation"],
"once" : 1,
"importance" : -20,
"uid" : "root",
"gid" : ["system", "shell", "uhid", "root"]
}
]
2. 提前加载开机动画图片;
ReadZipFile(BOOT_PIC_ZIP, imageVector_, jsonConfig);
imgVecSize_ = static_cast<int32_t>(imageVector_.size());
if (imgVecSize_ <= 0) {
PostTask(std::bind(&AppExecFwk::Stop, runner_));
LOGE("zip pic num is 0.");
return;
}


SortZipFile(imageVector_);
3.指定开机动画显示帧率;
OHOS::FrameCallback fcb = {
.userData_ = this,
.callback_ = std::bind(&BootAnimation::onVsync, this),
};
int32_t changefreq = static_cast<int32_t>((1000.0 / freq_) / 16);
ret=receiver_->SetVSyncRate(fcb,changefreq);
开机优化需要借助一些工具来分析比如串口工具、bootchart 生成的可视化图表来进行分析。
OpenHarmony 标准系统默认集成了bootchart,下面介绍如何使用bootchart 工具来获取开机性能数据及生成性能图片:
(1)开机完成后,运行 hdc_std shell
(2)运行 begetctl bootchart enable
(3)运行 reboot 或者断电重启
(4)运行 begetctl bootchart stop
(5)运行 begetctl bootchart disable
(6)进入到/data/bootchart/文件夹下查看是否有
(7)header、proc_diskstats.log、proc_ps.log、proc_stat.log
(8)在/data/bootchart/目录下执行命令:tar -czf bootchart.tgz *
(9)将bootchart.tgz 导出到本地磁盘上
(10)hdc_std file recv /data/bootchart/bootchart.tgz ./
(11)生成开机性能图片 java -jar bootchart.jar bootchart.tgz
上面的bootchart.jar 需要下载源码去编译生成或者下载他人已经编译好的jar包。源码下载地址 https://sourceforge.net/projects/bootchart/ 。

下图为 bootchart 生成的 OpenHarmony性能可视化视图


总结

通过本篇文章介绍,您对OpenHarmony标准系统下性能优化的功能应该有了初步的了解。如果您对本篇文章内容感兴趣,可以根据本篇文章介绍进行研究和使用。同时也欢迎更多开发者与我们共享开发成果,分享技术解读与经验心得。


原文标题:OpenHarmony标准系统开机时长优化

文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2859

    浏览量

    45359
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20724

原文标题:OpenHarmony标准系统开机时长优化

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电能质量在线监测装置的暂态波形存储时长可以通过哪些方式进行优化

    电能质量在线监测装置的暂态波形存储时长优化需结合硬件升级、数据压缩、存储策略调整及架构创新等多维度技术手段。以下是基于行业实践与前沿技术的系统性方案: 一、硬件存储与架构优化 工业级存
    的头像 发表于 11-05 14:45 135次阅读

    如何延长电能质量在线监测装置的暂态波形存储时长

    延长电能质量在线监测装置的暂态波形存储时长需从硬件扩容、数据压缩、策略优化、架构升级等多维度综合施策。以下是结合行业实践与技术标准的具体方案: 一、硬件升级:突破物理存储瓶颈 内置存储扩容 选择支持
    的头像 发表于 11-05 14:26 185次阅读

    用艾德克斯IT6500C/D系列测试电源开机时间和上升时间

    AC-DC、DC-DC电源模块的完整测试往往包括开机时间、关机时间、上升时间、下降时间的测试。测试系统,如艾德克斯ITS9500电源测试系统可以完整高效的进行测试。如果不使用测试
    的头像 发表于 09-16 17:19 663次阅读
    用艾德克斯IT6500C/D系列测试电源<b class='flag-5'>开机时</b>间和上升时间

    请问各位dayu200是不是不支持烧录64位的OpenHarmony

    我自己编译了OpenHarmony5.0.2的镜像,发现如果使用arm64参数编译为64位版本,烧录后卡在开机动画无法开机,如果编译为32位就可以正常。请问dayu200不支持64位系统
    发表于 08-16 17:39

    【重要通知】OpenHarmony主干平台开发板选型提报倒计时(参考工具发布)

    各位伙伴好: 鉴于当前开源鸿蒙标准系统的主线验证平台(RK3568)在性能上已难以满足未来几年的发展需求。为确保系统持续演进,现启动下一代主力验证平台的规划工作。 经过初步调研,我们筛选出四个候选
    发表于 07-24 09:17

    硬件设备的开机密钥:电路设计深度解析

    开机电路设计如同为硬件设备编写了一串“开机密钥”,它通过复杂的信号传递与逻辑判断,确保系统从断电状态到正常工作模式的平稳过渡。这一设计的精妙程度,直接定义了设备的启动效率与可靠性。 本文应工程师朋友
    的头像 发表于 06-23 16:08 545次阅读
    硬件设备的<b class='flag-5'>开机</b>密钥:电路设计深度解析

    一文带你了解KaihongOS标准系统的技术架构、子系统系统应用、典型特性以及支持的设备类型

    分布式软总线子系统 2.10.1 子系统概述 KaihongOS标准系统软件是基于OpenHarmony开发的新时代万物互联的操作系统
    发表于 04-23 07:17

    OpenHarmony5.0系统怎么去除锁屏直接进入界面?教你2步搞定

    本文介绍在OpenHarmony5.0Release操作系统下,去除锁屏开机后直接进入界面的方法。触觉智能PurplePiOH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,1TOPS算力NPU
    的头像 发表于 03-12 18:51 977次阅读
    <b class='flag-5'>OpenHarmony</b>5.0<b class='flag-5'>系统</b>怎么去除锁屏直接进入界面?教你2步搞定

    DLPC350插上电源后风扇在转,但是没有开机时投出的图片,usb连接电脑后也一直连接不上,为什么?

    DLPC350插上电源后风扇在转,但是没有开机时投出的图片,usb连接电脑后也一直连接不上
    发表于 02-27 06:39

    dlpc3433怎样修改固件会将开机时显示的为无启动画面且为外部输入模式呢?

    怎样修改固件会将开机时显示的为无启动画面且为外部输入模式呢?或者说有什么工具可以修改呢?
    发表于 02-27 06:08

    基于OpenHarmony标准系统的C++公共基础类库案例:ThreadPoll

    1、程序简介该程序是基于OpenHarmony标准系统的C++公共基础类库的线程池处理:ThreadPoll。本案例完成如下工作:创建1个线程池,设置该线程池内部有1024个线程空间。启动5个线程
    的头像 发表于 02-10 18:09 601次阅读
    基于<b class='flag-5'>OpenHarmony</b><b class='flag-5'>标准系统</b>的C++公共基础类库案例:ThreadPoll

    基于OpenHarmony标准系统的C++公共基础类库案例:Semaphore

    1、程序简介该程序是基于OpenHarmony标准系统的C++公共基础类库的线程处理:Sempahore。本案例完成如下工作:(1)无名信号量使用方法定义1个无名信号量,1个供无名信号量管理
    的头像 发表于 02-10 18:08 635次阅读
    基于<b class='flag-5'>OpenHarmony</b><b class='flag-5'>标准系统</b>的C++公共基础类库案例:Semaphore

    技术分享!蜂窝模组开机电路设计

    模组的上电开机,是硬件设计调试的第一步。在前期设计阶段,尤其要注意优化外部电路设计(特别是电源部分)。 本文特别分享常见开机电路设计相关注意事项。适合大多数蜂窝模组,在实际开发中可灵活应用。 一
    的头像 发表于 12-17 18:05 1487次阅读
    技术分享!蜂窝模组<b class='flag-5'>开机</b>电路设计

    【新品体验】贝启科技BQ3568HM开源鸿蒙开发板免费试用

    贝启科技BQ3568开源鸿蒙开发板是一款功能全面的开发板,搭载了RK3568鸿蒙系统主板和OpenHarmony标准系统,具备高性能处理器(Quad-core ARM Cortex-A55,主频高达
    发表于 12-12 17:13

    OpenHarmony默认30秒熄屏太麻烦?触觉智能鸿蒙开发板教你轻松取消

    OpenHarmony系统开机后 30 秒会自动息屏,教大家两招轻松取消自动息屏,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新OpenHarmony5.0 Release
    的头像 发表于 12-09 11:45 1306次阅读
    <b class='flag-5'>OpenHarmony</b>默认30秒熄屏太麻烦?触觉智能鸿蒙开发板教你轻松取消