You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Linux内核模块驱动启动耗时测量工具咨询

测量Android Linux内核驱动启动耗时的方案

一、利用内核现成工具追踪

1. ftrace 函数追踪

ftrace是内核原生的追踪框架,可直接定位驱动probe/bind函数的执行耗时:

  • 先挂载debugfs(若系统未默认挂载):mount -t debugfs none /sys/kernel/debug
  • 切换到function_graph追踪器(能展示函数调用树及单个函数的执行时长):
    echo function_graph > /sys/kernel/debug/tracing/current_tracer
    
  • 指定要追踪的目标驱动probe和bind函数(替换为你的实际函数名,多个函数用空格分隔):
    echo 'drv1_probe drv1_bind drv2_probe drv2_bind ...' > /sys/kernel/debug/tracing/set_graph_function
    
  • 启动追踪:echo 1 > /sys/kernel/debug/tracing/tracing_on
  • 触发驱动绑定(或重启系统)后停止追踪:echo 0 > /sys/kernel/debug/tracing/tracing_on
  • 查看结果:cat /sys/kernel/debug/tracing/trace,输出会清晰显示每个函数的调用时间、耗时,直接对应各驱动的启动开销。

若需要更高效的分析,可使用trace-cmd工具(需确保Android系统编译时包含该工具),它能简化trace数据的收集、过滤与展示。

2. perf 性能分析工具

perf可用于采样或追踪特定函数的执行耗时:

  • 记录启动阶段的函数调用(驱动绑定通常由init进程触发,pid为1):
    perf record -g -a -p 1
    
  • 重启系统后停止记录,通过perf report查看函数调用栈及各函数的耗时占比,定位目标驱动的probe/bind耗时。
  • 也可直接过滤目标函数进行实时追踪:
    perf trace -e 'drv1_probe','drv1_bind','drv2_probe','drv2_bind'
    

二、手动添加定时器KPI(工具无法满足需求时)

如果需要更精准的自定义统计,可在每个驱动的bind/probe函数中添加时间戳逻辑:

  • 示例代码(以bind函数为例):
    #include <linux/ktime.h>
    #include <linux/printk.h>
    
    static int xxx_bind(struct device *dev, struct device_driver *drv)
    {
        ktime_t start_time, end_time;
        s64 duration_ns;
    
        start_time = ktime_get();
        // 原bind函数业务逻辑
        ...
        end_time = ktime_get();
        duration_ns = ktime_to_ns(ktime_sub(end_time, start_time));
        pr_info("[%s] bind completed, took %lld ns (%lld ms)\n", __func__, duration_ns, duration_ns / 1000000);
    
        return ret;
    }
    
  • 对probe函数可添加相同逻辑,编译驱动模块后,启动系统查看dmesg输出即可获取每个驱动的启动耗时。

内容的提问来源于stack exchange,提问作者StarkSpec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:13:22