以编程方式确定与网络接口关联的 IRQ

以编程方式确定与网络接口关联的 IRQ

在给定接口名称(例如 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

我已经验证这些是我在本例中寻找的 IRQ /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

感兴趣的 msi_irqs 是 /sys/class/net/eth2 符号链接上方的两个目录。 msi_irqs 上面的三个目录与我无关。

virtio界面:

$ 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

感兴趣的 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

IRQ 信息似乎不在 sysfs 中。我必须求助于 grep /proc/interrupts 来获取唯一的“hyperv”IRQ。

我所采用的方法是从目录中搜索到$(readlink -e /sys/class/net/eth0)但不包括或/sys/devices/pci<domain>:<bus>/文件。我担心这样做可能会得到错误的 IRQ。也许由于某种原因,与接口关联的 IRQ 不会发布到或,但祖先设备的 IRQ 将被发布。我最终会得到祖先设备的 IRQ,这可能不是我想要的。msi_irqsirqmsi_irqsirq

是否有更好的方法来可靠地确定与网络接口关联的 IRQ?如果不是,上述方法是否可以返回与接口无关的IRQ?

答案1

你有没有尝试过dstat

以我的 enp025 以太网接口为例:

dstat -i -N enp0s25 ----interrupts--- 33 34 35

5     0     0 
6     0     0 
8     0    26 
9     0     0 
7     0     0 
10     0     0 

要执行更多操作,请阅读手册页:

DSTAT(1) DSTAT(1)

名称 dstat - 用于生成系统资源统计信息的多功能工具

概要 dstat [-afv] [选项..] [延迟 [计数]]

描述 Dstat 是 vmstat、iostat 和 ifstat 的通用替代品。 Dstat 克服了一些限制并添加了一些额外的功能。

   Dstat allows you to view all of your system resources instantly, you can eg. compare disk usage in combination with interrupts from
   your IDE controller, or compare the network bandwidth numbers directly with the disk throughput (in the same interval).

   Dstat also cleverly gives you the most detailed information in columns and clearly indicates in what magnitude and unit the output is
   displayed. Less confusion, less mistakes, more efficient.

   Dstat is unique in letting you aggregate block device throughput for a certain diskset or network bandwidth for a group of interfaces,
   ie. you can see the throughput for all the block devices that make up a single filesystem or storage system.

   Dstat allows its data to be directly written to a CSV file to be imported and used by OpenOffice, Gnumeric or Excel to create graphs.


   Note
   Users of Sleuthkit might find Sleuthkit’s dstat being renamed to datastat to avoid a name conflict. See Debian bug #283709 for more
   information.

选项 -c, --cpu 启用 cpu 统计信息(系统、用户、空闲、等待、硬件中断、软件中断)

   -C 0,3,total
          include cpu0, cpu3 and total (when using -c/--cpu)

   -d, --disk
          enable disk stats (read, write)

   -D total,hda
          include total and hda (when using -d/--disk)

   -g, --page
          enable page stats (page in, page out)

   -i, --int
          enable interrupt stats

   -I 5,10
          include interrupt 5 and 10 (when using -i/--int)

   -l, --load
          enable load average stats (1 min, 5 mins, 15mins)

   -m, --mem
          enable memory stats (used, buffers, cache, free)

   -n, --net
          enable network stats (receive, send)
   -N eth1,total
          include eth1 and total (when using -n/--net)

   -p, --proc
          enable process stats (runnable, uninterruptible, new)

   -r, --io
          enable I/O request stats (read, write requests)

   -s, --swap
          enable swap stats (used, free)

   -S swap1,total
          include swap1 and total (when using -s/--swap)

   -t, --time
          enable time/date output

   -T, --epoch
          enable time counter (seconds since epoch)

   -y, --sys
          enable system stats (interrupts, context switches)

   --aio  enable aio stats (asynchronous I/O)

   --fs, --filesystem
          enable filesystem stats (open files, inodes)

   --ipc  enable ipc stats (message queue, semaphores, shared memory)

`

和很多其他选择。

也可以看看 : lspci -v -x

相关内容