Linux下啟動時間優化專題

2021-09-28 23:05:14 字數 1923 閱讀 9958

linux下啟動時間優化專題

陸陸續續在linux進行啟動時間優化,之前有兩份文件,分別從核心和使用者空間兩個方向進行了優化。

《android/linux boot time分析優化》和《busybox下bootchart的使用》。

簡單總結如下:

system:在支援busybox的bootchartd的環境下(包括android),使用pybootchartgui進行分析。對ubuntu平台,直接使用systemd-analyze進行分析。

之前做的這些工作,似乎都就具體問題而進行。但是沒有進行總結歸納,形成方**來指導將來的工作。

預載入技術有preload、prelink、readahead;prealod相關幫助文件preload.pdf,作者官網 code。

preload作為守護程序,記錄程式的使用統計資訊,或者經常使用的檔案;在計算機空閒的時候,將其載入到ram中。這樣在程式或檔案被使用的時候執行速度就會非常快。

preload長和prelink配合使用。

正如所有的優化從量化開始,analyzing the boot process

分析有systemd-analyze、systemd-bootchart、bootchart2(pybootchartgui)三種方法。

優化的步驟有:定製自己的kernel;initramfs啟動;提前啟動某些服務(systemctl enalbe ***x);盡量少的log輸出;suspend到ram而不是disk。

boot time是使用者開啟裝置的第一觀感,涉及到很重要的使用者體驗。此wiki基本上算是boot time的

boot流程從bootrom->bootloader->kernel->android的過程,以及如何度量每個階段的時間。

如何修改init使能bootchart,基於bootchart.tgz生成圖表。在圖表中檢視每個程序的耗時,作出針對修改。

介紹了android使用者空間啟動優化。

android下使用bootchart的教程,需要修改init支援。

介紹了firmware、kernel、user space,重點分析了android bootup流程,主要在使用者空間。

裡面的關於kernel和android user space的優化點值得重視。

bootchart的官網,介紹了bootchart工具,以及bootchart分支:timechart、bootchart-lite、ubootchart、embootchart、busybox。

泛泛的介紹了android中常用的測量啟動時間的工具和方法。

message loggers: grabserial, printk times, logcat.

bootchart, strace, ftrace, method tracer…

通過grabserial去獲取log資訊,分析bootloader、kernel、user space耗時。

基於systemd進行啟動時間優化,一些方法值得參考。如果系統使用systemd,非常方便。

使能printk.time=1和initcall_debug,然後獲取dmesg.log資訊。

使用bootgraph.pl、flamegraph、gnuplot、histogram.sh進行分析。

iOS APP啟動時間優化

第乙個階段 程式啟動到main函式。第二個階段 main函式到顯示第乙個介面。1.載入可執行檔案。2.載入動態鏈結庫。3.objc 執行時的初始處理,包括 objc 相關類的註冊 category 註冊 selector 唯一性檢查等。4.初始化,包括了執行 load 方法 建立 c 靜態全域性變數...

Uboot Linux啟動時間優化

裝置啟動時間往往是專案立項時的一項重要技術指標。快速的啟動時間意味著裝置宕機時間的縮短,系統的快速恢復,也能改善使用者使用時的體驗感受,是一項重要的市場競爭力。優化啟動時間之前,我們首先要了解下我們裝置的主要啟動流程,如下圖所述,裝置啟動流程主要包含 硬體 bootloader 作業系統和應用程式 ...

容器啟動時間的優化

spring的ioc容器預設在啟動時載入整個物件例項圖,只要配置根元素beans的default lazy init true 就能讓spring不載入整個物件例項圖。特別要注意的是 spring封裝quartz類class org.springframework.scheduling.quartz...