我想追踪一段代码中的抖动,我知道有很多潜在的来源(任务切换、系统调用、缓存未命中、将任务移至另一个 CPU、CPU 节流等),我知道如何追踪所有其中,但我唯一不知道如何跟踪的是内核花费在服务中断上的时间。数据在/proc/stat 中,但它以低分辨率测量软 irq 和 irq 中的时间,我正在寻找分辨率更高的东西。
有没有办法获得内核服务中断所花费的时间,精确到纳秒或至少微秒?
最佳答案
是的,在调用 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
的问题,请查看这些不错的答案:
关于c - 我如何获得 linux 内核服务中断所花费的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068656/