ちょっと探しものをしていたらネタを発見したので書いておきます。
MikroTikのCloud Core RouterシリーズおよびRB1100シリーズはメニーコアモデルになります。
が、通常の状態だとどうしてもIRQによる制御において偏りが発生し、特にIPsecなどを張っている場合には、一つのコアに処理が集中し、全体の処理が遅くなる、または動作不全に陥ることがあります。
先の画像でも示しているように、CCR1009の場合はActiveになるCPUが全体に均等に割り当てられているのですが、なぜか偏りが発生します。
CCRシリーズで採用しているTileraはCPU自体がハードウェア暗号化に対応しているのですが、その設定についてなんとデフォルトで無効になっているようです。それに関連して、CPUの割り当てを動的に手動で固定割り当てする方法がありました。
前提条件として、すべてのインターフェースキューが”only-hardware-queue
“であること、RPSをdisableにすることのようです。
/queue interface set [find] queue=only-hardware-queue /system resource irq rps disable [find]
[admin@MikroTik] /system resource irq> print Flags: ro - read-only # IRQ USERS CPU ACTIVE-CPU COUNT 0 1 MicroSD auto 0 0 1 2 eth phy auto 1 4 2 3 eth auto 2 3 647 200 3 4 eth auto 3 3 827 661 4 5 ts auto 4 0 5 6 crypto auto 5 0 6 7 usb1 auto 6 0 7 8 Fancon auto 7 36 932 143 8 9 usb2 auto 8 2
IRQ4に割り当てられているCPUをautoからCPU0に固定的に割り当てるには以下の様な感じになります。
[admin@MikroTik] /system resource irq> set cpu=0 numbers=3 [admin@MikroTik] /system resource irq> print Flags: ro - read-only # IRQ USERS CPU ACTIVE-CPU COUNT 0 1 MicroSD auto 0 0 1 2 eth phy auto 1 4 2 3 eth auto 2 3 656 544 3 4 eth 0 0 3 837 787 4 5 ts auto 3 0 5 6 crypto auto 4 0 6 7 usb1 auto 5 0 7 8 Fancon auto 6 37 015 727 8 9 usb2 auto 7 2
アクティブとして割り当てられたCPUが0になっているのが分かるでしょうか?
MikroTikのWikiによると、これらの割り当てを固定的に割り振ることで、スループットの向上にも繋がるとのことが書いてあります。
この辺りの動作についてはドキュメントベースでしか確認していないので、時間を取ってTraffic Generatorなどを使いながら検証しようかと思います。
参考:
2019年12月7日:追記
今さら追記しておきますが。
少なくとも現在、RouterOS v6の20番ぐらい以降から、CPUの負荷の偏り問題はだいぶ解決しています。少なくとも公式には解決済みとされています。