c - 我如何获得 linux 内核服务中断所花费的时间

标签 c linux performance linux-kernel irq

我想追踪一段代码中的抖动,我知道有很多潜在的来源(任务切换、系统调用、缓存未命中、将任务移至另一个 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 的问题,请查看这些不错的答案:

What is the irq latency due to the operating system?

关于c - 我如何获得 linux 内核服务中断所花费的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068656/

相关文章:

c - Freeswitch 阻塞

android - 从 Android : Best Approach? 中的 4 个静态 CSV 文件读取数据

python - 给定互斥整数的键,找到多个字典值的最小总和的有效方法是什么?

c - 需要这个 "extra"转换吗?

c - 互斥体初始化 -(UNIX)

c - 带 c 的 socket 和 fork

linux - 部署 Webpack Angular 2 应用

Linux 使用 sed 命令更改文件中所有记录的开始和结束位置的字符串

javascript - node.js 与客户端 Javascript(与 Chrome/V8 相比)相比是否具有任何性能优势?

cntlm 错误 : Too many open files