有没有办法调试软中断?

Is there a way to debug softirq?

我的目的:

log 特定情况下 softirq 生成的调试信息(比率,地址,其他)。 任何信息都会有所帮助。

我想是一些可疑的设备驱动程序,但不知道哪个产生了重负载。

感谢您的任何建议,例如“阅读本手册”。

Is there a way to debug softirq?

可能是的,因为 Linux kernel is open source. Actually, it is even free software

所以你可以下载它的源代码(2020年底,Linux5.10),研究它,改进它。

您可能会阅读有关 syscalls(2) (including bpf(2) & poll(2) & socket(2)) then use strace(1) or dmesg(1) or perf(1) or gprof(1). See also socket(7) with netlink(7) and libnetlink(7)

的更多信息

从技术上讲,您可以编写自己的 GCC plugin 来编译您的 Linux 内核,以便您的 GCC 编译器自动改进您的 Linux 内核(例如,通过自动“添加”适当的检测代码).

您也可以写下您的 Linux kernel module

几个月后(可能是 2021 年 2 月),您可能会使用 Bismon for such a purpose (static analysis of the source code of your kernel, or module). Consider also using Frama-C or Clang static analyzer

注意 Rice's theorem and afraid of Heisenbugs

对于内核方面,也请在 kernelnewbies 上询问。

我的建议是尽量减少内核更改,如果可能和允许,编写更多的应用程序代码(可能与 systemd(1) 有关,我不太了解)和更少的内核代码。