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 <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包。原始碼下載地址 。
下圖為 bootchart 生成的 OpenHarmony效能視覺化檢視。
總結
透過本篇文章介紹,您對OpenHarmony標準系統下效能最佳化的功能應該有了初步的瞭解。如果您對本篇文章內容感興趣,可以根據本篇文章介紹進行研究和使用。同時也歡迎更多開發者與我們共享開發成果,分享技術解讀與經驗心得。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011554/viewspace-2944627/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播預告|OpenHarmony標準系統多媒體子系統之相機解讀
- 直播預告丨 OpenHarmony 標準系統多媒體子系統之相機解讀
- 直播預告丨OpenHarmony標準系統多媒體子系統之視訊解讀
- 瑞芯微RK3566開發板OpenHarmony標準系統應用相容性測試指導
- 標準io和系統io的辨析
- CRM系統好用的標準有哪些?
- weblogic JDBC標準化效能最佳化WebJDBC
- OpenHarmony系統使用gdb除錯init除錯
- Win10系統怎麼最佳化讓開機加速_win10開機最佳化加速的方法Win10
- Facebook開源分散式系統的NTP時間校準器分散式
- 準實時異常檢測系統
- (建議收藏)OpenHarmony系統能力SystemCapability列表
- win10系統開不了機黑屏時間長安全模式進不去如何解決Win10模式
- 模型剪枝:剪枝粒度、剪枝標準、剪枝時機、剪枝頻率模型
- Linux 獲取系統開機/啟動時間Linux
- 企業CRM系統選型的標準有哪些?
- 【IE知識】最系統、完整的標準工時學習資料;標準作業(SOP)詳解;生產線佈局規劃
- win10 如何檢視開機時長_win10檢視開機時長教程Win10
- 直播帶貨系統開發:如何才能達到高標準的市場水平
- win10系統怎麼最佳化機械硬碟_win10系統最佳化機械硬碟的方法Win10硬碟
- OCP4.2.2 主機標準化檢查系統配置項修復clocksource 報錯
- Win10系統時間不準確的解決方法 Win10系統時間不準怎麼辦?Win10
- OpenHarmony迎來首個網際網路技術統一標準,鴻蒙OS生態能否蓬勃發展?鴻蒙
- Windows API視窗程式設計 - 系統標準按鈕WindowsAPI程式設計
- CRM系統選擇的五個標準及推薦
- 判斷客服系統效果好壞的5個標準
- 系統最佳化
- 計算機Windows系統最佳化小知識計算機Windows
- 標準IO和系統IO的相關知識積累
- CRM管理系統選型技巧——四大考量標準
- 擁有五個特點是CRM系統評判標準
- 谷歌Android正成為物聯網標準作業系統谷歌Android作業系統
- 「Golang成長之路」標準庫之os包Golang
- 「Golang成長之路」標準庫之time包Golang
- 香橙派將推 Orange Pi OS 系統,基於開源鴻蒙 OpenHarmony 打造鴻蒙
- openGauss 支援標準開發介面
- APP開啟(二)—標準流程APP
- windows10系統開機停留在準備windows介面怎麼辦Windows