Linux Kernel启动时间调试

要观察Kernel各个模块启动时间,并且针对性的进行优化,一般用Initcall Debug来进行调试,我的调试笔记如下:


1. u-boot修改

    首先修改u-boot的启动参数,在bootargs参数后添加参数printk.time=y initcall_debug,这样可以使kernel启动时详细打印各个部分启动的时间戳,以下截取片段仅供参考:

[    0.001035] pid_max: default: 32768 minimum: 301
[    0.001210] Mount-cache hash table entries: 512
[    0.001930] CPU: Testing write buffer coherency: ok
[    0.002203] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.002264] Setting up static identity map for 0x806221b8 - 0x80622210
[    0.040358] Brought up 1 CPUs
[    0.040367] SMP: Total of 1 processors activated (1581.05 BogoMIPS).


2. kernel修改

    如果kernel配置了如下内容,u-boot参数可以不增加printk.time=y

  Kernel hacking

     ----->Show timing information on printks

 此外,为了增加启动log所prink内容的缓冲区大小,建议把内核中的CONFIG_LOG_BUF_SHIFT配置从默认的14修改为18,这样就吧默认的缓冲区从16k增加到256k


3. 查看log

  进入文件系统后,用如下命令可以进行调试:

    dmesg -s 256000 | grep "initcall"

  这可以查看内核的initcall的各个模块,参考以下截取片段:

[    0.159235] initcall key_proc_init+0x0/0x4c returned 0 after 8 usecs
[    0.159263] initcall crypto_algapi_init+0x0/0x10 returned 0 after 6 usecs
[    0.159288] initcall skcipher_module_init+0x0/0x48 returned 0 after 1 usecs
[    0.159316] initcall chainiv_module_init+0x0/0xc returned 0 after 4 usecs
[    0.159340] initcall eseqiv_module_init+0x0/0xc returned 0 after 2 usecs

此外

dmesg -s 256000 | grep "initcall" | sed "s/\(.*\)after\(.*\)/\2 \1/g" | sort -n

(不知道怎么回事上面的英文括号打不出来,因此用中文括号代替了)

这条命令可以对initcall的log进行排序,更加方便的查看各个模块加载所消耗的实际,参考以下截取片段:

343 usecs [    0.158440] initcall init_jffs2_fs+0x0/0xdc returned 0
 348 usecs [    1.876173] initcall imx_tef6638_driver_init+0x0/0xc returned 0
 351 usecs [    1.173609] initcall mxs_viim_driver_init+0x0/0xc returned 0
 361 usecs [    0.159030] initcall fuse_init+0x0/0x1c4 returned 0

每行的第一列即是该模块加载消耗的时间


这样,大家就可以对没有用的模块进行裁剪,耗时较大的模块进行优化啦!


  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值