替代 /proc/interrupts

cti*_*ist 0 networking linux interrupts

我想获取有关分配给我的网卡的中断的信息。除了 /proc/interrupts 之外,还有其他方法吗?

Kyl*_*ndt 6

内核信息有两个通用接口(除了 syscalls ),它们被实现为文件系统。这两个文件系统是 /proc 和 /sys。sys 比 proc 和更新的更有条理,但不像用户友好。所以对程序员来说更好一点,避免解析。

如果您想要来自 sys 文件系统的信息(lspci 对其进行解析(请参阅由 输出的某个文件strace -o somefile lspci)):

$ lspci | grep -i network
00:19.0 Ethernet controller: Intel Corporation 82566DC Gigabit Network Connection (rev 02)
$ cat /sys/devices/pci0000:00/0000:00:19.0/irq
2299
Run Code Online (Sandbox Code Playgroud)

请注意两个命令之间的 00:19 关系。irq 文件返回的数字将与相关设备的 /proc/interrupts 的第一列相同。

如果您想了解有关 sys 文件系统的更多信息,请查看内核源代码中包含的文档,例如 /usr/src/linux-source-2.6.27/Documentation/filesystems

更新:

有没有办法将输出与接口名称连接起来?

当然,如果你玩弄 sys,你会发现有很多符号链接指向 sys 中的其他位置。例如,在 /sys/class/net 中:

[kbrandt@kb: /sys/class/net] ls -l
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 eth0 -> ../../devices/pci0000:00/0000:00:19.0/net/eth0
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 pan0 -> ../../devices/virtual/net/pan0
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 vmnet1 -> ../../devices/virtual/net/vmnet1
lrwxrwxrwx 1 root root 0 2009-11-02 11:01 vmnet8 -> ../../devices/virtual/net/vmnet8
Run Code Online (Sandbox Code Playgroud)

因此,要获得 eth0 的 irq,您只需:

cat /sys/class/net/eth0/../../irq
Run Code Online (Sandbox Code Playgroud)