インターフェイスの名前(例: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を返すことができますか?
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