- ベストアンサー
マルチコア環境での割込み処理の負荷分散について
- Linux-OSのマルチコア環境で割込み処理の負荷分散を行うirqbalanceデーモンについて説明します。
- 特定のCPUにしか割り込まれない問題やOneShotモードという機能についても詳しく解説します。
- irqbalanceデーモンがOneShotモードで動作しているかどうか、確認する方法について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>このirqbalanceデーモンがこのOneShotモードで動いてるのかどうか、を知るにはドコを確認すればよいでしょうか?? Redhat系列なら/etc/sysconfig/irqbalance辺りでしょうかね。 ウチのだと…timer割り込みはCPU0が処理しているみたいですが。 # 半角スペースは削られるので崩れて見えますけど、下記の通り。 cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 909419869 17594 17590 17587 IO-APIC-edge timer 1: 2 1 2 3 IO-APIC-edge i8042 8: 2 0 1 2 IO-APIC-edge rtc 9: 0 0 0 0 IO-APIC-level acpi 12: 2 0 1 2 IO-APIC-edge i8042 50: 0 0 0 0 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2 58: 7778 0 8769346 0 PCI-MSI ahci 66: 188 0 0 11459104 PCI-MSI eth0 82: 287 0 0 0 PCI-MSI snd_hda_intel 177: 0 0 0 0 IO-APIC-level uhci_hcd:usb5 185: 0 0 0 0 IO-APIC-level uhci_hcd:usb4 193: 0 0 0 0 IO-APIC-level uhci_hcd:usb3 NMI: 0 0 0 0 LOC: 909529896 909529930 909529923 909529935 ERR: 0 MIS: 0 SATAはCPU2が、EthernetはCPU3が処理している…っぽいですな。 CPU1だけヒマしているようにも見えますが。 ちなみに、もう1台のサーバで確認するとtimerはCPU0が処理していました。 # やっぱりCPU1は割り込み回数が極端に少なかったですが。 http://hagio.org/wiki/index.php/Linux/%E6%99%82%E8%A8%88 ってことで、ソフトウェアクロック を別のCPUに振るのは正確性に欠ける…ってことで、使用CPUが変動しないように制御でもしているんじゃないですかね? /proc/irq/0/smp_affinityの値は00000001でしたし。 # 0000000fに変更してみてもCPU0しか使われないですな。
補足
>>このirqbalanceデーモンがこのOneShotモードで動いてるのかどうか、を知るにはドコを確認すればよいでしょうか?? >Redhat系列なら/etc/sysconfig/irqbalance辺りでしょうかね。 ありがとうございます。みてみたら、こんなになってました。 ↓これは、、、yesになってないので、、ONESHOTにはなってないということですよね。。 ↓ # irqbalance is a daemon process that distributes interrupts across # CPUS on SMP systems. The default is to rebalance once every 10 # seconds. There is one configuration option: # # ONESHOT=yes # after starting, wait for a minute, then look at the interrupt # load and balance it once; after balancing exit and do not change # it again. ONESHOT=