给定接口名称(例如 eth0),以编程方式确定与网络接口关联的 IRQ 的最可靠方法是什么?
我对尽力而为的方法没问题,但我希望它适用于各种驱动程序/配置(即没有对每个驱动程序进行特殊处理),并且我想避免误报。我还想避免违反此处概述的与 sysfs 交互的规则,但我可以在必要时打破它们。我将在下面的示例中打破它们。
解析/proc/interrupts
并不理想,因为与 IRQ 关联的名称是特定于驱动程序的,并且不可靠,因为没有什么可以阻止两个设备具有相同名称的 IRQ。
如果我可以执行以下操作,那就太好了:
$ ls /sys/class/net/eth2/device/msi_irqs | cat /sys/class/net/eth2/device/irq
61 62 63
Run Code Online (Sandbox Code Playgroud)
我已经使用/proc/interrupts
.
但这并不适用于所有驱动程序。感兴趣的 IRQ 文件位于不同的位置,或者无处可寻。
vmxnet3 接口:
$ readlink -e /sys/class/net/eth2
/sys/devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth2
$ ls $(readlink -e /sys/class/net/eth2)/../../msi_irqs
61 62 63
Run Code Online (Sandbox Code Playgroud)
感兴趣的 msi_irqs 是从 /sys/class/net/eth2 符号链接向上的两个目录。msi_irqs 三个目录上面都跟我无关。
虚拟界面:
$ readlink -e /sys/class/net/eth1
/sys/devices/pci0000:00/0000:00:03.0/virtio0/net/eth1
ls $(readlink -e /sys/class/net/eth1)/../../../msi_irqs
26 27 28
Run Code Online (Sandbox Code Playgroud)
感兴趣的 msi_irqs 是从 /sys/class/net/eth1 符号链接向上的三个目录。此层次结构中没有其他 msi_irqs 文件。
hv_netvsc 接口:
$ readlink -e /sys/class/net/eth0
/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/VMBus:00/vmbus_0_11/net/eth0
Run Code Online (Sandbox Code Playgroud)
IRQ …