24時間365日フルマネージドホスティングサービスのデイーネット

  • HOME
  •  
  • 技術情報ブログ
  •  
  • irqbalanceによるCPUへの割り込み処理の負荷分散について調べてみた

irqbalanceによるCPUへの割り込み処理の負荷分散について調べてみた

こんにちは。久しぶりにJMeterと戯れている浅見です。

先日、irqbalanceが無効化されているサーバがありました。普段あまり気にしたことがなかったサービスですが、割り込み処理を負荷分散してくれる機能ということで俄然興味が。実際に動かしてみて調べてみましょう。

irqbalanceとは

ざっくり説明すると、このような機能です。

  • Linuxカーネルの動きとして、割り込み処理はCPU0のみで処理する
  • irqbalanceを利用することで、割り込み処理を複数のCPUで負荷分散ができる
  • RHELやCentOSではirqbalanceがデフォルトで有効になっている
  • 複数コアを利用する場合はirqbalanceが有効になっていたほうが良い
  • 単一コアの場合は有効にする意味はない

 

要はネットワークやディスクIOなどの割り込み処理を負荷分散してくれる機能ということです。

irqbalanceの設定有無によるCPU負荷の変化を確認してみる

言葉だけではわかりにくいのて、実際にサーバへ負荷をかけてみてirqbalanceの実力を調べてみます。

ファイル出力を行う簡単なWEBアプリケーションを作成し、JMeterで負荷をかけてみました。

irqbalanceが有効の場合

まずは、irqbalanceが有効な場合です。割り込み処理をCPU0とCPU1で負荷分散しているはずです。

JMeterで負荷をかけてみたところ、下の図の通りCPU0とCPU1のSYSTEM使用率が30%前後となっており、負荷分散されていることがわかります。

irqbalancecpu_1.png

グラフ上の緑の線がSYSTEM使用率で、主にカーネルが利用しているCPU使用率です。処理切り替えのコンテキストスイッチや割り込み処理などの用途で利用されています。

実際に割り込み処理がどちらのCPUで行われたかをみてみましょう。

[root@irqbalance.enable ~]# cat /proc/interrupts |egrep "CPU|ens"
           CPU0       CPU1
 56:       1852     146690   PCI-MSI-edge      ens160-rxtx-0
 57:     131214          0   PCI-MSI-edge      ens160-rxtx-1
 58:          0          0   PCI-MSI-edge      ens160-event-2
 59:      12070     102641   PCI-MSI-edge      ens192-rxtx-0
 60:          4          0   PCI-MSI-edge      ens192-rxtx-1
 61:          0          0   PCI-MSI-edge      ens192-event-2

CPU0とCPU1の両方で行われていることがわかります。

irqbalanceが無効の場合

次に、irqbalanceが無効の場合です。割り込み処理をCPU0のみで処理しているはずです。

結果は、CPU0のSYSTEM利用率が30%付近なのに対して、CPU1のSYSTEM利用率は20%となりました。10%程度の差が出ています。

irqbalancecpu_2.png

このことから割り込み処理がCPU0に偏っていることが見て取れます。

実際にコマンドで確認してみます。

[root@irqbalance.disable ~]# cat /proc/interrupts |egrep "CPU|ens"
           CPU0       CPU1
 56:     142544          0   PCI-MSI-edge      ens160-rxtx-0
 57:     136023          0   PCI-MSI-edge      ens160-rxtx-1
 58:          0          0   PCI-MSI-edge      ens160-event-2
 59:      45089          0   PCI-MSI-edge      ens192-rxtx-0
 60:          7          0   PCI-MSI-edge      ens192-rxtx-1
 61:          0          0   PCI-MSI-edge      ens192-event-2

CPU0のみで処理されていますね。

irqbalanceについて

せっかくなので、irqbalanceについてまとめておきます。

起動方法

irqbalanceはサービスとして登録されています。CentOS7系の場合は下記コマンドで自動起動有無を確認できます。

# systemctl list-unit-files |grep irqbalance
irqbalance.service                            disabled

起動したい場合はsystemctlで起動しましょう。


# systemctl start irqbalance.service

起動後は、statusやプロセス有無を確認しておきます。

[root@irqbalance.enable ~]# systemctl status irqbalance.service
● irqbalance.service - irqbalance daemon
   Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; disabled; vendor preset: enabled)
   Active: active (running) since 水 2018-09-12 18:12:54 JST; 8s ago
 Main PID: 2687 (irqbalance)
   CGroup: /system.slice/irqbalance.service
           mq2687 /usr/sbin/irqbalance --foreground



[root@irqbalance.enable ~]# ps auwxxx|grep irqbalance
avahi      557  0.0  0.1  62236  2292 ?        Ss   17:55   0:00 avahi-daemon: running [irqbalance.local]
root       775  0.0  0.1 107396  2296 ?        Ss   17:55   0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--ens160.lease -pf /var/run/dhclient-ens160.pid -H irqbalance ens160
root       885  0.0  0.1 107396  2292 ?        Ss   17:55   0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--ens192.lease -pf /var/run/dhclient-ens192.pid -H irqbalance ens192
root      2687  0.0  0.0  21676  1300 ?        Ss   18:12   0:00 /usr/sbin/irqbalance --foreground
root      2695  0.0  0.0 112724   980 pts/0    S+   18:13   0:00 grep --color=auto irqbalance

割り込み処理の確認

実際に割り込み処理がどこのCPUで行われているかは、「/proc/interrupts」ファイルに記録されています。

[root@irqbalance.enable ~]# cat /proc/interrupts
           CPU0       CPU1
  0:         30          0   IO-APIC-edge      timer
  1:         10          0   IO-APIC-edge      i8042
  6:          2          0   IO-APIC-edge      floppy
  7:          0          0   IO-APIC-edge      parport0
  8:          1          0   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:         16          0   IO-APIC-edge      i8042
 14:          0          0   IO-APIC-edge      ata_piix
 15:       1241          0   IO-APIC-edge      ata_piix
 16:          0          0   IO-APIC-fasteoi   vmwgfx
 17:       9687         22   IO-APIC-fasteoi   ioc0
 24:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 25:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 26:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 27:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 28:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 29:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 30:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 31:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 32:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 33:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 34:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 35:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 36:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 37:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 38:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 39:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 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:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 44:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 45:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 46:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 47:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 48:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 49:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 50:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 51:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 52:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 53:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 54:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 55:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 56:     149407       1908   PCI-MSI-edge      ens160-rxtx-0
 57:     136580          0   PCI-MSI-edge      ens160-rxtx-1
 58:          0          0   PCI-MSI-edge      ens160-event-2
 59:      99987          0   PCI-MSI-edge      ens192-rxtx-0
 60:         12          1   PCI-MSI-edge      ens192-rxtx-1
 61:          0          0   PCI-MSI-edge      ens192-event-2
 62:        200         14   PCI-MSI-edge      vmw_vmci
 63:          0          0   PCI-MSI-edge      vmw_vmci
NMI:          0          0   Non-maskable interrupts
LOC:     112586     122608   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          0          0   Performance monitoring interrupts
IWI:        818       3257   IRQ work interrupts
RTR:          0          0   APIC ICR read retries
RES:      23226      80230   Rescheduling interrupts
CAL:        515       2774   Function call interrupts
TLB:        266        383   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
DFR:          0          0   Deferred Error APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:          4          4   Machine check polls
ERR:          0
MIS:          0
PIN:          0          0   Posted-interrupt notification event
NPI:          0          0   Nested posted-interrupt event
PIW:          0          0   Posted-interrupt wakeup event

まとめ

irqbalanceが有効になっていることで、割り込み処理が複数のコアに負荷分散されていることがわかりました。

通常はデフォルトで有効になっているので問題なさそうですが、CPUのSYSTEM使用率に偏りがあるときは確認してみると良いかと思います。

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar