はじめに
記事名通りなんですが。
最近はラズパイを始めとして、Orange PiだったりBanana PiだったりとARM板は非常に入手しやすくなっています。またイメージについても各種ARM板の販売元はもとより、Armbian、Diet Piなどイメージが多く出されています。今回は私も使用しているArmbianを中心にしますが、その中でirqbalanceをちゃんと使用しましょう、ということです。
そもirqbalanceとは何ぞや、という人は公式を確認してください。
公式レポジトリ
Irqbalanceは、システムのCPU全体で、割り込みによって生成されたCPU負荷のバランスをとるためのデーモン
x86_64な*nixを触っている人は分かると思いますが、最近のメニーコアなシステムでは負荷を最適化するために、irqbalanceの動作は必須だと思います。恩恵は全体の負荷の最適化ならず、NICのスループットの向上なども果たす場合があります。
この手の記事については過去にも話題になったので覚えている人も多いかと思います。
参考情報
どんな影響?
ラズパイもRPi3では4コアで動作しますし、最近のH5系でも4コア、rockchipのrk3399だとa72+a53の6コアだったと思います。ということでマルチコア動作は当たり前になってきています。しかし、なぜかArmbianにはirqbalanceはプレインストールされていないので、ちょっとパフォーマンスが発揮できていないかも、という状態になっているはずです。
ちなみに自分の場合は以下のようになっていました。
上の図だと10月28日2時ごろから、その下の図だと10月28日22時前ごろから青い部分の「CPU user time」が減少していることが分かります。/proc/interrunpts
の適用前後の値も取っておけばよかったのですが忘れていました。
$ cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5
10: 0 0 0 0 0 0 GICv3 25 Edge vgic
12: 0 0 0 0 0 0 GICv3 27 Edge kvm guest timer
14: 0 0 0 0 0 0 GICv3 29 Edge arch_timer
15: 120281607 107664001 101097258 100359092 20984311 19389053 GICv3 30 Edge arch_timer
17: 15040270 12273978 10420869 10843832 5507457 4590059 GICv3 113 Level rk_timer
20: 0 0 0 0 0 0 GICv3 37 Level ff6d0000.dma-controller
21: 0 0 0 0 0 0 GICv3 38 Level ff6d0000.dma-controller
$ cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
1: 0 0 0 0 GICv2 25 Level vgic
3: 21511711 26487897 20789511 20495437 GICv2 30 Level arch_timer
4: 0 0 0 0 GICv2 27 Level kvm guest timer
6: 0 0 0 0 GICv2 32 Level ff1f0000.dmac
7: 0 0 0 0 GICv2 33 Level ff1f0000.dmac
NICについてはRSSには対応していないので分散はされていません。この辺りまで実装されれば面白いことになると思いますが、ARM SBCとしてはコストアップになっちゃうでしょうから、実装はなさそうですね・・・ もしかしたらSoCに盛り込まれるようになるのかもしれませんが。
ちなみに、irqbalanceですが、ARM関連に関して更新が入ったりしているので、aptやyumからではなく自分でbuildして導入した方が良さそうな気がします。私は今のところ自分でbuildして導入するようにしています。