• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
/proc/irq/<irq>/smp_affinity
 

/proc/irq/<irq>/smp_affinity

on

  • 2,041 views

 

Statistics

Views

Total Views
2,041
Views on SlideShare
2,039
Embed Views
2

Actions

Likes
6
Downloads
9
Comments
0

1 Embed 2

https://twitter.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

/proc/irq/<irq>/smp_affinity /proc/irq/<irq>/smp_affinity Presentation Transcript

  • /proc/irq/<IRQ>/ smp_affinity @syuu122812年9月22日土曜日
  • cat /proc/interrupts12年9月22日土曜日
  • $ 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日土曜日
  • smp_affinity # cat /proc/irq/43/smp_affinity 3 # echo 1 > /proc/irq/43/smp_affinity 割り込み先CPU群をビットで指定する と、指定されたCPU群にラウンドロビ ンで割り込まれる これを書き換えればいいのか!12年9月22日土曜日
  • ー完ー12年9月22日土曜日
  • それでは#kernelvmらしくない # cat /proc/irq/43/smp_affinity 3 # echo 1 > /proc/irq/43/smp_affinity bitの立ってるコアへ割り込み分散 bitが一つならいつもそこへ割り込み これ、どうなってるんだろう?12年9月22日土曜日
  • イマドキな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日土曜日
  • 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日土曜日
  • 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日土曜日
  • 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日土曜日
  • 割り込み先の指定方法 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日土曜日
  • Lowest Priority Mode 指定範囲の中で、最もTPR(Task Priority Register)の値が低いLAPIC へ割り込み 最小値のTPRを持つLAPICが複数ある 場合はラウンドロビンで1つ選択12年9月22日土曜日
  • echo 1 > /proc/irq/<IRQ>/ smp_affinityした時に何が起きるのか MSIなPCIeデバイスで確かめてみる Intel Pro/1000(e1000e) PCI Configuration Spaceはrootな ら/sys/bus/pciから読める →ユーザランドから読める →もしかして:lspci12年9月22日土曜日
  • _人人 人人_ > lspci <  ̄Y^Y^Y^Y ̄12年9月22日土曜日
  • # 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日土曜日
  • # 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日土曜日
  • 余談 調子に乗ってユーザランドからフィー ルド書き換えたら何かおかしくなりま した カーネルさんと喧嘩してるか、フィー ルドの書き方間違えたか…12年9月22日土曜日
  • 参考資料 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日土曜日