네트워크 인터페이스와 관련된 IRQ를 프로그래밍 방식으로 결정

네트워크 인터페이스와 관련된 IRQ를 프로그래밍 방식으로 결정

인터페이스 이름(예: eth0)이 지정된 네트워크 인터페이스와 관련된 IRQ를 프로그래밍 방식으로 결정하는 가장 신뢰할 수 있는 방법은 무엇입니까?

나는 최선의 접근 방식에 동의하지만 다양한 드라이버/구성에서 작동하기를 원하며(즉, 각 드라이버에 대해 특별한 처리가 없음) 오탐을 피하고 싶습니다. 또한 sysfs와 상호작용하는 규칙을 위반하는 것을 피하고 싶습니다.여기, 하지만 필요한 경우 이를 깨뜨릴 수 있습니다. 아래 예에서 이를 분석하겠습니다.

/proc/interruptsIRQ와 관련된 이름은 드라이버마다 다르며 두 장치가 동일한 이름을 가진 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_irq는 /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_irq는 /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에 없는 것 같습니다. 고유한 "hyperv" IRQ를 얻으려면 grep /proc/interrupts에 의존해야 했습니다.

내가 사용한 방법은 디렉토리에서 파일을 검색 $(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

관련 정보