OpenHarmony南向开发:OH标准系统开机时长优化

RK3588 移植 OpenHarmony-4.0-Beta1 之编译 【代码】RK3588 移植 OpenHarmony-4.0-Beta1 之编译。 阅读详情

往期鸿蒙全套实战精彩文章必看内容:


简介

万物互联时代,产品性能至关重要,而系统启动时间是系统性能的重要组成部分,因为用户必须等待系统启动完成后才能使用设备。对于经常需要进行冷启动的汽车等设备而言,较短的启动时间至关重要(没有人喜欢在等待几十秒后才能输入导航目的地),在金融交易设备、电子商务服务器、实时通信设备同样也有较高的应用场景,那我们该如何在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 <iostream>
#include <dlfcn.h>
#include <thread>
#include <vector>
#include <string>
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::EventRunner::Stop, runner_));
    LOGE("zip pic num is 0.");
    return;
}

SortZipFile(imageVector_);

 3. 指定开机动画显示帧率;

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

看完三件事❤️

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注作者 ,不定期分享原创知识。
  • 同时可以期待后续文章ing🚀。   ​
OpenHarmony RK3568 启动流程优化 目前rk3568的开机时间有21s,统计的是关机后从按下 power 按键到显示锁屏的时间,当对openharmony的系统进行了裁剪子系统,系统app,禁用部分服务后发现开机时间仅仅提高到了20.94s 优化微乎其微。在对init进程的log进行分析并解决其中的时间断层后 开机时长优化到了16.5s左右,可以说是一个非常大的进步了,下面详细讲一下优化的过程。 阅读详情

相关推荐

【鸿蒙OH实战开发】OpenHarmony标准系统开机时长优化

万物互联时代,产品性能至关重要,而系统启动时间是系统性能的重要组成部分,因为用户必须等待系统启动完成后才能使用设备。对于经常需要进行冷启动的汽车等设备而言,较短的启动时间至关重要(没有人喜欢在等待几十秒后才能输入导航目的地),在金融交易设备、电子商务服务器、实时通信设备同样也有较高的应用场景,那我们该如何在OpenAtom OpenHarmony(简称OpenHarmony ) 标准系统现有的能力下,完成秒级开机?

huchenghe2的博客 1108

OpenHarmony标准系统开机时长优化

我们该如何在OpenAtom OpenHarmony(简称OpenHarmony ) 标准系统现有的能力下,完成秒级开机?

OpenHarmony_dev的博客 1479

【鸿蒙南向开发】OpenHarmony——Graphic子系统之开机动画

标准系统提供了图形接口能力和窗口管理接口能力, 支持应用程序框架子系统和ACE等子系统使用。故可以根据不同硬件系统选择编译不同模块,选择适配轻量系统或者标准系统。图形子系统主要包括UI组件、布局、动画、字体、输入事件、窗口管理、渲染绘制等模块。以下主要分析标准系统能力。代码版本是OpenHarmony3.1版本。开机动画是鸿蒙系统启动后,运行的第一个和图形渲染相关的进程,相关依赖相对独立便于分析,是分析图形子系统比较好的切入点。图形子系统主要依赖窗口、surface、render service。

HarmonyOS_666的博客 2328

最新爆料!RK3588 适配 OpenHarmony 的新进展

RK3588是瑞芯微旗下最新的8K旗舰SoC芯片,采用ARM架构,集成了四核Cortex-A76和四核Cortex-A55, 经过实测,相比上一代旗舰芯片运算能力有3.5倍的全面升级,此外,GPU采用的ARM Mali-G610 架构性能也得到了6倍的提升,支持8K视频编解码,四屏异显,再加上6 TOPS超高算力的NPU为复杂场景离线AI计算多路视频流分析提供可能。高集成度:集成HDMI/HDMI IN/LVDS/MIPI/eDP/V-by-one/以太网/WIFI/BT于一体,简约超薄。

isoftstone_HOS的博客 7602

OpenHarmony RK3568开机加速实战:从21秒到16.5秒的优化日记

本文详细记录了OpenHarmony在RK3568开发板上的开机加速优化过程,从初始21秒降至16.5秒的关键步骤。通过分析init进程阻塞、文件系统检查和熵池不足等问题,提出异步执行、预置熵值生成器等解决方案,并分享服务启动优化和启动动画调整的实战经验,为嵌入式系统性能优化提供实用参考。

weixin_30296405的博客 394

(新)25 RK3568平台开发系列:高效性能优化策略

性能优化在RK3568平台开发中至关重要。通过合理的代码优化、编译优化、内存管理、多线程和并发、以及I/O优化等策略,您可以提高系统性能,提供更好的用户体验。同时,使用性能分析工具可以帮助您识别问题和瓶颈,进一步改进性能。希望本文的内容能够帮助您更好地理解和应用性能优化策略,确保您的RK3568平台项目取得成功。

一直在水些技术小文 850

普法OpenHarmony送显流程

OpenHarmony送显流程分析OpenHarmony送显流程分析引言本文档主要记录OpenHarmony在渲染完成之后如何进行合成和送显流程的。这个过程牵涉的代码很多,而且流程也是比较繁琐的。所以我一定要坚持下来。千万不能半途而废,也不要想着一口气吃出一个胖子,路漫漫其修远兮吾将上下而求索!一. 应用端发送NextVSnc请求,服务端响应还记得那年大明湖畔的夏雨荷吗!

IT先森 5794

全志linux平台开机启动时间优化(2)常规优化方法总结

前言 这篇主要是一些其它的优化方法总结, 以及上篇未写完的....; (1)开机启动优化除了上篇写的针对一些大模块的优化,还有很多可以尝试的地方,根据自身的需求、时间、产品等有不同程度的优化,这里写的很多方法比较零散、杂乱,有一些我并未试验过,感兴趣的可以都试试 (2)启动优化自我感觉没有终点,只有极致or更极致 常规优化方法总结 1.提高ddr时钟 虽然提高ddr时钟会...

jzwjzw19900922的博客 1861

OpenHarmony 3D显示框架详解

由于 Mesa 3D 的 API 是和 OpenGL 相同,具体的 OpenGL 版本浏览 Mesa 3D 官方网站,我们可以这么认为它就是 OpenGL 的软件模拟,GPU 光栅处理器的一个实现。但是支持3D的显示扩展,我们可以使用OpenGL进行3D显示,Mesa库编译到OpenHarmony后,我们就可以使用OpenGL的2D,3D功能了,利用Openharmony里边Mesa3D,可以用OpenGL ES 接口在OpenHarmony里写3d的程序或者游戏。

程序猿老樊的博客 7438

RK3568平台开发系列讲解(系统优化篇)系统卡顿了怎么办

📢对用户来说,内存占用高、耗费电量、耗费流量可能不容易被发现,但是用户对卡顿特别敏感,很容易直观感受到。另一方面,对于开发者来说,卡顿问题又非常难以排查定位,产生的原因错综复杂,跟 CPU、内存、磁盘 I/O 都可能有关,跟用户当时的系统环境也有很大关系。

内核笔记 2887

CAN收发器TJA1145A休眠唤醒应用

TJA1145的唤醒工作原理主要依赖于其内部的唤醒机制和外部硬件的配合,主要涉及低功耗状态、选择性唤醒功能。TJA1145是一款CAN收发器,它支持多种工作模式,包括NormalStandbySleep等。在这些模式中,Sleep模式是最低功耗状态,而Normal模式则是最活跃的状态,其中Standby模式处于两者之间,允许一定的功能操作但功耗较低。TJA1145可以通过接收特定的唤醒源从Sleep或Standby模式唤醒到Standby或Normal模式。唤醒源的检测与处理。

radix关于mcu的博客,持续更新中... 5935

OpenHarmony 启动流程优化

平台:润和的rk3568分支:openharmony release 3.2​ 目前rk3568的开机时间有21s,统计的是关机后从按下power按键到显示锁屏的时间,当对openharmony的系统进行了裁剪子系统,系统app,禁用部分服务后发现开机时间仅仅提高到了20.94s 优化微乎其微。在对init进程的log进行分析并解决其中的时间断层后 开机时长优化到了16.5s左右,可以说是一个非常大的进步了,下面详细讲一下优化的过程。

weixin_44205232的博客 2675

从零到一:ArduPilot无人船PID调参实战指南

本文详细介绍了ArduPilot无人船PID调参的实战指南,从基础参数设定到高级调参技术,帮助用户掌握水面环境下的PID控制逻辑。通过案例分析和参数示例,解决无人船在空载、负载变化及不同水域环境中的航行问题,提升无人船的稳定性和精确度。

weixin_29266647的博客 500

OpenHarmony开源鸿蒙开发之旅

OpenHarmony开源鸿蒙开发之旅

LoongEmbedded的专栏 1624

基于Java的高校校园点餐系统

本文介绍了一个基于Java技术开发的高校校园点餐系统,该系统以B/S结构为基础,采用MySQL作为数据库,实现了一个高效、便捷的在线点餐平台。系统主要面向三类用户:管理员、用户和食堂工作人员,提供包括用户管理、食堂管理、菜单管理、订单管理等在内的多项功能。通过系统的具体测试,验证了其可行性和有效性,为高校师生提供了一个科学化、系统化的点餐服务。高校校园点餐系统的开发和实现,不仅提高了校园餐饮服务的效率和质量,也为师生提供了一个更加便捷的点餐体验。

a632341031的博客 832

Hermes 教程 05:多 Agent 编排

本文介绍了Hermes v0.13.0中的四种多Agent协作模式:1)delegate_task快速子任务模式,适合2-3个独立并行任务;2)spawn子Agent模式,实现零成本并行多步流水线;3)tmux交互子Agent模式,支持长期自主任务;4)全新Kanban看板系统,提供持久化AI团队协作框架。各模式在隔离级别、时长、工具访问和适用场景上存在差异,其中spawn模式通过独立上下文窗口实现零上下文成本。文章详细说明了每种模式的使用方法、限制条件和典型应用场景,并提供了具体代码示例和可视化流程图。K

程序猿_三产 519

OpenHarmony系统解决方案 - 配置屏幕方向导致开机动画和Launcher显示异常

配置设备默认方向,例如修改为横屏显示,修改文件display_manager_config.xml的buildInDefaultOrientation参数值为2(Orientation::HORIZONTAL),系统启动后开机动画横竖屏切换,Launcher显示异常。

TiZizzz 2268

【Claude】Invalid API key 无效密钥报错已解决

API 拒绝了你提供的 key。最高频的根因是老的/被撤销的 key 藏在某处自动加载的配置文件里,而你对此不知情。→ 检查所有可能注入 key 的来源(.env.envrc、shell 配置、IDE 设置、)→ 清除无效来源 → 用/status验证。参考:Claude Code 官方《错误参考》"身份验证"章节、社区 Invalid API key 排查记录。

博客 7895

OpenHarmony系统解决方案 - 锁屏引起的卡开机动画

设备接通电源,开机动画正常播放结束,长时间静止在开机动画结束界面,无法正常进入系统。

TiZizzz 2066

OpenClaw终于有了图形界面,一键安装使用你的24小时AI 研究助手!

ClawX是连接强大 AI 智能体与普通用户之间的桥梁。基于OpenClaw构建,它将命令行式的 AI 编排转变为易用、美观的桌面体验——无需使用终端。无论是自动化工作流、连接通讯软件,还是调度智能定时任务,ClawX 都能提供高效易用的图形界面,帮助你充分发挥 AI 智能体的能力。ClawX 预置了最佳实践的模型供应商配置,原生支持 Windows 平台以及多语言设置。当然,你也可以通过设置 → 高级 → 开发者模式来进行精细的高级配置。

Maynor的博客 3372

后仿真中《SDF反标必懂连载篇》之 探究 SDF延迟精度 与 timescale 精度问题

本篇文章,同样属于后仿真中的SDF反标系列文章内容之一。今天,将前仿真中的timescale 和 后仿真中 timescale+sdf 延迟数据,进行贯通讲解。不要忽视这部分内容,因为后仿真的成功准确与否,时间精度问题,很重要。为什么?接下来一一讲解。

那么菜的博客 2302

OpenHarmony(12) —— 入手RK3588?

RK3588来研究OHOS?

god 1510

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 387

RK3288 开机时间和开机速度优化安卓系统优化

1.dalvik.vm.heapstartsize=8m,改为=4M后重开机 光待机其况下你就会发现使用中内存变少了,可用内存变多了,虽然你在使用桌面小工具时候 可能不会比当初还要顺,因为系统还在帮该程式划分新的内存空间,但也不至于顿 2.dalvik.vm.heapgrowthlimit=64m不用改,现在的app在前景中都吃很大内存 若改小成32m,那假设程序内存要吃到40m才会够用,该程式可能就当给你看 3..dalvik.vm.heapsize=256m(单个虚拟机可分配的最大内存256m),虽

liushengdi110的专栏 6200

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

openharmony适配HDF编译进Linux内核

本文档基于OpenHarmony 5.0.2 Release版本,在OrangePi 5 Max开发板(极小尺寸的RK3588开发板)上,实现HDF框架的uart串口适配。

weixin_62941746的博客 1802

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: OpenHarmony南向开发:基于ArkUI框架开发—图片模糊处理的实现
下一篇: OpenHarmony南向开发:如何切换横竖屏?
那只斑马不睡觉
博客等级 码龄9年 4824粉丝 1589原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值