web-dev-qa-db-ja.com

ネットワークインターフェイスに関連付けられているIRQをプログラムで決定します

インターフェイスの名前(例:eth0)を指定して、ネットワークインターフェイスに関連付けられたIRQをプログラムで決定するための最も信頼できる方法は何ですか?

私はベストエフォートアプローチで大丈夫ですが、さまざまなドライバー/構成(つまり、各ドライバーの特別な処理なし)で動作し、誤検知を回避したいと思います。また、概説されているsysfsとの対話に関するルールに違反しないようにしたい ここ ですが、必要に応じてそれらを破っても大丈夫です。以下の例でそれらを壊します。

_/proc/interrupts_の解析は理想的ではありません。IRQに関連付けられた名前はドライバー固有であり、2つのデバイスが同じ名前のIRQを持つことを妨げるものがないため、信頼できません。

次のようなことができたらいいのにと思います。

_$ ls /sys/class/net/eth2/device/msi_irqs | cat /sys/class/net/eth2/device/irq
61  62  63
_

この場合、_/proc/interrupts_を使用して、これらが探しているIRQであることを確認しました。

ただし、これはすべてのドライバーで機能するわけではありません。対象の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シンボリックリンクから2つ上のディレクトリです。 3つ上のディレクトリの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_irqは、/ sys/class/net/eth1シンボリックリンクから3つ上のディレクトリです。この階層には他の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にないようです。私は、唯一の「hyperv」IRQのために/ proc/interruptsをgreppingする必要があります。

私が使用した方法は、$(readlink -e /sys/class/net/eth0)のディレクトリから_/sys/devices/pci<domain>:<bus>/_までの_msi_irqs_またはirqファイルを検索することです。私の懸念は、これを行うことで間違ったIRQを取得する可能性があることです。インターフェイスに関連付けられたIRQが_msi_irqs_またはirqに公開されない理由があるかもしれませんが、祖先デバイスのIRQは公開されます。最終的には祖先デバイスのIRQになりますが、これは私が望むものではない可能性があります。

ネットワークインターフェイスに関連付けられているIRQを確実に決定するためのより良い方法はありますか?そうでない場合、上記のメソッドはインターフェイスに関連付けられていないIRQを返すことができますか?

6
tgnottingham

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 

より多くのことをするために、manページを読んでください:

DSTAT(1)DSTAT(1)

NAMEdstat-システムリソース統計を生成するための多用途ツール

構文dstat [-afv] [options ..] [delay [count]]

説明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

4
Ijaz Ahmad Khan