范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Linux启动时间优化实战,2。41秒启动应用

  劳动节,更个文吧,祝大家都劳有所获。
  今天看了一个关于启动优化的讲座,简单总结一下。
  本文的目标是尝试一些比较简单有效的方法,并不会覆盖所有的优化技巧。感兴趣的伙伴可以关注我视频号,后面准备用直播的方式和大家交流。
  目标系统
  硬件:
  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 自上而下进行优化。
  重点关注短板。
  感谢阅读,欢迎转发哦!

想买一部大一点内存手机!仅限华为和荣耀,有什么推荐吗?想买一部大一点内存手机!仅限华为和荣耀,有什么推荐吗?且不论价格,看了一下华为p40和华为p40pro(8999元人民币)它们的配置p40pro最大配置运行内存和存储器,只有8GB手机淘汰了多少机器,你怎么看?伴随着手机在短短近三十年的时间里崛起成为人类最为重要的日常设备工具,这个过程中,不可避免地使得一些传统产品黯然落幕。这些产品或是与手机核心功能高度一致,或是缺乏灵活地自我变更。适者新车实拍华为AITO问界M5,热度很高,但褒贬不一!问界M5新车实拍这是台春节后刚到店的华为新车,问界M5,也是华为和小康旗下赛力斯合作的第二款车型。该车的背景是在华为带货赛力斯SF5车型效果不佳后,华为亲自下场,新设AITO品牌,美国科研新规震动学界共享实验数据将成趋势?作者田瑞颖科学数据共享一直是学术界的期盼,但让科学家自愿把攥在手心的数据交出来太难了。现在,美国国立卫生研究院(NIH)要出头当这个恶人。据自然报道,2023年1月起,NIH将要求有点恐怖,怎样才可以防止自己被人肉搜索呢?怎么防止自己被人肉搜索?那么我就谈谈一般都有哪些人肉搜索手段吧,以此提醒大家如何防止被人肉搜索。用一张照片查出你的详细地址现在的智能手机相机设置里一般都会有这一项设置保存地理位置信东数西算的背后?东数西算是突然冒出来的吗?顶层设计的思路是什么?从宏观看,东数西算就是共同富裕的战略布局,是产业扶贫的延续,从产业政策看就是科技强国的两手抓两手都要硬,这两手,一手是补短板,加快芯我国上市互联网企业总市值达12。4万亿元市值持续下降营收同比上涨日前,中国信息通信研究院发布了2021年四季度我国互联网上市企业运行情况报告。报告显示,截至2021年12月底,我国上市互联网企业总市值达12。4万亿元。2终极打工人套路出差不带电脑玩LOL,成本只要50大家还记得我上次给大伙介绍过向日葵家的开机插座吧,说实话这个不到50元的小东西给予我在工作上的便利是非常多的。特别是在我周末休息,又或者是假期活动时,万一遇到一些紧急情况需要处理,摩根大通建立量子密钥分发网络,保护区块链应用澎湃财讯美东时间2月17日,摩根大通宣布与东芝美国电信系统供应商Ciena建立了一个量子密钥分发(QKD)网络,用于确保区块链应用免受量子攻击。新开发的QKD网络是一个安全双向通信运维用到的命令1文件lsrtl按时间倒叙列出所有目录和文件llrttouchfile创建空白文件rmrf目录名不提示删除非空目录(r递归删除f强制)dos2unixwindows文本转linux涉嫌严重违纪违法,退休总经理落马,中国联通火速表态!中国邮政也表态坚决拥护中央决定2月18日晚间,据中央纪委国家监委网站消息,中国联合网络通信集团有限公司原党组副书记总经理李国华涉嫌严重违纪违法,目前正接受中央纪委国家监委纪律审查和监察调查。翻看李国华的履历,李
荣耀50发布时间确定,看起来全系是骁龙778g处理器?荣耀50系列终于确定发布时间了,当然时间定在6月16日,看起来这次荣耀50确实发布时间比p50快了!当然这次看起来还是一个系列,简单看一下吧!真机基本上就是这样的,当然配色看起来也网约车到好处到底在哪里车友们知道吗自从网约车出现以后,大家对于网约车都有很多议论,作为一个新事物,网约车的发展肯定是不完善的,但是,网约车肯定是有好处的,不然不可能存在,今天小编就给大家讲一讲网约车的好处是什么!网新鲜早科技丨马斯克收购Twitter面临反垄断审查百度宣布新一轮干部轮岗海康威视回应可能受到美国制裁消息21世纪经济报道数字经济课题组综合报道早上好,新的一天又开始了。在过去的24小时内,科技行业发生了哪些有意思的事情?来跟21tech一起看看吧。巨头风向标1马斯克收购TwitterNginx性能优化一系统内核层面net。core。somaxconn4096允许等待中的监听net。ipv4。tcptwrecycle1tcp连接快速回收net。ipv4。tcptwreuse1tc营收首次下滑!净利腰斩52。9,外界误解小米了?用了两年时间,雷军最终兑现了承诺。当小米的股价重回17港元上方的时候,雷军笑称,终于可以抬头挺胸,重新做人了。此后,他删掉了手机中所有的股票软件。雷军说,他也要做一个幸福的人,喂马加拿大拒绝华为中兴,那就让中国继续领跑吧5月19日,加拿大政府以所谓国家安全为由,宣布禁止加电信系统使用华为中兴公司的产品和服务,并称此系经加安全部门评估与加盟友协商后作出的决定。美帝的小弟,就等着让通信网络时不时断网,鸿海旗下鸿腾精密与林积为签署战略合作协议台湾中央社5月18日消息,鸿海旗下鸿腾精密FIT日前与东莞市林积为(LJV)实业投资有限公司签署战略合作协议,双方将在车载资讯产品领域,强攻电动车高速连接器市场。鸿腾指出,未来将持北京多部门约谈马蜂窝要求立即整改中关村在线消息北京市通信管理局最近发文称,会同市文化和旅游局市网信办对北京蚂蜂窝网络科技有限公司进行了约谈,要求立即进行整改。马蜂窝官网据了解,此次约谈蚂蜂窝旅游网,主要是针对其网章泽天最新消息卸任刘强东旗下公司董事今日下午消息,章泽天卸任重庆嫩绿茶艺有限公司董事一职,该公司由刘强东间接持股。根据天眼查数据显示该公司成立于2015年9月,注册资本3000余万元,经营范围包括食品生产餐饮服务等,黄光裕的出狱新零售市场的一剂兴奋剂文孟永辉似乎每一次有关黄光裕即将出狱的传闻都能够引起诸多人的关注,这个曾经给中国商界带来巨大影响的人物,即使已经入狱十余年之后,依然受到各色人等的关注。或许是人们对于互联网式的发展本田电动车来了,VGO开启预售7988元,现在就能买到最新消息,4月1日15日,本田在中国的第一款电动车,HondaVGO将在京东天猫苏宁渠道正式开启预售,预售价格7988元,将于4月15日正式发货,有需要的朋友可以提前关注了。最新信