我正在尝试在嵌入式设备(而不是PC)上优化linux的启动时间
目前要分析启动顺序,
我在 printk 日志上启用 时间信息。
这是最佳方式吗?
如果没有,我如何以最小的开销分配启动序列(有时间)?
PS:
我有一个(设备的)终端通过串行连接&
我在Windows-XP上使用TeraTerm来访问它。
答案 0 :(得分:2)
printk时序信息的开销非常小。但是,此信息并不总是有用,因为它不会告诉您用户空间中发生了什么。
您可能想尝试Bootchart。它是一个shell脚本,在引导期间在后台运行,并从/ proc收集数据。虽然它比printk时序信息具有更大的开销,但它更详细,并允许您分析流程启动和磁盘利用率。
答案 1 :(得分:1)
这是很长一段时间,但在此更新答案以供参考。
以下是我最终做的事情:
在PC(TeraTerm)上的串行终端客户端上启用时间戳。
实际上已启用将日志捕获到磁盘上的文件&
选择了为每一行添加时间戳的选项。
在内核中添加了 printk()
语句。
虽然设备上发生事件与通过串口在主机PC上接收日志之间存在轻微延迟,但在给定的硬件设置上这是相当稳定的。因此,两个时间戳之间的差异对于生成这些日志的设备上的事件之间的实际时间差异是准确的。 2 printk
语句的开销/副作用也很小。
更新: 2年后,以及之后数百小时的内核调试,我建议使用 function tracers 。尽管如此,它还需要一点点努力。正如很好地解释 here ,需要:
CONFIG_FUNCTION_TRACER
.config
trace_printk()
代替printk()
cat /sys/kernel/debug/tracing/trace