0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenHarmony標準系統(tǒng)開機時長優(yōu)化

OpenAtom OpenHarmony ? 來源:未知 ? 2023-04-08 02:50 ? 次閱讀

點擊藍字 ╳ 關注我們


開源項目 OpenHarmony
是每個人的 OpenHarmony

戴學躍

深圳市優(yōu)博終端科技有限公司

OpenHarmony知識體系工作組

簡介

萬物互聯時代,產品性能至關重要,而系統(tǒng)啟動時間是系統(tǒng)性能的重要組成部分,因為用戶必須等待系統(tǒng)啟動完成后才能使用設備。對于經常需要進行冷啟動的汽車等設備而言,較短的啟動時間至關重要(沒有人喜歡在等待幾十秒后才能輸入導航目的地),在金融交易設備、電子商務服務器、實時通信設備同樣也有較高的應用場景,那我們該如何在OpenAtom OpenHarmony(簡稱OpenHarmony ) 標準系統(tǒng)現有的能力下,完成秒級開機?本文由深圳市優(yōu)博終端科技有限公司的研發(fā)同學介紹一套關于優(yōu)化OpenHarmony標準系統(tǒng)開機時長優(yōu)化的方案,通過對硬件、Kernel、 Framework的相應優(yōu)化讓系統(tǒng)開機時長盡量縮短。

效果展示

下面給出系統(tǒng)開機時長優(yōu)化前后的對比效果視頻,優(yōu)化前的開機時長在18秒左右,優(yōu)化后的開機時間在7秒左右。



開發(fā)環(huán)境

硬件平臺:RK3588
系統(tǒng)版本:OpenHarmony 3.1 Release
開發(fā)語言:C、 C++

四步帶你體驗OpenHarmony標準系統(tǒng)開機時長優(yōu)化

一、調整硬件資源使用率
調整硬件資源相應配置參數使之盡可能地達到最優(yōu)運行狀態(tài),這里所指的硬件資源是指 RAM、FLASH。

RAM:運存的調優(yōu)需要根據廠商的指導文檔在設備樹文件<.dtsi文件>中進行調整,比如設定運存的時鐘頻率 memory-frequency、
設定內存帶寬 memory-bandwidth、內存時序 memory-timings 等,Kernel 層可以對 swappiness、dirty_ratio、dirty_background_ratio、min_free_kbytes等相應值進行調整,來達到運存的性能調優(yōu)。

FLASH:比如對 physical_block_size 項進行調整,目前 OpenHarmony 采用的文件系統(tǒng)為 ext4,可以在熟悉ext4文件系統(tǒng)后,然后對其中緩存、模式、壓縮、清理等方向進行調優(yōu)。減少KMSG與HiLog 日志輸出,調整其輸出等級。

二、Kernel 啟動時長優(yōu)化
Kernel 啟動階段會進行硬件檢測、驅動加載、文件系統(tǒng)掛載、設置網絡等,其中耗時比較長的基本上為驅動加載,因為這中間會有重復嘗試跟 Sleep 的時間,需要重點關注,在 Kernel 啟動的過程中可以將一些無用的子系統(tǒng)進行裁剪,比如 bootchart。

三、系統(tǒng)框架啟動時長優(yōu)化
在系統(tǒng)層啟動時,需要啟動很多服務,可以采用并行啟動系統(tǒng)必要服務,延遲啟動非必要服務,這些服務從加載到啟動完成、其中比較耗時的有 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;
}
如果發(fā)現加載的單個so文件過大時,可采用多線程分段加載此so 文件。

四、 開機動畫顯示優(yōu)化
優(yōu)化思路大致為進入 bootAnimation 的 main 函數后,將動畫圖片采用數組或者鏈表的方式進行預加載,開啟每秒60幀的刷新率,此處為什么要開60幀,因為如果設定為30幀時,出現掉幀的情況后,會出現肉眼可見的卡頓。當圖片播放完成后,延遲幾百毫秒左右再進入桌面,因為Launcher 加載已安裝的 app ,需要一定的時間。下面是開機動畫優(yōu)化的部分內容 :
1.提高開機動畫、渲染進程優(yōu)先級;
"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);
開機優(yōu)化需要借助一些工具來分析比如串口工具、bootchart 生成的可視化圖表來進行分析。
OpenHarmony 標準系統(tǒng)默認集成了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/目錄下執(zhí)行命令: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標準系統(tǒng)下性能優(yōu)化的功能應該有了初步的了解。如果您對本篇文章內容感興趣,可以根據本篇文章介紹進行研究和使用。同時也歡迎更多開發(fā)者與我們共享開發(fā)成果,分享技術解讀與經驗心得。


原文標題:OpenHarmony標準系統(tǒng)開機時長優(yōu)化

文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 鴻蒙
    +關注

    關注

    57

    文章

    2303

    瀏覽量

    42693
  • OpenHarmony
    +關注

    關注

    25

    文章

    3641

    瀏覽量

    16067

原文標題:OpenHarmony標準系統(tǒng)開機時長優(yōu)化

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AM574x延長開機時間(POH)

    電子發(fā)燒友網站提供《AM574x延長開機時間(POH).pdf》資料免費下載
    發(fā)表于 10-10 09:22 ?0次下載
    AM574x延長<b class='flag-5'>開機時</b>間(POH)

    基于ArkTS語言的OpenHarmony APP應用開發(fā):HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發(fā)。本案例已在OpenHarmony凌蒙派-RK35
    的頭像 發(fā)表于 09-15 08:09 ?280次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用開發(fā):Hello<b class='flag-5'>Openharmony</b>

    AM62x延長開機時間應用說明

    電子發(fā)燒友網站提供《AM62x延長開機時間應用說明.pdf》資料免費下載
    發(fā)表于 09-13 10:01 ?0次下載
    AM62x延長<b class='flag-5'>開機時</b>間應用說明

    瑞芯微RK3566鴻蒙開發(fā)板OpenHarmony標準系統(tǒng)應用兼容性測試指導

    本文OpenHarmony標準系統(tǒng)應用兼容性測試指導,適用鴻蒙系統(tǒng)軟件開發(fā)測試的新手入門學習課程,設備為觸覺智能的瑞芯微RK3566開發(fā)板,型號Purple Pi OH。是Laval官方社區(qū)主薦的一款鴻蒙開發(fā)主板。
    的頭像 發(fā)表于 09-10 11:56 ?295次閱讀
    瑞芯微RK3566鴻蒙開發(fā)板<b class='flag-5'>OpenHarmony</b><b class='flag-5'>標準系統(tǒng)</b>應用兼容性測試指導

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:SafeMap

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的安全關聯容器:SafeMap。OpenHarmony提供了一個線程安全的map實現。SafeMap在STLmap基礎上封裝互斥鎖
    的頭像 發(fā)表于 08-30 12:42 ?270次閱讀
    基于<b class='flag-5'>OpenHarmony</b><b class='flag-5'>標準系統(tǒng)</b>的C++公共基礎類庫案例:SafeMap

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:SafeQueue

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的線程安全隊列:SafeQueue。線程安全隊列,是在dequeue的基礎上封裝std::lock_guard,以此實現線程的相關
    的頭像 發(fā)表于 08-30 12:41 ?226次閱讀
    基于<b class='flag-5'>OpenHarmony</b><b class='flag-5'>標準系統(tǒng)</b>的C++公共基礎類庫案例:SafeQueue

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:SafeStack

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的線程安全隊列:SafeQueue。線程安全隊列,是在dequeue的基礎上封裝std::lock_guard,以此實現線程的相關
    的頭像 發(fā)表于 08-30 12:41 ?269次閱讀
    基于<b class='flag-5'>OpenHarmony</b><b class='flag-5'>標準系統(tǒng)</b>的C++公共基礎類庫案例:SafeStack

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:SafeBlockQueue

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的讀寫鎖:SafeBlockQueue。線程安全阻塞隊列SafeBlockQueue類,提供阻塞和非阻塞版的入隊入隊和出隊接口,并提
    的頭像 發(fā)表于 08-30 12:41 ?243次閱讀
    基于<b class='flag-5'>OpenHarmony</b><b class='flag-5'>標準系統(tǒng)</b>的C++公共基礎類庫案例:SafeBlockQueue

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:SafeStack

    /a28_utils_safestack 2、基礎知識 C++公共基礎類庫為標準系統(tǒng)提供了一些常用的C++開發(fā)工具類,包括: 文件、路徑、字符串相關操作的能力增強接口 讀寫鎖、信號量、定時器、線程增強及線程池等接口
    發(fā)表于 08-21 14:51

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:SafeQueue

    /a27_utils_safequeue 2、基礎知識 C++公共基礎類庫為標準系統(tǒng)提供了一些常用的C++開發(fā)工具類,包括: 文件、路徑、字符串相關操作的能力增強接口 讀寫鎖、信號量、定時器、線程增強及線程池等
    發(fā)表于 08-21 10:56

    請求推薦無需NPU的OpenHarmony標準系統(tǒng)ARM開發(fā)板

    請教一下大佬們,目前的需求是在國產ARM開發(fā)板上跑OpenHarmony標準系統(tǒng),無需NPU/GPU,其它配置(CPU、RAM等)可以盡量高點,價位在2k以內,球球推薦!感謝大佬們!
    發(fā)表于 08-16 16:25

    OpenHarmony標準系統(tǒng)C++公共基礎類庫案例:HelloWorld

    1、程序簡介該程序是基于凌蒙派OpenHarmony-v3.2.1標準系統(tǒng)C++公共基礎類庫的簡單案例:HelloWorld。主要講解C++公共基礎類庫案例如何搭建和編譯。2、程序解析2.1、創(chuàng)建
    的頭像 發(fā)表于 08-13 08:23 ?422次閱讀
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>標準系統(tǒng)</b>C++公共基礎類庫案例:HelloWorld

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:ThreadPoll

    1、程序簡介 該程序是基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫的線程池處理:ThreadPoll。 本案例完成如下工作: 創(chuàng)建1個線程池,設置該線程池內部有1024個線程空間。 啟動5
    發(fā)表于 08-12 11:42

    OpenHarmony開機優(yōu)化

    對其進行詳細的性能分析,從而優(yōu)化系統(tǒng)啟動速度和運行效率。 三丶開機優(yōu)化 開機優(yōu)化的主要目的是為了
    發(fā)表于 07-01 16:39

    鴻蒙OpenHarmony南向:【Hi3516標準系統(tǒng)入門(命令行方式)】

    除小型系統(tǒng)外,Hi3516DV300開發(fā)板還支持標準系統(tǒng)。此章節(jié)簡要介紹如何使用命令行在Hi3516DV300開發(fā)板上進行標準系統(tǒng)的開發(fā)。
    的頭像 發(fā)表于 05-08 09:26 ?798次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>南向:【Hi3516<b class='flag-5'>標準系統(tǒng)</b>入門(命令行方式)】