代码之家  ›  专栏  ›  技术社区  ›  TheCodeArtist

为Linux内核引导时间优化计时

  •  4
  • TheCodeArtist  · 技术社区  · 15 年前

    我正在尝试优化嵌入式设备(而不是PC)上Linux的启动时间。

    当前要分析启动序列,
    我有 启用 这个 定时信息 普林特克 原木。

    这是最合适的方法吗?
    如果不是,我如何以最小的开销来分析引导序列(带定时)?

    PS:
    我在串行连接上有一个(设备的)终端&
    我使用TeratermoverWindowsXP访问它。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Krzysztof Kosiński MitulShrivastava    15 年前

    printk定时信息的开销很小。但是,这些信息并不总是有用的,因为它不能告诉您在用户空间中发生了什么。

    你可能想试试启动图。它是一个shell脚本,在引导期间在后台运行,并从/proc收集数据。虽然它的开销比printk timing info大,但它更详细,允许您分析进程启动和磁盘利用率。

    http://www.bootchart.org/

        2
  •  1
  •   TheCodeArtist    11 年前

    这已经很长时间了,但更新了这里的答案以供参考。

    下面是我最后做的事情:

    1. 已在PC上的串行终端客户端上启用时间戳(Teraterm)。

      实际启用了将日志捕获到磁盘上的文件&
      选中的选项可向每行添加时间戳。

    2. 补充 printk() 内核中的语句。

      • 在第一个街区开始的时候,我试着分析一下。
      • 第二,在街区的尽头,我正试图勾勒出轮廓。

    尽管在设备上发生事件和通过串行方式在主机PC上接收日志之间存在轻微的延迟,但在给定的硬件设置中,这是相当稳定的。因此,两个时间戳之间的差异精确到生成这些日志的设备上事件之间的实际时间差异。还有2的架空/副作用 printk 语句是最小的。


    更新: 2年后,数百小时的内核调试,我建议使用 function tracers . 不过,这需要一些努力去学习。解释得很好 here 我们需要:

    • 使能 CONFIG_FUNCTION_TRACER .config
    • 使用 trace_printk() 而不是 Primtk()
    • 检查输出日志的方式 cat /sys/kernel/debug/tracing/trace