/proc/interrupts
Linuxにおける割り込み処理について調べている
/proc/interruptを表示していみて気づいたことを書いてみる
CPU0 CPU1 0: 51 13 IO-APIC-edge timer 1: 1671 1363 IO-APIC-edge i8042 8: 1 0 IO-APIC-edge rtc0 9: 0 0 IO-APIC-fasteoi acpi 12: 3 1 IO-APIC-edge i8042 16: 526 122 IO-APIC-fasteoi uhci_hcd:usb3, firewire_ohci 18: 3 1 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb8 19: 0 0 IO-APIC-fasteoi uhci_hcd:usb5, uhci_hcd:usb7 21: 57342 452 IO-APIC-fasteoi uhci_hcd:usb4 23: 75914 32736 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb6 42: 304046 33 PCI-MSI-edge eth0 43: 48398 50436 PCI-MSI-edge ahci 44: 91449 133703 PCI-MSI-edge i915 45: 674 723 PCI-MSI-edge hda_intel NMI: 0 0 Non-maskable interrupts LOC: 1706540 1740356 Local timer interrupts SPU: 0 0 Spurious interrupts PMI: 0 0 Performance monitoring interrupts IWI: 0 0 IRQ work interrupts RES: 156071 177507 Rescheduling interrupts CAL: 1145 1086 Function call interrupts TLB: 29280 47256 TLB shootdowns TRM: 0 0 Thermal event interrupts THR: 0 0 Threshold APIC interrupts MCE: 0 0 Machine check exceptions MCP: 23 23 Machine check polls ERR: 1 MIS: 0
まず割り込みはtimer、マウスとキーボード(i8042)、イーサネット(eth0)などのハードウェアから生じる割り込みと
TLBフラッシュのためのカーネルからくる割り込みがある
ハードウェアの割り込みがどのCoreに入るかはラウンドロビンで決まるとか書いてあったが、どうも偏りがあるように思える(eth0とか)
関係ないが、現在の割り込みコントローラはAPIC(Advanced PIC)というもので、APICはIOAPICとLocalAPICで構成される。
IOAPICがデバイスからの割り込みを受け、Coreごとに存在するLocalAPICに割り込みをルーティングする
ルーティングの方式としてLinuxはLowest priorityモードを使用していて、すべてのCoreが同じ優先度なので結果的に割り込み先がラウンドロビンで選択されるらしい
それを考えて、割り込みの回数がCore1とCore2で違わないか?と思ったわけである
ちなみにCore毎に存在する割り込みもある。Local timerはその一例である
もう少しAPICについて調べてみようと思う