【问题标题】:how do I get the time spent by the linux kernel servicing interrupts如何获取 linux 内核服务中断所花费的时间
【发布时间】:2013-04-10 17:22:33
【问题描述】:

我想跟踪一段代码中的抖动,我知道有很多潜在的来源(任务切换、系统调用、缓存未命中、将任务移动到另一个 CPU、cpu 限制等),我知道如何跟踪所有其中但我不知道如何跟踪的唯一一个是内核花费在服务中断上的时间。数据在 /proc/stat 中,但它以低分辨率测量 soft-irq 和 irq 中的时间,我正在寻找分辨率更高的东西。

有没有办法让内核服务中断所花费的时间精确到纳秒或至少微秒?

【问题讨论】:

  • 您可以编译自定义内核,在中断进入/退出时翻转 gpio,然后在逻辑分析仪上跟踪时序。
  • 任何测量某物的尝试都会影响某物(在不同程度上)。所以首选外部测量,比如@TJD的评论。

标签: c linux performance linux-kernel irq


【解决方案1】:

是的,在调用handle_IRQ之前和之后放一个printk,屏幕上的计时器通常是高分辨率的:

 86 /*
 87  * asm_do_IRQ is the interface to be used from assembly code.
 88  */
 89 asmlinkage void __exception_irq_entry
 90 asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
 91 {
 92         handle_IRQ(irq, regs);
 93 }
 94 

如果您询问irq_latency,请查看这些不错的答案:

What is the irq latency due to the operating system?

【讨论】:

  • 但要小心:请记住,printk() 不是免费的。如果将内核消息打印到控制台,您的测量结果可能会以生成该输出所需的时间为主!
  • 同意您可以根据您的平台使用周期计数器,并通过将增量除以核心频率来计算时间差。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2012-02-29
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多