Linux file – /proc/interrupts , iomem , ioports

Loading

測試環境為 CentOS7 x86_64 (虛擬機, CPUx2)

/proc/interrupts

IRQ (Interrupt request) 是當週邊裝置需要資料的傳輸時會產生一個中斷請求給 CPU ,並請 CPU 停止工作並幫忙處理處理週邊資料的傳輸,每個 I/O 會有各自的 IRQ (中斷) ,對應的 IRQ 可以參考檔案 /proc/interrupts

[root@localhost ~]# cat /proc/interrupts
            CPU0       CPU1       
   0:         82          0   IO-APIC-edge      timer
   1:         10          0   IO-APIC-edge      i8042
   8:          1          0   IO-APIC-edge      rtc0
   9:          0          0   IO-APIC-fasteoi   acpi
  12:         16          0   IO-APIC-edge      i8042
  14:          0          0   IO-APIC-edge      ata_piix
  15:        108       7072   IO-APIC-edge      ata_piix
  16:        335          0   IO-APIC-fasteoi   vmwgfx, snd_ens1371
  17:      10432       7735   IO-APIC-fasteoi   ehci_hcd:usb1, ioc0
  18:        157          0   IO-APIC-fasteoi   uhci_hcd:usb2
  19:      11461        585   IO-APIC-fasteoi   ens33
  24:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  25:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  26:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  27:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  28:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  29:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  30:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  31:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  32:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  33:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  34:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  35:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  36:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  37:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  38:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  39:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  40:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  41:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  42:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  43:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  44:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  45:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  46:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  47:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  48:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  49:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  50:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  51:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  52:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  53:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  54:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  55:          0          0   PCI-MSI-edge      PCIe PME, pciehp
  56:         14       1126   PCI-MSI-edge      vmw_vmci
  57:          0          0   PCI-MSI-edge      vmw_vmci
 NMI:          0          0   Non-maskable interrupts
 LOC:     269073     381094   Local timer interrupts
 SPU:          0          0   Spurious interrupts
 PMI:          0          0   Performance monitoring interrupts
 IWI:       2921       3304   IRQ work interrupts
 RTR:          0          0   APIC ICR read retries
 RES:      16738      17488   Rescheduling interrupts
 CAL:       5197       6003   Function call interrupts
 TLB:       2722        607   TLB shootdowns
 TRM:          0          0   Thermal event interrupts
 THR:          0          0   Threshold APIC interrupts
 DFR:          0          0   Deferred Error APIC interrupts
 MCE:          0          0   Machine check exceptions
 MCP:         25         25   Machine check polls
 ERR:          0
 MIS:          0
 PIN:          0          0   Posted-interrupt notification event
 PIW:          0          0   Posted-interrupt wakeup event
  • 第一個數字
    所代表的是 IRQ
  • 後面兩個數字
    代表的是該 IRQ 使用 CPU0 與 CPU1 的累計次數
  • 中斷的種類
    中斷的種類如下:

    • Level-signalled interrupts
      使用專用的中斷線來產生中斷.
    • Message-signalled interrupts
      如 PCI Express 採用的就是 MSI 的中斷產生的方式,採用 in-band (控制訊號與資料同線路) 的方式,有分兩種 MSI 與 MSI-X .
      MSI (PCI 2.2 開始採用) 支援 1, 2, 4, 8, 16 或 32 中斷上限,MSI-X (PCI 3.0 開始採用) 支援 2048 中斷上限.
    • Non-maskable interrupts
      當中斷為 masked 時 CPU 是可以忽略它的,但是當收到 NMI (Non-maskable interrupts) 中斷時代表是相當嚴重的硬體錯誤不能被忽略.
    • System management interrupts
      SMI 與 NMI 類似,它們直接在 CPU 使用特殊的線路,並且通常不能被屏蔽.
    • Advanced programmable interrupt controller
      APIC (Advanced Programmable Interrupt Controller) 為進階的 IRQ 管理器,APIC 有兩種 local APIC (LAPIC) 以及 I/O APIC

      • local APIC (LAPIC)
        每一個 CPU 都有自己的 LAPIC,主要用於管理 SMP(Symmetric multiprocessing) 系統中某些特定處理器的所有外部中斷,此外,它們都能夠接受和產生 LAPICs 之間的 inter-processor interrupts (IPIs).
        處理器間中斷 (Inter-Processor Interrupt,IPI) 在多處理器系統中當一個處理器向另一個處理器發出的中斷行為即為 IPI
      • I/O APIC
        另外一種是 I/O 的 APIC 用來處理關於 I/O 設備引起的中斷,這 I/O APIC 存在主板上,包含 redirection table ,用來路由周邊設備中斷到一個或多個 Local APIC.

    在 interrupts 檔案常見的中斷有.

    1. IO-APIC-fasteoi
      The -fasteoi interrupts are level interrupts that are triggered until the interrupt event is acknowledged in the programmable interrupt controller (PIC).
      當裝置發送中斷信號時,直到 CPU 處理中斷之前都會保持特定的狀態.
    2. IO-APIC-edge
      The -edge interrupt are edge triggered. This is a rising level on the interrupt line.
      發出中斷請求後立即結束中斷.
    3. PCI-MSI-edge
      MSI(Message Signaled Interrupts) 是 PCI Express 中斷產生的方式.
  • 最後就是裝置 IO 名稱

其他沒有 IRQ 數字的屬於特殊中斷,如 NMI (Non-Maskable Interrupts) 與 SMI (System Management Interrupts).

Linux 系統有一個 irqbalance 服務會定期強制中斷應用程式,讓每個應用程式能更公平的方式分享 CPU 的資源,請參考 https://benjr.tw/93539

我們也可以強制指定 IRQ 要使用哪一個 CPU 核心來處理,透過設定 /proc/irq/IRQ_NUMBER/smp_affinity 來指定 IRQ 中斷 與 CPU 的關聯 (一個或是多個 CPU 核心),請參考 CPU Affinity taskset (cpuset) – https://benjr.tw/99353

/proc/iomem

IO 裝置對應到的記憶體位址可以參考這個檔案.

[root@localhost ~]# cat /proc/iomem
00000000-00000fff : reserved
00001000-0009ebff : System RAM
0009ec00-0009ffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000c7fff : Video ROM
000ca000-000cafff : Adapter ROM
000cc000-000cffff : PCI Bus 0000:00
000d0000-000d3fff : PCI Bus 0000:00
000d4000-000d7fff : PCI Bus 0000:00
000d8000-000dbfff : PCI Bus 0000:00
000dc000-000fffff : reserved
  000f0000-000fffff : System ROM
00100000-3fedffff : System RAM
  01000000-016c72fe : Kernel code
  016c72ff-01b3b4bf : Kernel data
  01d04000-01ffffff : Kernel bss
3fee0000-3fefefff : ACPI Tables
3feff000-3fefffff : ACPI Non-volatile Storage
3ff00000-3fffffff : System RAM
c0000000-febfffff : PCI Bus 0000:00
  c0000000-c0007fff : 0000:00:0f.0
  c0008000-c000bfff : 0000:00:10.0
  e5b00000-e5bfffff : PCI Bus 0000:22
  e5c00000-e5cfffff : PCI Bus 0000:1a
  e5d00000-e5dfffff : PCI Bus 0000:12
  e5e00000-e5efffff : PCI Bus 0000:0a
  e5f00000-e5ffffff : PCI Bus 0000:21
  e6000000-e60fffff : PCI Bus 0000:19
  e6100000-e61fffff : PCI Bus 0000:11
  e6200000-e62fffff : PCI Bus 0000:09
  e6300000-e63fffff : PCI Bus 0000:20
  e6400000-e64fffff : PCI Bus 0000:18
  e6500000-e65fffff : PCI Bus 0000:10
  e6600000-e66fffff : PCI Bus 0000:08
  e6700000-e67fffff : PCI Bus 0000:1f
  e6800000-e68fffff : PCI Bus 0000:17
  e6900000-e69fffff : PCI Bus 0000:0f
  e6a00000-e6afffff : PCI Bus 0000:07
  e6b00000-e6bfffff : PCI Bus 0000:1e
  e6c00000-e6cfffff : PCI Bus 0000:16
  e6d00000-e6dfffff : PCI Bus 0000:0e
  e6e00000-e6efffff : PCI Bus 0000:06
  e6f00000-e6ffffff : PCI Bus 0000:1d
  e7000000-e70fffff : PCI Bus 0000:15
  e7100000-e71fffff : PCI Bus 0000:0d
  e7200000-e72fffff : PCI Bus 0000:05
  e7300000-e73fffff : PCI Bus 0000:1c
  e7400000-e74fffff : PCI Bus 0000:14
  e7500000-e75fffff : PCI Bus 0000:0c
  e7600000-e76fffff : PCI Bus 0000:04
  e7700000-e77fffff : PCI Bus 0000:1b
  e7800000-e78fffff : PCI Bus 0000:13
  e7900000-e79fffff : PCI Bus 0000:0b
  e7a00000-e7afffff : PCI Bus 0000:03
  e7b00000-e7ffffff : PCI Bus 0000:02
  e8000000-efffffff : 0000:00:0f.0
    e8000000-efffffff : vmwgfx probe
  f0000000-f7ffffff : PCI MMCONFIG 0000 [bus 00-7f]
    f0000000-f7ffffff : reserved
      f0000000-f7ffffff : pnp 00:06
  fb500000-fb5fffff : PCI Bus 0000:22
  fb600000-fb6fffff : PCI Bus 0000:1a
  fb700000-fb7fffff : PCI Bus 0000:12
  fb800000-fb8fffff : PCI Bus 0000:0a
  fb900000-fb9fffff : PCI Bus 0000:21
  fba00000-fbafffff : PCI Bus 0000:19
  fbb00000-fbbfffff : PCI Bus 0000:11
  fbc00000-fbcfffff : PCI Bus 0000:09
  fbd00000-fbdfffff : PCI Bus 0000:20
  fbe00000-fbefffff : PCI Bus 0000:18
  fbf00000-fbffffff : PCI Bus 0000:10
  fc000000-fc0fffff : PCI Bus 0000:08
  fc100000-fc1fffff : PCI Bus 0000:1f
  fc200000-fc2fffff : PCI Bus 0000:17
  fc300000-fc3fffff : PCI Bus 0000:0f
  fc400000-fc4fffff : PCI Bus 0000:07
  fc500000-fc5fffff : PCI Bus 0000:1e
  fc600000-fc6fffff : PCI Bus 0000:16
  fc700000-fc7fffff : PCI Bus 0000:0e
  fc800000-fc8fffff : PCI Bus 0000:06
  fc900000-fc9fffff : PCI Bus 0000:1d
  fca00000-fcafffff : PCI Bus 0000:15
  fcb00000-fcbfffff : PCI Bus 0000:0d
  fcc00000-fccfffff : PCI Bus 0000:05
  fcd00000-fcdfffff : PCI Bus 0000:1c
  fce00000-fcefffff : PCI Bus 0000:14
  fcf00000-fcffffff : PCI Bus 0000:0c
  fd000000-fd0fffff : PCI Bus 0000:04
  fd100000-fd1fffff : PCI Bus 0000:1b
  fd200000-fd2fffff : PCI Bus 0000:13
  fd300000-fd3fffff : PCI Bus 0000:0b
  fd400000-fd4fffff : PCI Bus 0000:03
  fd500000-fdffffff : PCI Bus 0000:02
    fd500000-fd50ffff : 0000:02:01.0
    fd5c0000-fd5dffff : 0000:02:01.0
      fd5c0000-fd5dffff : e1000
    fd5ef000-fd5effff : 0000:02:03.0
      fd5ef000-fd5effff : ehci_hcd
    fdff0000-fdffffff : 0000:02:01.0
      fdff0000-fdffffff : e1000
  fe000000-fe7fffff : 0000:00:0f.0
    fe000000-fe7fffff : vmwgfx probe
  fe800000-fe9fffff : pnp 00:06
  feba0000-febbffff : 0000:00:10.0
    feba0000-febbffff : mpt
  febc0000-febdffff : 0000:00:10.0
    febc0000-febdffff : mpt
  febfe000-febfffff : 0000:00:07.7
fec00000-fec0ffff : reserved
  fec00000-fec003ff : IOAPIC 0
fed00000-fed003ff : HPET 0
  fed00000-fed003ff : pnp 00:04
fee00000-fee00fff : Local APIC
  fee00000-fee00fff : reserved
fffe0000-ffffffff : reserved
  • 第一行數字
    代表記憶體位址
  • 第二行有文字也有數字
    數字代表 PCI 的裝置編號 , 如 e1000 的 0000:02:01.0
    匯流排(bus number) 0000:02
    裝置(device number) 01
    功能(function number) 0

/proc/ioports

IO 裝置位址對應的名稱可以參考這個檔案.

[root@localhost ~]# cat /proc/ioports
0000-0cf7 : PCI Bus 0000:00
  0000-001f : dma1
  0020-0021 : PNP0001:00
    0020-0021 : pic1
  0040-0043 : timer0
  0050-0053 : timer1
  0060-0060 : keyboard
  0061-0061 : PNP0800:00
  0064-0064 : keyboard
  0070-0071 : rtc0
  0080-008f : dma page reg
  00a0-00a1 : PNP0001:00
    00a0-00a1 : pic2
  00c0-00df : dma2
  00f0-00ff : fpu
  0170-0177 : 0000:00:07.1
    0170-0177 : ata_piix
  01f0-01f7 : 0000:00:07.1
    01f0-01f7 : ata_piix
  0376-0376 : 0000:00:07.1
    0376-0376 : ata_piix
  03c0-03df : vga+
  03f6-03f6 : 0000:00:07.1
    03f6-03f6 : ata_piix
  03f8-03ff : serial
  04d0-04d1 : PNP0001:00
  0cf0-0cf1 : pnp 00:00
0cf8-0cff : PCI conf1
0d00-feff : PCI Bus 0000:00
  1000-103f : 0000:00:07.3
    1000-1003 : ACPI PM1a_EVT_BLK
    1004-1005 : ACPI PM1a_CNT_BLK
    1008-100b : ACPI PM_TMR
    100c-100f : ACPI GPE0_BLK
    1010-1015 : ACPI CPU throttle
  1040-104f : 0000:00:07.3
    1040-104f : pnp 00:00
  1060-106f : 0000:00:07.1
    1060-106f : ata_piix
  1070-107f : 0000:00:0f.0
    1070-107f : vmwgfx probe
  1080-10bf : 0000:00:07.7
    1080-10bf : vmw_vmci
  1400-14ff : 0000:00:10.0
  2000-3fff : PCI Bus 0000:02
    2000-203f : 0000:02:01.0
      2000-203f : e1000
    2040-207f : 0000:02:02.0
      2040-207f : Ensoniq AudioPCI
    2080-209f : 0000:02:00.0
      2080-209f : uhci_hcd
  4000-4fff : PCI Bus 0000:03
  5000-5fff : PCI Bus 0000:0b
  6000-6fff : PCI Bus 0000:13
  7000-7fff : PCI Bus 0000:1b
  8000-8fff : PCI Bus 0000:04
  9000-9fff : PCI Bus 0000:0c
  a000-afff : PCI Bus 0000:14
  b000-bfff : PCI Bus 0000:1c
  c000-cfff : PCI Bus 0000:05
  d000-dfff : PCI Bus 0000:0d
  e000-efff : PCI Bus 0000:15
  fce0-fcff : pnp 00:06
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料