Moblin的快速启动分析

        MoblinkernelX都进行了大量的优化,同时采用了Sreadahead进行磁盘预读取来提高启动速度,最终把Moblin系统的启动时间控制在10秒以内。

 

一、概述

1、什么是启动时间

   这里的启动时间指的是从bootloader(grub)到系统启动完毕的时间,并不包括BIOS阶段的时间。

   快速启动就是要尽量缩短启动时间。

 

2、启动过程的完成

(1)CPU和磁盘处于idle状态。

(2)没有任何延后启动的程序让当前系统在几秒或者几分钟内不可用。

(3)系统已经完全启动完毕,用户可以开始做任何事,包括关机。

 

二、Boot Graph

1、Boot Graph概念

    Boot Graph用来分析kernel启动过程中每个模块的时间顺序。

    Boot Graph是一个基于perl的脚本(bootgraph.pl),位于$(linux_source)/script下。

    Boot Graph会读取dmesg的输出并生成一幅SVG图片用以分析。

 

2、Boot Graph使用

(1)kernel编译时需要包含CONFIG_PRINTK_TIME选项

     make menuconfig

(2)bootloader启动系统时需要在kernel启动选项上加上“initcall_debug”,如下:

     kernel /vmlinuz-2.6.28 ro root=/dev/hda1 initcall_debug

(3)在系统启动完毕后执行

     dmesg | perl $(Kernel_DIR)/scripts/bootgraph.pl > output.svg

(4)使用SVG浏览器(比如Inkscape,Gimp,Firefox)来查看输出文件output.svg

 

三、Bootchart

1、Bootchart概念

   Bootchart是一个以图形方式查看和分析Linux启动过程的工具。

   /sbin/bootchartd是一个shell脚本,在kernel启动时被调用。

   启动后在后台运行,从/proc文件系统中收集信息。

   一开始数据被保存在内存中(tmpfs),直到启动完全结束后写到磁盘(/var/log/bootchart.tgz)。

   /usr/bin/bootchart用来解析结果并生成图片。

 

2、Bootchart工作流程

(1)bootloader启动系统时需要在kernel启动选项上加上

     (init=/sbin/bootchartd)

     kernel /vmlinuz-2.6.28 ro root=/dev/hda1 init=/sbin/bootchartd

(2)收集信息

     一开始数据被记录在内存里(tmpfs)

     在/proc文件系统被加载之后,从以下位置读取信息:

          >/proc/stat

          >/proc/diskstat

          >/proc/[PID]/stat

     最终log数据被打包并保存在/var/log/bootchart.tgz

(3)生成图片,把打包后的log数据拷贝到开发机上并用一个java程序/usr/bin/bootchart去解析并渲染出一张图片(PNG,SVG或EPS格式)。

          >/usr/bin/bootchart /home/xxx/tmp/bootchart.tgz

 

3.时间分配

(1)Kernel(1s)

     a、把所有的模块都编译到kernel image内部,而不是单独模块:

     Modules:slow,synchronous

     b、不要使用initrd:

     initrd又称为initramfs。

     把所有关键的drivers都放到kernel里面。

     c、驱动加载并行化:

     采用并行的方法同时检测多个硬件设备来减少启动时间;

     并行方法可能会影响到系统的稳定性,数据的访问顺序以及一致性;

     仔细调整每个函数的启动顺序尽量不在影响系统的情况下并行执行。

(2)Early userspace(1s)

     去掉不必要的后台服务程序(nfs server,mail server,etc);

     并行启动必要的后台服务(dbus,hal,conmann,etc); 

          修改HAL(Hardware Abstraction Layer)里的算法来减少CPU使用率;

     采用super readahead(Sreadahead)进行磁盘预读取;

     采用Fastinit作为启动脚本,方便OSV加入其他启动脚本。

(3)X(1s)

     减少Intel显卡驱动加载所耗时间(5秒到0.5秒);

          减少显卡驱动所占内存;

     对XKB(keyboard layouts)结果进行缓存,以便以后直接使用;

     X可以直接使用kernel启动时检测到的显示模式。

(4)Home Screen

 

4.Sreadahead

 

    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值