Linux下启动时间优化专题

时间:2024-05-21 20:06:56

1. 过往优化总结

陆陆续续在Linux进行启动时间优化,之前有两份文档,分别从内核和用户空间两个方向进行了优化。

Android/Linux boot time分析优化》和《Busybox下Bootchart的使用》。

简单总结如下:

Kernel:基于dmesg,分析initcall_debug相关log,使用analyze_boot.py工具进行分析。

System:在支持Busybox的bootchartd的环境下(包括Android),使用pybootchartgui进行分析。对Ubuntu平台,直接使用systemd-analyze进行分析。

2. 还有哪些优化方法?还有哪些工具?

之前做的这些工作,似乎都就具体问题而进行。但是没有进行总结归纳,形成方法论来指导将来的工作。

2.1 预加载技术

预加载技术有preloadprelink、readahead;prealod相关帮助文档preload.pdf,作者官网http://behdad.org/,preload code

preload作为守护进程,记录程序的使用统计信息,或者经常使用的文件;在计算机空闲的时候,将其加载到RAM中。这样在程序或文件被使用的时候运行速度就会非常快。

preload长和prelink配合使用。

2.2 Improving performance/Boot process

正如所有的优化从量化开始,Analyzing the boot process分析有systemd-analyze、systemd-bootchart、bootchart2(pybootchartgui)三种方法。

优化的步骤有:定制自己的Kernel;Initramfs启动;提前启动某些服务(systemctl enalbe xxxx);尽量少的Log输出;suspend到RAM而不是Disk。

2.3 Boot Time@elinux.org

Boot Time是用户开启设备的第一观感,涉及到很重要的用户体验。此WiKi基本上算是Boot Time的

参考资料:

http://processors.wiki.ti.com/index.php/Android_Boot_Time_Optimization

boot流程从BootROM->Bootloader->Kernel->Android的过程,以及如何度量每个阶段的时间。

http://blog.****.net/weiqifa0/article/details/48996033

如何修改init使能BOOTCHART,基于bootchart.tgz生成图表。在图表中查看每个进程的耗时,作出针对修改。

http://blog.****.net/springdia/article/details/8308914

介绍了Android用户空间启动优化。

http://elinux.org/Using_Bootchart_on_Android

Android下使用Bootchart的教程,需要修改init支持。

http://elinux.org/Android_Booting

介绍了Firmware、kernel、user space,重点分析了Android bootup流程,主要在用户空间。

里面的关于Kernel和Android User Space的优化点值得重视。

http://elinux.org/Bootchart

Bootchart的官网,介绍了Bootchart工具,以及Bootchart分支:Timechart、Bootchart-lite、ubootchart、EmBootchart、Busybox。

http://elinux.org/Improving_Android_Boot_Time_Outline

泛泛的介绍了Android中常用的测量启动时间的工具和方法。

Message loggers: grabserial, printk times, logcat.

Bootchart, strace, ftrace, method tracer…

https://www.toradex.com/blog/embedded-linux-boot-time-optimization

通过grabserial去获取log信息,分析bootloader、kernel、user space耗时。

https://wiki.archlinux.org/index.php/Improving_performance/Boot_process

基于systemd进行启动时间优化,一些方法值得参考。如果系统使用systemd,非常方便。

http://free-electrons.com/doc/training/boot-time/boot-time-slides.pdf

https://events.linuxfoundation.org/sites/events/files/slides/opdenacker-boot-time.pdf

http://tinylab.org/measure-and-draw-the-boot-up-time-of-linux-kernel/

使能printk.time=1和initcall_debug,然后获取dmesg.log信息。

使用bootgraph.pl、FlameGraph、gnuplot、histogram.sh进行分析。