grep-e"irq=41"-e"i2c-4"SYS_FTRACE>i2c4-20221106.txt 1. 则提取出来的内容只包含 i2c4 部分,截取一部分分析: i2c_read 到 irq_handler_entry 慢: 该路I2C4 挂载设备过多,同时发起通信会抢占。 发起i2c 传输的 user 线程优先级低,当多个设备同时发起 i2c 传输,或者前面已经有几个设备在等待,你的设备...
以irq_handler_entry为例,这个tracepoint是在irq发生的地方插入的.如果我们想知道irq发生的时机和参数,可以使用我们自己的函数hook过去. hook的方法是通过register_xxx这一类函数: int register_trace_irq_handler_entry(void (*probe)(void *__data,int irq, struct irqaction *action), void *data); 可以看到...
对于中断响应时间分析,你可能需要启用 irq 和softirq 相关的跟踪点。 bash sudo trace-cmd record -e irq:irq_handler_entry -e irq:irq_handler_exit -e softirq:softirq_entry -e softirq:softirq_exit -o trace.dat 这个命令会启动 trace-cmd 的记录功能,并收集中断和软中断的进入和退出事件,将数据保存...
ktime_t irq_time_stamp[NR_IRQS]; } b. 使用tracepoint,可以让我们每次进入某个IRQ时,都先进钩子函数,所以,在这里可以统计IRQ发生的次数。 voidirq_handler_entry_probe(void*data,intirq,structirqaction *action) {structirq_state *irqs; if (action && (action->flags & IRQF_PERCPU)) //只关注SPI...
i2c_read 到 irq_handler_entry 慢: 该路I2C4 挂载设备过多,同时发起通信会抢占。 发起i2c 传输的 user 线程优先级低,当多个设备同时发起 i2c 传输,或者前面已经有几个设备在等待,你的设备就拿不到锁,就一直排在后面。 硬件传输耗时久:比如从机有问题,或者 i2c 速率设置不对,用示波器可以抓到。
使用function_graph跟踪irq_handler_entry跟踪点的do_IRQ函数。 # trace-cmd record -p function_graph -e irq_handler_entry -l do_IRQ sleep 10 # trace-cmd report <idle>-0 [000] 157412.933969: funcgraph_entry: | do_IRQ() { <idle>-0 [000] 157412.933974: irq_handler_entry: irq=48 name=...
使用function_graph跟踪irq_handler_entry跟踪点的do_IRQ函数。 # trace-cmd record -p function_graph -e irq_handler_entry -l do_IRQ sleep 10 # trace-cmd report <idle>-0 [000] 157412.933969: funcgraph_entry: |do_IRQ() { <idle>-0 [000] 157412.933974: irq_handler_entry: irq=48 name=eth...
使用function_graph跟踪irq_handler_entry跟踪点的do_IRQ函数。 代码语言:javascript 复制 # trace-cmd record-p function_graph-e irq_handler_entry-l do_IRQ sleep10# trace-cmd report<idle>-0[000]157412.933969:funcgraph_entry:|do_IRQ(){<idle>-0[000]157412.933974:irq_handler_entry:irq=48name=eth...
<idle>-0 (---) [001] d.h. 4811.100006: irq_handler_entry: irq=24 name=arch_timer <idle>-0 (---) [000] d.h. 4811.100007: irq_handler_entry: irq=24 name=arch_timer <idle>-0 (---) [001] dnh. 4811.100053: softirq_raise: vec=9 [action=RCU] <idle>-0 (---)...
# trace-cmd record -p function_graph -e irq_handler_entry -l do_IRQ sleep 10 # trace-cmd report <idle>-0 [000] 157412.933969: funcgraph_entry: | do_IRQ() { <idle>-0 [000] 157412.933974: irq_handler_entry: irq=48 name=eth0 <idle>-0 [000] 157412.934004: funcgraph_exit: + 36....