挑战启动极速(3)-----深入分析

本博客原创文章属本人lurker0ster所有,欢迎转载。
转载时需同意以下条件:
1. 必须保持版权信息,以及文章出处http://blog.csdn.net/lurker0ster/
2. 不准演绎,修改,必须完整转载全部内容。

===================分割线====================   

    要进行优化,必须先知道瓶颈在哪儿。

    幸运地是我们不需要重新开始,现有的工具就可以满足我们的需要。Bootchart就是专门用于检查启动过程的工具【1】。安装完成之后,通过在内核启动参数中指定kernel /vmlinuz-2.6.10 ro root=/dev/hda1 init=/sbin/bootchartd

    在我们的目标系统ubuntu 9.10中,这一步是省略的。 bootchart的启动是在initrd中的init脚本启动的。bootchart会每5s检查一次/proc/stat  /proc/diskstats /proc/[PID]/stat收集全系统的进程运行状态以及CPU使用率和IO状态,然后写入/var/log/bootchart.tgz。当系统中出现设定中的进程时(比如GNOME下的gdmgreeter),bootchart认为启动结束,停止收集数据并转换数据为可视的PNG图片。

ubuntu-karmic-20091229-2 

(点击查看原始大图)

     这是我在Vmware里面安装的Ubuntu9.10的启动时序图,大约用时100s。可以看到usplash花了很长时间。这个就是Ubuntu那个启动画图(带高亮进度条的那个)。这个程序除了显示动画,什么事都不做,而且还很耗时,这是我们第一个要取消掉的东西。

    第二个是ureadahead,在9.10最初的发行版本中使用的是intel moblin带的sreadahead。后来ubuntu又发布了自己版本的readahead。这个程序的目的在于预读取启动中要用到的文件到内存中,以减少对磁盘读数据的等待时间。这个程序我会在以后开一个专题研究的。至于为什么Ubuntu自己重写一个版本,我查了不少邮件列表,没有发现相关的性能数据,暂时先认为是有改进吧。这一步理论上是省不掉的,但是也有BugZilla report说有人在laptop上去掉ureadahead反而性能更好,或许我们也可以做一下试验。

    第三个大头是udev,它调用了很多次的modprobe。udev的用户态程序配合Sysfs的信息把系统中不存在的设备对应的设备文件都去除了,保证/dev下的设备文件都有物理实体对应。可能在probe会消耗很多资料,我们需要深入研究。

    第四个是hald (hal deamon),硬件抽象层做了很多addon的启动过程。

    第五个是console-kit,它主要是用来支持用户快速切换。

     第六个是Xorg和Xkbcomp,可以看到CPU使用率很高,可能在做复杂的计算。之后就是Gnome的各个部件,以及输入法ibus的初始化(python写的,效率应该不会太高)。在优化的初期,我们可以考虑用Xfce来替代GNOME,以避免对GNOME做过多的关注。

    第七个是cups,是linux的打印伺服程序。我们可以修改成随需启动,我们不是每次启动都需要打印文件。

其他的如音频PulseAudio/Alsa, USB, NetManager 我们暂时不做关注。图中出现的Vmware相关的组件不做关注,因为真实的PC上是用不到这些组件的。

留下来的疑问:

启动过程中的dd(dbus-deamon)、 exe(usplash)不知道是什么东西,需要在以后的Hack中搞清楚。

在vmware中跑的ubuntu9.10 测试得到的Bogomips是3610.45,大约是级别Intel Pentium 4 (1.7GHZ)。利用这种对比关系,我们可以大约想象真实PC的启动时间,在启动时间没有得到大幅度优化之前,利用vmware进行测试,方便调试。

参考文献:

www.bootchart.org

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值