精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美视频一二区| www欧美com| 91九色综合| 国产精品乱人伦一区二区| 成人淫片在线看| 久久综合色综合| 中文精品一区二区| 欧美乱妇20p| 秋霞无码一区二区| 超碰免费在线观看| 国产精品夜夜嗨| 66m—66摸成人免费视频| 香蕉视频久久久| 久久gogo国模啪啪裸体| 欧美日韩国产在线播放| 午夜视频久久久| 成人av一区二区三区在线观看| 亚洲作爱视频| 色香阁99久久精品久久久| 手机在线观看日韩av| 黄色亚洲网站| 亚洲一区二区视频在线| 欧美日韩在线一区二区三区| 国产女18毛片多18精品| 久久免费高清| 欧美精品aaa| 欧美激情精品久久久久久免费| 999在线精品| 欧美日韩一区三区四区| 欧美视频在线观看网站| 国产不卡在线| 国产精品素人视频| 久久精品magnetxturnbtih| 99国产精品99| 久久99精品久久只有精品| 欧美重口另类videos人妖| 少妇aaaaa| 久久免费大视频| 亚洲欧美一区二区精品久久久| 国产又黄又嫩又滑又白| 精品久久毛片| 在线观看精品一区| 国产成人a亚洲精v品无码| 超碰在线资源| 有码一区二区三区| 一区二区三区在线视频看| 加勒比一区二区三区在线| 不卡视频免费播放| 成人18视频| 一本大道伊人av久久综合| 久久久久久自在自线| 欧美性资源免费| 日本熟妇毛茸茸丰满| 国内精品亚洲| 久久久免费电影| 国产一级特黄视频| 国内精品99| 久久久爽爽爽美女图片| 久久久久久久久97| 激情欧美一区二区三区| 欧美激情免费视频| 日本a在线观看| 国产精品豆花视频| 欧美激情国产高清| 国产亚洲欧美精品久久久久久| 中国精品18videos性欧美| 欧美成人久久久| 国产一级大片在线观看| 国精品一区二区三区| 性欧美办公室18xxxxhd| 国产成人在线免费观看视频| 99在线精品免费视频九九视| 57pao精品| 久久久久久在线观看| 日韩av不卡一区二区| 国产欧美精品一区二区| 99热这里只有精品在线| 成人午夜激情视频| 久久99国产精品| 国产特黄在线| 国产精品灌醉下药二区| 日本美女爱爱视频| 免费av不卡在线观看| 亚洲成人第一页| 狠狠热免费视频| 高清国产一区二区三区四区五区| 日韩色在线观看| 粉嫩av懂色av蜜臀av分享| 一区二区三区日本久久久 | 国产色视频在线| 岛国一区二区在线观看| 欧洲一区二区在线观看| 国产网友自拍视频导航网站在线观看 | 3p视频在线观看| 有码一区二区三区| 国产午夜伦鲁鲁| 欧美在线se| 亚洲第一综合天堂另类专| 久操视频免费看| 一区二区三区网站| 秋霞av国产精品一区| 国产精品一区二区三区在线免费观看| 成人av第一页| 亚洲综合av一区| h片在线观看视频免费免费| 91国偷自产一区二区使用方法| 中文字幕剧情在线观看| 四虎5151久久欧美毛片| 欧美成人性色生活仑片| 无码人妻精品一区二区50| 国产一区不卡在线| 日本一区二区三区四区高清视频| av网址在线看| 91久久线看在观草草青青| 成人高清在线观看视频| 精品一区二区三区的国产在线观看| 九色精品免费永久在线| 欧美成人精品网站| 不卡的av网站| 黄色网址在线免费看| 性欧美1819sex性高清| 精品久久五月天| 国产免费美女视频| 免费不卡在线视频| 久久精品国产理论片免费| 成a人片在线观看| 欧美天天综合网| 成人免费毛片糖心| 国产一区91| 国产精品v欧美精品∨日韩| 飘雪影院手机免费高清版在线观看 | 国产综合 伊人色| av在线免费观看网址| 欧美猛男gaygay网站| 国产精品国产三级国产专业不 | 国产一级做a爰片久久| 欧美久久精品| 性色av一区二区三区在线观看| aaa一区二区| 亚洲免费成人av| 久久6免费视频| 久久亚洲专区| 国产精品入口日韩视频大尺度| 免费黄网站在线观看| 欧美日韩在线观看视频| 亚洲制服丝袜在线播放| 99这里有精品| 免费观看成人在线| 亚洲人体视频| 国产婷婷色综合av蜜臀av | 黄色网在线免费看| 777午夜精品视频在线播放| 情侣偷拍对白清晰饥渴难耐| 久久丁香综合五月国产三级网站| 五月天亚洲综合情| 日韩一区二区三免费高清在线观看| 中文字幕成人在线| 中文字幕人妻丝袜乱一区三区| 国产精品免费免费| 在线观看免费的av| 国产精品毛片久久| 7777奇米亚洲综合久久| 欧美人与禽性xxxxx杂性| 精品国产乱码久久久久久图片| 久久网中文字幕| 99久久久国产精品| 日日摸天天爽天天爽视频| 九九久久婷婷| 国产欧美日韩中文| www久久日com| 亚洲第一二三四五区| 久久久久久91亚洲精品中文字幕| 久久精品亚洲麻豆av一区二区| 中文字幕国内自拍| 国产高清久久| 国产另类第一区| 户外露出一区二区三区| 日韩一区二区福利| 黄片毛片在线看| 色综合天天综合狠狠| 四虎国产成人精品免费一女五男| 激情综合亚洲精品| 欧美视频在线观看网站| 菠萝蜜一区二区| 97人人做人人人难人人做| av电影院在线看| 亚洲最新av在线网站| 国产精品视频a| 午夜精品久久一牛影视| a资源在线观看| 国产一区二区三区观看| 国产女大学生av| 99精品视频在线| 国产精品美女久久久久av福利| 网友自拍亚洲| 欧美激情视频一区二区三区不卡| 免费成人av电影| 69av一区二区三区| 亚洲大片免费观看| 亚洲综合色视频| 欧美午夜激情影院| 99国产精品久久久| 久久久精品高清| 亚洲欧美大片| 国产精品videossex国产高清 | 亚洲精品自拍第一页| 国产精品人人妻人人爽| 日本大香伊一区二区三区| 欧美精品一区二区蜜桃| 欧美国产日韩a欧美在线观看| 逼特逼视频在线观看| 久久成人久久鬼色| 欧美 日韩 国产一区| 午夜激情一区| 一区二区三区四区五区视频| 中文有码一区| 九色91视频| 中文字幕一区二区三区中文字幕 | 欧洲大片精品免费永久看nba| 日本视频久久久| 欧美xxx黑人xxx水蜜桃| 最新中文字幕亚洲| 国产午夜视频在线观看| 亚洲国产精品一区二区久| 99精品人妻无码专区在线视频区| 色综合久久久网| 日本一区二区欧美| 亚洲精品国产品国语在线app| 免费看的黄色录像| 久久久国际精品| 亚洲av网址在线| 成人一区二区三区在线观看| 天天做天天干天天操| 免费视频最近日韩| 国产精品天天av精麻传媒| 国产日韩欧美在线播放不卡| 草草视频在线免费观看| 国产精品久久| 丁香色欲久久久久久综合网| 日韩精品免费| 亚洲一区三区视频在线观看| 红桃成人av在线播放| 免费看成人午夜电影| 日韩大尺度在线观看| 精品一区二区三区免费毛片| 美女扒开腿让男人桶爽久久动漫| 成人av播放| 亚洲午夜精品| 国产精品日韩欧美一区二区三区| 97品白浆高清久久久久久| 国产福利久久精品| 国产伦精品一区二区三区在线播放| av免费观看久久| 国产精品丝袜在线播放| 国产伦精品一区二区三区照片| a级日韩大片| 久久riav二区三区| 西野翔中文久久精品字幕| 欧美激情论坛| 精品视频亚洲| 日本xxx免费| 红桃视频亚洲| 欧美精品99久久| 久久久成人网| 亚洲综合日韩欧美| 国产在线精品一区二区不卡了| 伊人影院在线观看视频| 不卡的看片网站| 法国空姐电影在线观看| 中文字幕av一区二区三区免费看| 性少妇xx生活| 亚洲精品成人在线| 日本免费观看视| 欧美在线观看禁18| 99精品在线看| 亚洲女人初尝黑人巨大| 香蕉视频在线免费看| 欧美丰满少妇xxxxx做受| 啊啊啊久久久| 国产精品久久久久一区二区| 国产精久久久| 久久福利电影| 天天做天天爱综合| 精品久久一二三| 免费国产亚洲视频| 国产情侣久久久久aⅴ免费| 久久久久久99精品| 老妇女50岁三级| 欧美午夜激情小视频| 91激情在线观看| 日韩av在线免费观看一区| 3d成人动漫在线| 91精品国产91久久久久久不卡| av免费在线一区| 国产伦精品一区二区| 日韩在线观看一区 | 神马久久精品综合| 午夜av一区二区| 7777久久亚洲中文字幕| 亚洲国产美女精品久久久久∴| 在线毛片网站| 欧美专区第一页| 日韩激情欧美| 亚洲黄色成人久久久| 亚洲欧洲一区二区天堂久久| www.久久91| 久久欧美一区二区| 久久免费播放视频| 欧美老年两性高潮| 免费福利在线视频| 国内精品视频在线| 精品一区二区三区中文字幕在线 | 在线看片不卡| 亚洲欧美视频二区| 久久久欧美精品sm网站| 久久国产露脸精品国产| 欧美日韩国产片| 理论视频在线| 亚洲91精品在线观看| 欧美片网站免费| 一区二区三区四区欧美日韩| 日日嗨av一区二区三区四区| 91丝袜在线观看| 夜夜嗨av一区二区三区网页| 国产又粗又长又黄| 一本色道久久综合亚洲精品小说| 狼人综合视频| 国产视频一区二区不卡| 欧美日韩一区二区国产| 午夜天堂在线视频| 久久精品亚洲精品国产欧美kt∨| 日韩xxxxxxxxx| 日韩一区二区三区四区 | 自拍偷拍欧美激情| 日批视频免费观看| 亚洲图片欧美午夜| 深夜成人福利| 欧美精品一区在线发布| 亚洲影院免费| 国产女主播喷水高潮网红在线| 亚洲www啪成人一区二区麻豆| 性做久久久久久久久久| 欧美人在线观看| 一区二区在线免费播放| 激情成人开心网| 成人午夜视频福利| 日本少妇在线观看| 精品视频久久久久久久| 日韩伦理在线一区| 欧美日韩亚洲免费| 日韩精品一级中文字幕精品视频免费观看| aaaaaav| 91国偷自产一区二区开放时间| 国产精品一区在线看| 国产精品久久9| 欧美电影免费播放| 亚洲黄色片免费看| 一区二区成人在线| 姝姝窝人体www聚色窝| 26uuu另类亚洲欧美日本老年| 亚洲电影男人天堂| 熟女人妇 成熟妇女系列视频| 国产欧美一区二区在线| ,一级淫片a看免费| 久久久久久久成人| 日韩福利视频一区| 亚洲 欧美 日韩系列| 亚洲精品写真福利| 少妇av在线播放| 国产成人精品视频在线| 日韩精品免费一区二区在线观看| 免费网站在线观看黄| 亚洲国产日产av| 国产资源在线播放| 成人精品aaaa网站| 亚洲高清成人| 人妻视频一区二区| 日韩欧美视频一区| 涩涩网在线视频| 亚洲一区高清| 波多野结衣中文字幕一区二区三区 | 色素色在线综合| 国产三区在线观看| 狠狠干一区二区| 麻豆成人免费电影| 国产极品美女高潮无套嗷嗷叫酒店 | 国产不卡视频在线| 久久久久久免费视频| 亚洲精品乱码久久| 欧美男生操女生| 亚洲天堂电影| 欧美日韩视频免费在线观看| av一二三不卡影片| 亚洲天堂网在线观看视频| 欧美极品xxxx| 日韩精品午夜| 青青草视频成人| 日韩午夜电影av| 福利一区二区三区视频在线观看| 国产毛片久久久久久国产毛片|