我想跟踪一段代码中的抖动,我知道有很多潜在的来源(任务切换、系统调用、缓存未命中、将任务移动到另一个 CPU、cpu 节流等),我知道如何跟踪所有这些但唯一我不知道如何跟踪的是内核花费在服务中断上的时间。数据在 /proc/stat 中,但它以低分辨率测量 soft-irq 和 irq 中的时间,我正在寻找分辨率更高的东西。
有没有办法让内核服务中断所花费的时间降低到纳秒或至少微秒?
我想跟踪一段代码中的抖动,我知道有很多潜在的来源(任务切换、系统调用、缓存未命中、将任务移动到另一个 CPU、cpu 节流等),我知道如何跟踪所有这些但唯一我不知道如何跟踪的是内核花费在服务中断上的时间。数据在 /proc/stat 中,但它以低分辨率测量 soft-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
这些很好的答案: