精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

嵌入式 Linux 啟動時間優化實戰,2.41 秒啟動應用!

系統 Linux
近日看了一個關于啟動優化的講座,簡單總結一下。本文的目標是嘗試一些比較簡單有效的方法,并不會覆蓋所有的優化技巧。

目標系統

硬件:

Beagle Bone Black (Cortex A8)

USB 攝像頭 + LCD

軟件

Linux 5.1 + Buildroot rootfs

FFmpeg,用于采集視頻并解碼到 LCD。

當前啟動時間

從上電到 LCD 顯示第一幀圖像:9.45 秒


1、優化編譯器

ARM vs Thumb2

比較基于 ARM 或者 Thumb2 指令集編譯出來的系統和應用。

ARM:rootfs 為 3.79 MB,ffmpeg 為 227 KB。

Thumb2:3.10 MB (-18 %),183 KB (-19 %)。

性能方面:Thumb2 的性能明顯略有提升 (約小于 5 %)。

雖然性能有所提升,但是我個人還是會選擇 ARM 指令集。

musl vs uClibc

Buildroot 里有 3 種 C庫可以選擇:glibc、musl、uClibc,這里我們只比較后面 2 種比較小巧的庫。

musl:680 KB (統計 /lib 目錄)。

uClibc:570 KB (-16 %)。

uClibc 節省了 110 KB,我們選擇 uClibc。

2、優化應用程序

我們可以通過 ./configure 對 FFmpeg 的功能組件進行選擇。

另外,還可以用 strace 和 perf 命令調試以優化 FFmpeg 的內部d代碼。

優化后的結果:

文件系統:從 16.11 MB 縮小到 3.54 MB (-78 %)。

程序的加載和運行時間:縮短 150 ms。

整體啟動時間:縮短 350 ms。

在空間的優化很大,但是在啟動時間上的優化很小,這是因為 Linux 運行程序時只加載程序的必要部分。


3、優化 Init 和根文件系統

思路:

使用 bootchartd 分析系統啟動并裁剪不必要的服務。

將 /etc/init.d/ 下的啟動腳本合并為一個。

不掛載 /proc 和 /sys。

裁剪 BusyBox,文件系統越小,內核掛載可能會越快。

將 Init 程序替換成我們的應用程序。

靜態編譯應用程序。

裁剪掉不常用的文件,找出長時間不訪問的文件:

$ find / -atime -1000 -type f

優化后的結果:

文件系統:裁剪 Busybox 后,從 3.54 MB 縮小到 2.33 MB (-34 %)。

啟動時間:基本沒改變,大概是因為文件系統本身就足夠小了。

使用 initramfs 作為 rootfs:

一般情況下,Linux 系統會先掛載 initramfs,init ramfs 很小且位于內存中,再由 initramfs 負責負載根文件系統。

當我們將 Buildroot rootfs 裁剪得很小時,就可以考慮直接將其作為 initramfs 使用。

這樣有什么好處呢?

initramfs 可以和 Kernel 拼接在一起,Bootloader 負責將 Kernel+initramfs 加載到內存中,內核不再需要訪問磁盤。

內核不再需要 block/storage 和 filesystem 相關的功能,體積會變得更小,加載時間和初始化時間都會變小。

注意,需要關閉 initramfs 的壓縮(CONFIG_INITRAMFS_COMPRESSION_NONE)。

優化后的結果:

即便禁用了 CONFIG_BLOCK 和 CONFIG_MMC 后,總啟動時間仍多了 20ms。這可能是因為 Kernel + initramfs 拼在一起之后,內核變大了許多,而內核鏡像是需要解壓,解壓的時間增多了。

4、優化內核

評估方法:

在啟動參數里添加 initcall_debug,能得到更多內核 log:

3.750000] calling ov2640_i2c_driver_init+0x0/0x10 @ 1
3.760000] initcall ov2640_i2c_driver_init+0x0/0x10 returned 0 after 544 usecs
3.760000] calling at91sam9x5_video_init+0x0/0x14 @ 1
3.760000] at91sam9x5-video f0030340.lcdheo1: video device registered @ 0xe0d3e340, irq = 24
3.770000] initcall at91sam9x5_video_init+0x0/0x14 returned 0 after 10388 usecs
3.770000] calling gspca_init+0x0/0x18 @ 1
3.770000] gspca_main: v2.14.0 registered
3.770000] initcall gspca_init+0x0/0x18 returned 0 after 3966 usecs
...

另外,可以用 scripts/bootgraph.pl 將 dmesg 的信息轉換成圖片:

$ scripts/bootgraph.pl boot.log > boot.svg

接下來,找出消耗時間最多的環節,進行優化。

裁掉 tracing

在 Kernel hacking 里關閉 Tracers 相關的功能。

啟動時間:縮短 550ms。

內核大小:縮小 217KB。

裁掉一些用不上的硬件功能

omap8250_platform_driver_init() // (660 ms)
cpsw_driver_init()  // (112 ms)
am335x_child_init() // (82 ms)
...

預設 loops per jiffy

在每次啟動時,內核都會校準 delay loop 的值,用于 udelay() 函數。

這會測量 loops per jiffy (lpj) 的值。我們只需要啟動一次內核,在log 查找 lpj 值:

Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)

然后將 lpj=4980736 填寫到啟動參數中,即可:

Calibrating delay loop (skipped) preset value.. 996.14 BogoMIPS (lpj=4980736)

大約縮短了 82 ms。

禁用 CONFIG_SMP

SMP 的初始化很慢。它通常在默認配置中是啟用的,即使是一個單核 CPU。

如果我們的平臺是單核的,可以禁用 SMP。

關閉后,內核縮小:-188 KB (-4.6 %),啟動時間縮短 126ms.

禁用 log

啟動參數里添加 quiet,啟動時間縮短 577 ms。

禁用 CONFIG_PRINTK 和 CONFIG_BUG 后,內核縮小 118 KB (-5.8 %) 。

禁用 CONFIG_KALLSYMS 后,內核縮小 107 KB (-5.7 %) 。

合計,啟動時間縮短 767 ms。

開啟 CONFIG_EMBEDDED 和 CONFIG_EXPERT

這會讓系統調用變得更精簡,內核會變得沒那么通用,但是能保持你的應用程序能運行就足夠了。

內核縮小 51 KB。

啟動時間縮短 34 ms。

選擇 SLAB memory allocators

一般是 SLAB、SLOB、SLUB 三選一。

SLAB:默認選擇,最通用、最傳統、最可靠。

SLOB:更簡潔,代碼量更少,更節省空間,適合嵌入式系統,使能后,內核縮小 5 KB,但是啟動時間增加 1.43 S!

SLUB:更合適大型系統,使能后,啟動時間增加 2 ms。

因此,我們仍使用 SLAB。

內核壓縮方式

不同壓縮方式的特點如下:

實測效果:

看起來,gzip 和 lzo 表現更好。測試的效果應該是和 CPU/磁盤 的性能相關的。

內核編譯參數

使能 CONFIG_CC_OPTIMIZE_FOR_SIZE,該選項可能是用 gcc -Os 代替 gcc -O2。

點擊查看大圖

注意,這只是在 BeagleBone Black + Linux 5.1 上的測試結果,不同平臺之間有差異。

禁用 /proc 等偽文件系統

要考慮應用的兼容性。

ffmpeg 依賴 /proc ,所以只能關閉一些 proc 相關的選項:CONFIG_PROC_SYSCTL、CONFIG_PROC_PAGE_MONITOR CONFIG_CONFIGFS_FS,啟動時間沒有變化。

關閉 sysfs, 啟動時間縮短 35 ms。

拼接 DTB

啟用 CONFIG_ARM_APPENDED_DTB:

$ cat arch/arm/boot/zImage arch/arm/boot/dts/am335x-boneblack-lcd4.dtb > zImage

$ setenv bootcmd 'fatload mmc 0:1 81000000 zImage; bootz 81000000'

啟動時間縮短 26 ms。

5、優化 Bootloader

這里我們采用最好的方案:使用 Uboot Falcon mode。

Falcon mode 只執行 Uboot 的第一階段:SPL,然后跳過 Stage 2,執行加載 Kernel。

啟動時間縮短 250 ms。

總結

到此,啟動優化基本完成,最終效果如下:

[0.000000 0.000000]
[0.000785 0.000785] U-Boot SPL 2019.01 (Oct 27 2019 - 08:04:06 +0100)
[0.057822 0.057822] Trying to boot from MMC1
[0.378878 0.321056] fdt_root: FDT_ERR_BADMAGIC
[0.775306 0.396428] Waiting for /dev/video0 to be ready...
[1.966367 1.191061] Starting ffmpeg
...
[2.412284 0.004277] First frame decoded

從上電到 LCD 顯示第一幀圖像,總時間為 2.41 秒。

最有效果的步驟如下

點擊查看大圖

仍值得優化的空間

系統花了 1.2 秒等待 USB 攝像頭的枚舉,這里是否有辦法加速?

是否可以關閉 tty 和終端登錄?

最后,關于優化啟動時間,有一些原則可以遵循

請不要過早地進行優化。

從一些影響面最小的點開始優化。

從 rootfs 、kernel、bootloader 自上而下進行優化。

重點關注短板。

責任編輯:龐桂玉 來源: 運維派
相關推薦

2009-02-17 15:07:47

嵌入式Linux啟動信息注釋

2020-02-12 08:50:05

Linux命令啟動時間

2009-04-22 21:24:14

Bootsplash嵌入式啟動畫面

2013-03-04 10:20:23

JVM優化eclipseJVM

2009-02-18 16:34:32

優化Windows啟動時間

2013-03-04 10:59:47

eclipseJVM

2009-04-11 15:22:24

Linux 2.6內核應用

2011-01-14 13:13:23

嵌入式Linux開發

2018-05-21 08:52:15

Linux應用程序啟動時間

2025-03-27 00:14:10

2012-07-30 14:13:11

Linux 2.6內核嵌入式

2024-05-31 14:06:55

SpringCDSGraalVM

2009-12-09 10:12:28

嵌入式Linux

2009-12-16 15:41:40

嵌入式Linux入門

2009-12-17 10:33:05

嵌入式Linux

2018-07-10 09:47:11

Linux內核階段

2018-05-02 16:34:56

EAF嵌入式框架

2017-12-25 13:51:32

LinuxUbuntu LinuLXD容器

2009-12-23 16:52:26

Linux自學嵌入式

2009-12-09 10:50:53

嵌入式Linux
點贊
收藏

51CTO技術棧公眾號

日本一区二区三区视频在线看 | 蘑菇福利视频一区播放| 亚洲人成亚洲人成在线观看| 亚洲欧美日韩一级| 久久五月精品中文字幕| 国产蜜臀97一区二区三区| 亚洲自拍中文字幕| 台湾佬中文在线| 亚洲精品电影| 亚洲天堂成人在线视频| 永久看看免费大片| 欧美影视资讯| 亚洲成a人片在线观看中文| 日韩亚洲欧美精品| 姝姝窝人体www聚色窝| 老司机精品视频一区二区三区| 久久久中文字幕| 国产wwwwxxxx| 国产精品一在线观看| 精品久久久久久久久久久久久久久 | 欧美aaaxxxx做受视频| 2021久久国产精品不只是精品| 国产伊人精品在线| 91丨九色丨海角社区| 伊人久久亚洲美女图片| 久热精品视频在线观看一区| 欧美大波大乳巨大乳| 成人在线视频你懂的| 9191国产精品| 久久国产这里只有精品| 在线看片福利| 五月综合激情网| 996这里只有精品| 黄色网页网址在线免费| 国产精品伦理一区二区| 日本免费高清一区二区| 婷婷开心激情网| 成人精品国产免费网站| 91免费看网站| 精品国产无码一区二区| 国产真实乱对白精彩久久| 国产精品视频色| 成人毛片一区二区三区| 日韩精品乱码免费| 国产不卡av在线免费观看| 免费看一级视频| 国产欧美91| 91高清视频免费| 国产一级18片视频| 麻豆精品网站| 国产精品成人av性教育| 在线观看黄色国产| 久久超碰97中文字幕| 国产精品一区二区久久久| 又骚又黄的视频| 精品一区二区三区免费播放| 国产一区视频在线播放| 国产人妖在线播放| 成人一区二区三区视频| 国产伦精品一区二区三区视频黑人| 午夜精品久久久久久久99 | 亚洲在线免费观看| 性做久久久久久久| av亚洲产国偷v产偷v自拍| 国产欧美一区二区三区不卡高清| 天堂网av2014| 久久久精品国产99久久精品芒果 | a级一a一级在线观看| 精品久久对白| 亚洲欧美一区二区三区久久| 亚洲AV无码成人精品区明星换面 | 大西瓜av在线| 高清视频在线观看三级| 在线国产电影不卡| 久久久久久久久久一区| 91精品入口| 亚洲男子天堂网| 五月天免费网站| 欧美成人综合| 日本sm极度另类视频| 91精品视频免费在线观看| 国产成人午夜电影网| 久久久水蜜桃| 免费黄色网页在线观看| 亚洲午夜久久久| 99视频免费播放| 麻豆国产一区| 亚洲欧美中文另类| 国产精品丝袜一区二区| 亚洲国产91| 国产精品视频不卡| 亚洲精品一区二区三区不卡| 久久欧美中文字幕| japanese在线视频| 美女视频在线免费| 7777精品伊人久久久大香线蕉最新版| 黄色国产在线视频| 青青草91久久久久久久久| 国产综合在线看| 亚洲自拍偷拍另类| 91视频国产资源| 超碰97在线看| 日韩精选视频| 亚洲国产日韩精品在线| 国产亚洲精品久久久久久豆腐| 伊人成年综合电影网| 成人春色激情网| 欧美日韩免费做爰大片| 一区二区三区在线看| 亚洲娇小娇小娇小| 色狼人综合干| 欧美黄网免费在线观看| 亚洲一区二区激情| 2019国产精品| av免费观看大全| 午夜视频一区二区在线观看| 色偷偷av一区二区三区乱| 欧美激情黑白配| 盗摄精品av一区二区三区| 一区二区精品国产| 一呦二呦三呦精品国产| 国产视频在线观看一区二区| 国产在线观看免费视频今夜| 国产制服丝袜一区| 亚洲欧洲国产日韩精品| 日本h片久久| 亚洲精品在线91| 中文字幕一区二区三区精品| 国产成人精品综合在线观看 | 日韩图片一区| 999在线观看免费大全电视剧| 欧美成年黄网站色视频| 欧美日韩一区视频| 中文字幕第24页| 日韩高清在线一区| 日本一区二区高清视频| 你懂得影院夜精品a| 亚洲人成在线观看网站高清| www.久久久久久久| 久久蜜桃一区二区| av天堂永久资源网| 精品中文字幕一区二区三区av| 欧美有码在线观看视频| 色就是色亚洲色图| 日本道精品一区二区三区| 久久丫精品忘忧草西安产品| 久久香蕉精品| 日韩精品电影网站| 成人在线黄色| 日韩专区中文字幕| 国产美女三级无套内谢| 亚洲男人的天堂在线观看| 一个色综合久久| 中文视频一区| 电影午夜精品一区二区三区 | 精品久久久久久久久久久久久 | 色婷婷综合网站| 欧美国产一级| 亚洲伊人久久综合| 免费av不卡在线观看| 精品国产一区二区三区忘忧草 | 日韩影院精彩在线| 日韩精品不卡| www欧美在线观看| 久久青草福利网站| 久草福利在线视频| 欧美日本在线播放| 黄色一级视频免费观看| 97久久超碰国产精品| 中文字幕第80页| 国产精品久久久久久久久妇女 | 九九综合九九| 国产噜噜噜噜噜久久久久久久久| 黄色av网站在线播放| 精品毛片乱码1区2区3区 | 亚洲欧美不卡| 手机看片福利永久国产日韩| 国产一区2区在线观看| 亚州精品天堂中文字幕| 成人免费在线电影| 日韩区在线观看| 中文字幕国产在线观看| 亚洲欧美日本在线| 中文字幕狠狠干| 精品一区二区三区免费观看 | 日本污视频在线观看| 国产午夜亚洲精品理论片色戒| 加勒比av中文字幕| 国产日韩精品视频一区二区三区 | 老司机99精品99| 亚洲国产精品va| 国产精品人人爽| 欧美性极品少妇精品网站| 很污很黄的网站| 久久香蕉国产线看观看99| 91女神在线观看| 国产亚洲欧洲| 97av中文字幕| 精品国产91久久久久久浪潮蜜月| 91在线看www| 日产精品一区| 97视频国产在线| www在线免费观看视频| 亚洲欧美日韩网| 日本黄色免费视频| 欧美顶级少妇做爰| 亚洲黄网在线观看| 婷婷综合另类小说色区| 强制高潮抽搐sm调教高h| 久久蜜臀精品av| 无码任你躁久久久久久老妇| 激情六月婷婷综合| 国产无套粉嫩白浆内谢的出处| 亚洲大片av| 精品嫩模一区二区三区| 欧美精品色图| 久久久一本精品99久久精品66| 国产一区二区三区免费观看在线 | 精品国产一区二区三区香蕉沈先生 | 欧美激情国产精品| 精品视频在线一区二区| 在线观看日韩专区| 国产大片在线免费观看| 亚洲精品影视在线观看| 天堂网av在线播放| 欧美精品一区二区三区蜜臀| 性生活三级视频| 欧美精品久久99| 又污又黄的网站| 欧美丝袜自拍制服另类| 国产精品第六页| 日本韩国一区二区三区| 日本韩国欧美中文字幕| 精品欧美一区二区三区| 麻豆久久久久久久久久| 午夜精品在线视频一区| 国产午夜福利片| 亚洲第一av色| 亚洲综合一二三| 精品福利在线视频| 狠狠躁夜夜躁人人爽天天高潮| 亚洲一二三四在线| 国产精品成人av久久| 亚洲自拍偷拍欧美| 日韩手机在线观看| 欧美日韩国产综合新一区| 日韩黄色三级视频| 欧美日韩亚洲一区二区三区| 男人日女人网站| 欧美性猛片xxxx免费看久爱| 国产乱码在线观看| 欧美另类videos死尸| 亚洲中文字幕在线一区| 欧美一区二区三区男人的天堂 | 国产一区二区三区高清在线观看| 男人av在线| 在线国产精品播放| 超碰在线网址| 久久欧美在线电影| 唐人社导航福利精品| 国产精品免费久久久久影院| 成人亚洲精品| 好吊色欧美一区二区三区视频| 天海翼亚洲一区二区三区| 日韩精品欧美专区| 午夜国产一区二区| 免费看毛片的网址| 久久人人超碰| 伦伦影院午夜理论片| 成人av电影免费在线播放| 国产毛片久久久久久久| 中文字幕在线观看不卡视频| 久草免费新视频| 色综合天天做天天爱| 一级片在线观看视频| 精品黑人一区二区三区久久| 欧美精品少妇| 久久夜色精品国产欧美乱| 97人澡人人添人人爽欧美| 国产精品高清免费在线观看| 亚洲va欧美va人人爽成人影院| 麻豆av一区二区三区久久| 色婷婷热久久| 久久久久久久久久久视频| 久久精品国产第一区二区三区| 岛国精品一区二区三区| 久久精品男人天堂av| 国产一级视频在线| 欧美三电影在线| 日韩一级在线播放| 最近中文字幕日韩精品| 99爱在线视频| 成人久久久久久| 亚洲福利天堂| 国产女人18毛片| 免费成人性网站| 一级国产黄色片| 亚洲美女区一区| 懂色av蜜臀av粉嫩av喷吹| 精品日韩av一区二区| 午夜激情在线观看| 66m—66摸成人免费视频| 国产在线一区不卡| 日本高清一区| 国产欧美三级| 国产精品一区二区在线免费观看| 国产精品国产三级国产| 国产又粗又爽视频| 精品国产乱码久久久久久图片| 1024国产在线| 国产mv免费观看入口亚洲| 国产欧美一区二区三区米奇| 日本美女爱爱视频| 毛片一区二区三区| 国产综合精品在线| 黑人精品xxx一区一二区| 午夜久久久久久噜噜噜噜| www.99久久热国产日韩欧美.com| 电影一区电影二区| 久久久人人爽| 亚洲欧美高清| 在线免费播放av| 亚洲第一av色| 蜜桃av中文字幕| 欧美大片免费观看| 日本在线一区二区三区| 国产成人精品免费看在线播放 | 一级毛片视频在线观看| 国产成人精品国内自产拍免费看| 欧美18免费视频| 少妇av一区二区三区无码| 成人一级黄色片| 久久久久无码国产精品不卡| 欧美一区二区免费视频| 毛片激情在线观看| 91久久久久久久久| 亚洲精品一区二区妖精| 老司机久久精品| 亚洲欧美日韩中文播放| 国产三级按摩推拿按摩| 久久亚洲精品一区二区| 超碰国产精品一区二页| 中文字幕久久一区| 精品一二三四在线| 一区视频免费观看| 欧美v亚洲v综合ⅴ国产v| 免费看电影在线| 久久久久久久久久久一区 | 国产极品精品在线观看| 欧美伦理影院| 日本黄色福利视频| 亚洲精品免费电影| 亚洲精品一区二区三区新线路 | 日本一区二区三区中文字幕| 一区二区三区四区欧美| 国产一区欧美二区| 久久免费黄色网址| 日韩av影片在线观看| 97成人资源| 亚洲综合av一区| 国产精品一区二区久久不卡 | 91激情五月电影| 91吃瓜网在线观看| 亚洲自拍av在线| 亚洲综合丁香| 成人黄色a级片| 日韩午夜电影在线观看| av手机在线观看| 日日噜噜噜噜夜夜爽亚洲精品| 狠狠色综合日日| 国产对白videos麻豆高潮| 亚洲欧洲在线观看| 午夜精品久久久久久毛片| 嫩草影院中文字幕| 久久久亚洲国产美女国产盗摄| 一级特黄aaa大片在线观看| 久操成人在线视频| 少妇精品久久久一区二区三区| 日本三级黄色网址| 午夜精品视频一区| 中文日本在线观看| 精品国产乱码久久久久久88av | 亚洲天堂久久| 小早川怜子久久精品中文字幕| 欧美一区二区久久久| 乡村艳史在线观看| 欧美性受黑人性爽| 91麻豆蜜桃一区二区三区| 国产三级伦理片| 日本欧美一级片| 欧美午夜视频| 欧美日韩生活片| 亚洲高清久久网| 成人亚洲精品| 四虎永久在线精品无码视频| 亚洲美女屁股眼交3| 岛国在线大片| 国产精品区二区三区日本| 免费高清视频精品| 手机在线看片1024|