[ #mikrotik ][ #routerboard ] Cloud Core RouterにおけるCPUの割り当てについて。

mikrotik
rps.png
Manual:IP/IPsec - MikroTik Wiki

ちょっと探しものをしていたらネタを発見したので書いておきます。

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などを使いながら検証しようかと思います。

参考:

CentOS 6.2 で RPS/RFS を使ってネットワークの割り込み処理を複数コアに分散してみた - blog.nomadscafe.jp
以前(2010年)に「アプリケーションがマルチスレッドでもマルチコアCPUを活か...

2019年12月7日:追記

今さら追記しておきますが。

少なくとも現在、RouterOS v6の20番ぐらい以降から、CPUの負荷の偏り問題はだいぶ解決しています。少なくとも公式には解決済みとされています。

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました