/proc/irq/<irq>/smp_affinity

2,926 views

Published on

Published in: Technology, Business
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,926
On SlideShare
0
From Embeds
0
Number of Embeds
62
Actions
Shares
0
Downloads
19
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • /proc/irq/<irq>/smp_affinity

    1. 1. /proc/irq/<IRQ>/ smp_affinity @syuu122812年9月22日土曜日
    2. 2. cat /proc/interrupts12年9月22日土曜日
    3. 3. $ cat /proc/interrupts CPU0 CPU1 0: 36843 61973 IO-APIC-edge timer 1: 518 591 IO-APIC-edge i8042 8: 1 0 IO-APIC-edge rtc0 9: 387 321 IO-APIC-fasteoi acpi 12: 11236 79 IO-APIC-edge i8042 16: 0 0 IO-APIC-fasteoi uhci_hcd:usb6 17: 12 11 IO-APIC-fasteoi uhci_hcd:usb7 18: 0 0 IO-APIC-fasteoi uhci_hcd:usb8 19: 6531 235 IO-APIC-fasteoi ehci_hcd:usb2 20: 0 0 IO-APIC-fasteoi uhci_hcd:usb3 21: 85 69 IO-APIC-fasteoi uhci_hcd:usb4 22: 0 0 IO-APIC-fasteoi uhci_hcd:usb5 23: 20 15 IO-APIC-fasteoi ehci_hcd:usb1 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: 33199 31756 PCI-MSI-edge ahci 44: 19 1583 PCI-MSI-edge eth0 45: 10 11 PCI-MSI-edge mei 46: 41104 59303 PCI-MSI-edge i915 47: 170268 708 PCI-MSI-edge iwlwifi 48: 78 77 PCI-MSI-edge snd_hda_intel NMI: 1406 1430 Non-maskable interrupts LOC: 342351 327074 Local timer interrupts SPU: 0 0 Spurious interrupts PMI: 1406 1430 Performance monitoring interrupts IWI: 0 0 IRQ work interrupts RES: 83855 108903 Rescheduling interrupts CAL: 223 195 Function call interrupts TLB: 1486 1665 TLB shootdowns TRM: 0 6 Thermal event interrupts THR: 0 0 Threshold APIC interrupts MCE: 0 0 Machine check exceptions MCP: 11 11 Machine check polls ERR: MIS: 0 0 丁度良く複数コアへ分散されてる?12年9月22日土曜日
    4. 4. smp_affinity # cat /proc/irq/43/smp_affinity 3 # echo 1 > /proc/irq/43/smp_affinity 割り込み先CPU群をビットで指定する と、指定されたCPU群にラウンドロビ ンで割り込まれる これを書き換えればいいのか!12年9月22日土曜日
    5. 5. ー完ー12年9月22日土曜日
    6. 6. それでは#kernelvmらしくない # cat /proc/irq/43/smp_affinity 3 # echo 1 > /proc/irq/43/smp_affinity bitの立ってるコアへ割り込み分散 bitが一つならいつもそこへ割り込み これ、どうなってるんだろう?12年9月22日土曜日
    7. 7. イマドキなx86の割り込み CPU CPU CPU Local APIC Local APIC Timer Legacy PCI Local APIC IPI MSI 8259A Intr MSI Legacy Capable I/O APIC PCI Devices Devices 8259A PIC ICH(South bridge)12年9月22日土曜日
    8. 8. Local APIC CPU CPU CPU Local APIC Local APIC Timer Legacy PCI Local APIC IPI MSI 8259A Intr MSI Legacy Capable I/O APIC PCI Devices Devices 8259A PIC ICH(South bridge) CPU毎の割り込みコントローラ 割り込みを許可・マスクした り、EOIしたり システム全体で一意なAPIC IDを持つ 他のLAPICへ割り込める(IPI: Inter-processor Interrupt)12年9月22日土曜日
    9. 9. I/O APIC CPU CPU CPU Local APIC Local APIC Timer Legacy PCI Local APIC IPI MSI 8259A Intr MSI Legacy Capable I/O APIC PCI Devices Devices 8259A PIC ICH(South bridge) 限られたIRQを複数のPCIデバイスで共有 各IRQをどのLAPICへ転送するかを定義するRedirection Table(I/ O APIC上のレジスタ群)を持つ PCIデバイスはI/O APICを通じてLAPICへ割り込みメッセージを送信12年9月22日土曜日
    10. 10. MSI capable PCI devices CPU CPU CPU Local APIC Local APIC Timer Legacy PCI Local APIC IPI MSI 8259A Intr MSI Legacy Capable I/O APIC PCI Devices Devices 8259A PIC ICH(South bridge) 各デバイスが任意の数のIRQを持てる 各IRQの割り込み先LAPICはPCIデバイスのPCI Configuration Spaceに持つ PCIデバイスは直接LAPICへ割り込みメッセージを送信12年9月22日土曜日
    11. 11. 割り込み先の指定方法 Physical Destination Mode Destination FieldにAPIC IDを指定 「常に同じCPUへ割り込み」を実現 Logical Destination Mode(Flat Model) Destination Fieldのbitで宛先LAPIC群の範囲を表現 Delivery Mode Fixed 指定範囲の全てのLAPICへ割り込み Lowest Priority 指定範囲の中で、最もTPR(Task Priority Register)の 値が低いCPUへ割り込み12年9月22日土曜日
    12. 12. Lowest Priority Mode 指定範囲の中で、最もTPR(Task Priority Register)の値が低いLAPIC へ割り込み 最小値のTPRを持つLAPICが複数ある 場合はラウンドロビンで1つ選択12年9月22日土曜日
    13. 13. echo 1 > /proc/irq/<IRQ>/ smp_affinityした時に何が起きるのか MSIなPCIeデバイスで確かめてみる Intel Pro/1000(e1000e) PCI Configuration Spaceはrootな ら/sys/bus/pciから読める →ユーザランドから読める →もしかして:lspci12年9月22日土曜日
    14. 14. _人人 人人_ > lspci <  ̄Y^Y^Y^Y ̄12年9月22日土曜日
    15. 15. # lspci -vvvv -s 00:19.0 00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03) Subsystem: Lenovo Device 20ee Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0 Interrupt: pin A routed to IRQ 44 Region 0: Memory at f2600000 (32-bit, non-prefetchable) [size=128K] Region 1: Memory at f2625000 (32-bit, non-prefetchable) [size=4K] Region 2: I/O ports at 1840 [size=32] Capabilities: [c8] Power Management version 2 Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME- Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+ Address: 00000000fee0300c Data: 41b9 Capabilities: [e0] PCI Advanced Features AFCap: TP+ FLR+ AFCtrl: FLR- AFStatus: TP- Kernel driver in use: e1000e Kernel modules: e1000e 赤く塗った所がMSIのフィールドだけれど、こ れだと良く分からないのでlspciをforkして MSIフィールドを表示するツールを作成 https://gist.github.com/156877712年9月22日土曜日
    16. 16. # gcc -lpci msireg.c # ./a.out 00:19.0 Message Signalled Interrupts: 64bit+ Queue=0/0 Enable+ address_hi=0 address_lo=fee0300c dest_mode=logical redirection=lowpri dest_id=3 data=41b9 trigger=edge level=assert delivery_mode=lowpri vector=185 Logical modeでLowpri、destid=3、 vector=185になってる # echo 1 > /proc/irq/44/smp_affinity # ./a.out 00:19.0 Message Signalled Interrupts: 64bit+ Queue=0/0 Enable+ address_hi=0 address_lo=fee0100c dest_mode=logical redirection=lowpri dest_id=1 data=41b9 trigger=edge level=assert delivery_mode=lowpri vector=185 dest_idが1に書き換わった!12年9月22日土曜日
    17. 17. 余談 調子に乗ってユーザランドからフィー ルド書き換えたら何かおかしくなりま した カーネルさんと喧嘩してるか、フィー ルドの書き方間違えたか…12年9月22日土曜日
    18. 18. 参考資料 Intel® 64 and IA-32 Architectures Software Developer Manuals Intel® I/O Controller Hub 10 (ICH10) Family Datasheet linux/Documentation/IRQ-affinity.txt Understanding the Linux Kernel, 3rd Edition PCI Local Bus Specification Revision 3.0 最近のPCアーキテクチャにおける割り込みルーティングの仕組み /proc/irq/<IRQ>/smp_affinityの書き換えでPCIコンフィグレ ーション空間はどのように書き換わるか Interrupts on xv612年9月22日土曜日

    ×