質問: Linux-OSでのマルチコア環境で割込み処理の負荷分散を行う、irqbalanceデーモンについておしえてください。 CPU00,01,02,03と4コアで動作してるシステムなんですが、なぜかソフトウェア割込みが特定のCPUにのみ割り込まれちゃいます。 /proc/interruptsを秒間でのぞいてもCPU03だけガシガシとカウントアップされ、まったくもって負荷分散してくれません。 irqbalanceデーモンってどんなロジックで割込みの負荷分散を実現してるのでしょうか? また、ネットでいろいろ調べると[irqbalanceのOneShotモード]という言葉を見かけます。 一回、分散させてあとは張り付き、みたいなことかかれてるのですが、このモードが有効になってるということでしょうか。。。 このirqbalanceデーモンがこのOneShotモードで動いてるのかどうか、を知るにはドコを確認すればよいでしょうか?? 詳しいかた、教えていただけるとうれしいです。
回答: >この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は割り込み回数が極端に少なかったですが。 ってことで、ソフトウェアクロック を別のCPUに振るのは正確性に欠ける...ってことで、使用CPUが変動しないように制御でもしているんじゃないですかね? /proc/irq/0/smp_affinityの値は00000001でしたし。 # 0000000fに変更してみてもCPU0しか使われないですな。