マルチコア環境での割込み処理の負荷分散について

このQ&Aのポイント
  • Linux-OSのマルチコア環境で割込み処理の負荷分散を行うirqbalanceデーモンについて説明します。
  • 特定のCPUにしか割り込まれない問題やOneShotモードという機能についても詳しく解説します。
  • irqbalanceデーモンがOneShotモードで動作しているかどうか、確認する方法について教えてください。
回答を見る
  • ベストアンサー

irqbalance って

Linux-OSでのマルチコア環境で割込み処理の負荷分散を行う、irqbalanceデーモンについておしえてください。 CPU00,01,02,03と4コアで動作してるシステムなんですが、なぜかソフトウェア割込みが特定のCPUにのみ割り込まれちゃいます。 /proc/interruptsを秒間でのぞいてもCPU03だけガシガシとカウントアップされ、まったくもって負荷分散してくれません。 irqbalanceデーモンってどんなロジックで割込みの負荷分散を実現してるのでしょうか? また、ネットでいろいろ調べると[irqbalanceのOneShotモード]という言葉を見かけます。 一回、分散させてあとは張り付き、みたいなことかかれてるのですが、このモードが有効になってるということでしょうか。。。 このirqbalanceデーモンがこのOneShotモードで動いてるのかどうか、を知るにはドコを確認すればよいでしょうか?? 詳しいかた、教えていただけるとうれしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.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しか使われないですな。

Angela-Aki
質問者

補足

>>この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=

関連するQ&A

  • linuxマルチコアCPU環境においてコアの使われ方について

    linuxマルチコアCPU環境においてコアの使われ方について マルチコアCPUがLinxu環境において(その他Linuxでないプラットフォームにおいても)、 実際に搭載されているCPUのコア数が正常にOSに認識されているというだけではなく、 各プロセスの処理に対して複数のコアが適宜効果的に利用されているのかどうか?? ということが知りたく、添付画像に私の疑問点をまとめてみました。 ■ポイント ++++++++++++++++++++++++++++++++++++++++++++++++ 投稿した画像の色がついている4つの矢印は1つ1つそれぞれがDB接続クライアントがmysqlに投げているSQL文(クエリ)をイメージしています。 Mysqlを起動させているlinux kernelは、このクエリを受け取り自身が管理しているCPUがマルチコアであった場合、どのようなロジックで複数のコアの中から4つのクエリを処理させるCPUコアを選択しているのでしょうか? 例)kernelが未使用のCPUコアを都度選んで1クエリの処理を担当するよう制御している ⇒コアによって処理する数は異なる 例)kernelが4つのクエリに対して4つのCPUコアをラウンドロビン分散させて処理させている。 ⇒コアが処理する数は均等になる ++++++++++++++++++++++++++++++++++++++++++++++++ どなたか、私の疑問についてご存知でしたらご教授いただけますでしょうか。 よろしくお願します。

  • マルチコアCPUの負荷偏り

    マルチコアCPUの負荷偏り CPUの負荷をsar -P ALLで見ると1つのコアのみ負荷が高い場合が多いと思うのですが、これはなぜでしょうか? また、解決する方法(すべてのコアに均等に負荷をかける)はあるのでしょうか?

  • マルチコアのパソコンについて

    マルチコア(マルチスレッド)のパソコンはマルチスレッド非対応のソフトを何個か同時に使った時、 自動的に処理を各コアに分散して負荷を低減してくれたりするんでしょうか?

  • デュアルコアについて

    マルチスレッド対応ソフトでない場合、 負荷(100)は両方のコアに均等に分散するのですが、 これで正常ですか? CPU0:50 CPU1:50といった感じです。 よく雑誌で一つのコアに負荷が集中しておりますが。 CPU0:100 CPU1:0 設定、ソフトによって変わってくるのでしょうか?

  • マルチコアとスーパースカラの違いはコア数だけ?

    質問させてください。 CPUの高速化の技術として、マルチコアとスーパースカラというものがあります。 どちらも並列処理を実現するもので、 マルチコアはCPUのコアを複数配置する方法。 スーパースカラは1つのコアの中に処理系統を複数配置する方法。 というのはわかるのですが、それって結局同じことではないかと混乱しています。 CPUのコアの中には、演算装置、制御装置、レジスタなどがあると認識していますが、例えばスーパースカラの場合、その中のどれか一つが共有されているとか、そういうことでしょうか? ただその場合、共有するところは並列作業が実現できなくなると思うのですが・・・。 どなたかご存知でしたらお教えください。 以上よろしくお願いします。

  • CPU確認方法

    皆様   初歩的な質問で大変恐縮です。 linux上において、cat /proc/cpuinfo を実行する、 プロセッサの個数が表示されるが、例えば2個と表示されていても、 物理CPUが2個? それとも、物理CPU1個+ハイパースレッド有効? を判別するにはどうすればいいのでしょうか?  また、コマンドベースでCPUコア数の確認はどうすれば? よろしくお願い致します。

  • Linuxの物理CPUの数と論理CPUの数について

    Amazon LinuxのCPUの数とコアの数を調べようと思ってハマってしまいました。 論理CPUの数が計算と合わず、どうなっているのかがわかりません。 確認した手順 1. プロセッサの数を調べる grep "processor" /proc/cpuinfo processor: 0 processor: 1 processor: 2 processor: 3 プロセッサが4つあるのを確認。 2. 物理プロセッサの数を確認 grep "physical id" /proc/cpuinfo | uniq physical id: 0 物理プロセッサが1つであることを確認 3. コアの数を確認 grep "cpu cores" /proc/cpuinfo cpu cores: 1 cpu cores: 1 cpu cores: 1 cpu cores: 1 1つなのでシングルコアであるのを確認 シングルコアだと判断しましたが、シングルコアとしたら 論理CPUの数は0だと思っているのですが、私はなにか勘違いをしているのでしょうか? ハイパースレッディングだとしても1(物理CPUの数)× 2にしかならないと思うので、 論理CPU4と計算が合わないです。 なにか見落としをしていると思いますが、ご存知のかたいらっしゃいますか?

  • Linuxの割り込みについて

    cat /proc/interruptsを実行した結果です。 質問(1) どのデバイスからの割り込みを表しているのかがわかりません。 例えばHDDの割り込みはどれに当たるのでしょうか? 質問(2) 途中から割り込み番号が数字ではなく英語になっています。 これはどうゆうことなんでしょうか? --------------------------------------------------------------------------- CPU0 CPU1 0: 159 48 IO-APIC-edge timer 1: 1 1 IO-APIC-edge i8042 8: 1 0 IO-APIC-edge rtc0 9: 0 0 IO-APIC-fasteoi acpi 12: 1 3 IO-APIC-edge i8042 16: 0 0 IO-APIC-fasteoi uhci_hcd:usb5 18: 549 555 IO-APIC-fasteoi uhci_hcd:usb4 19: 107179 107147 IO-APIC-fasteoi ata_piix, uhci_hcd:usb3 23: 2 1 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2 40: 0 0 PCI-MSI-edge PCIe PME, pciehp 41: 0 0 PCI-MSI-edge PCIe PME, pciehp 42: 140048 136723 PCI-MSI-edge i915 43: 200 221 PCI-MSI-edge snd_hda_intel 44: 22595 22536 PCI-MSI-edge eth0 NMI: 491 638 Non-maskable interrupts LOC: 2226875 2077643 Local timer interrupts SPU: 0 0 Spurious interrupts PMI: 491 638 Performance monitoring interrupts IWI: 0 0 IRQ work interrupts RTR: 0 0 APIC ICR read retries RES: 246055 120743 Rescheduling interrupts CAL: 352 531 Function call interrupts TLB: 27175 30302 TLB shootdowns TRM: 0 0 Thermal event interrupts THR: 0 0 Threshold APIC interrupts MCE: 0 0 Machine check exceptions MCP: 81 81 Machine check polls ERR: 0 MIS: 0 ----------------------------------------------------------------------------

  • linuxサーバーに詳しい方、教えてください。

    linuxの初心者です。 サーバーについてスペックを確認しているのですが、 下記コマンドを叩いて出力される結果の意味がよくわかっていません。 cat /proc/cpuinfo | grep processor と打つと processor   : 0 processor   : 1 processor   : 2 processor   : 3 cat /proc/cpuinfo | grep "physical id" と打つと physical id  : 0 physical id  : 0 physical id  : 3 physical id  : 3 cat /proc/cpuinfo | grep "cpu cores" と打つと cpu cores  : 1 cpu cores  : 1 cpu cores  : 1 cpu cores  : 1 上記の結果から、 プロセッサ数、物理的なcpu数、コア数 をそれぞれ 教えていただきたく。 また不足の情報などありましたら、補足で 回答致します。そのときは具体的な 調べるためのコマンドの記述をお願いします。 御教授のほど宜しくお願い致します。

  • Linux上で動くシステムでリソースを監視する方法

    Linux上でCで組んだプログラムで、CPU使用率、メモリ使用率、ディスク使用率を取り込んで使用率が高い場合はエラーを返すような処理を行わせたいと思っているのですが、どういった方法を用いればこういったデータを入手することはできるのでしょうか? また一般的にはどういった方法で実装されるのでしょうか? 現時点では、メモリとCPUに関してはproc/statやproc/meminfoに格納されているようなのでそこから取り出せるのではないかと思っているのですが、ディスク使用率はちょっと想像がつかないもので… 基本的にツールなどは使わずに実装したいのですけど、実現する方法はありますでしょうか? よろしければ教えていただけると幸いです。