CRS326-24S+2Q+RMでの40GbEのスループットをテストしてみた!

さて

およそ半年前、MikroTik社のCRS326-24S+2Q+RMを購入した記事を書きましたが、40GbEのテストは後でやると書きました。

ようやくそのテストを実施する(気になる)ことができたので、その結果を記していきたいと思います。

環境

本当はLinux機でテストしたかったのですが、ぱっと使えるマシンがWindowsしかなかったので、諦めてそちらでテストを行いました。

  • マシン1 (Desktop)
    • Windows10 Pro
    • Mellanox ConnectX-3 Pro EN
    • 6C12T
    • 16GB RAM
  • マシン2 (HPE DL380 Gen9)
    • Windows10 Pro
    • Mellanox ConnectX-3 Pro EN
    • 24C48T
    • 128GB RAM

なお、Desktop機においてはNICが冷却できずに燃えそうだったので、サーキュレータの風をぶち当てて強制冷却することにしました。

PC1 — CRS326-24S+2Q+RM — PC2

こんな構成でテストを行いました。
なお、IPアドレスについては別途DHCPサーバからの配布としました。

iperf3 with MTU 1500

$ ./iperf3.exe -c 192.168.5.111
Connecting to host 192.168.5.111, port 5201
[ 4] local 192.168.5.110 port 51729 connected to 192.168.5.111 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 1.01 GBytes 8.71 Gbits/sec
[ 4] 1.00-2.00 sec 963 MBytes 8.07 Gbits/sec
[ 4] 2.00-3.00 sec 965 MBytes 8.09 Gbits/sec
[ 4] 3.00-4.00 sec 1.06 GBytes 9.07 Gbits/sec
[ 4] 4.00-5.00 sec 1.14 GBytes 9.76 Gbits/sec
[ 4] 5.00-6.00 sec 1.13 GBytes 9.74 Gbits/sec
[ 4] 6.00-7.00 sec 1.06 GBytes 9.10 Gbits/sec
[ 4] 7.00-8.00 sec 1.10 GBytes 9.41 Gbits/sec
[ 4] 8.00-9.00 sec 1018 MBytes 8.54 Gbits/sec
[ 4] 9.00-10.00 sec 1.16 GBytes 9.99 Gbits/sec
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-10.00 sec 10.5 GBytes 9.05 Gbits/sec sender
[ 4] 0.00-10.00 sec 10.5 GBytes 9.05 Gbits/sec receiver

iperf Done.

iperf3でテストを行ったのですが、10Gbps程度しか出ていませんね。
PCIe接続帯域を疑ったのですが、確認したところ双方PCIe3.0 x8で正しくリンクしているようです。

なお、調査したところ、iperf3では -P オプションをつけて並列で実行してもさほど効果がないようです。

ということで、iperf2で試してみることにしました。
なお、MTUを9000としました。

iperf2 with MTU 9000

$ ./iperf.exe -c 192.168.5.111
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Client connecting to 192.168.5.111, TCP port 5001
TCP window size: 208 KByte (default)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[ 3] local 192.168.5.110 port 52802 connected with 192.168.5.111 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 23.5 GBytes 20.2 Gbits/sec

20Gbpsほど出ていますね。
この差は何なのでしょうか…

iperf2 -P 10 with MTU 9000

$ ./iperf.exe -c 192.168.5.111 -P 10
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Client connecting to 192.168.5.111, TCP port 5001
TCP window size: 208 KByte (default)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
[ 11] local 192.168.5.110 port 52816 connected with 192.168.5.111 port 5001
[ 12] local 192.168.5.110 port 52817 connected with 192.168.5.111 port 5001
[ 5] local 192.168.5.110 port 52810 connected with 192.168.5.111 port 5001
[ 10] local 192.168.5.110 port 52815 connected with 192.168.5.111 port 5001
[ 9] local 192.168.5.110 port 52814 connected with 192.168.5.111 port 5001
[ 3] local 192.168.5.110 port 52808 connected with 192.168.5.111 port 5001
[ 6] local 192.168.5.110 port 52811 connected with 192.168.5.111 port 5001
[ 4] local 192.168.5.110 port 52809 connected with 192.168.5.111 port 5001
[ 7] local 192.168.5.110 port 52812 connected with 192.168.5.111 port 5001
[ 8] local 192.168.5.110 port 52813 connected with 192.168.5.111 port 5001
[ ID] Interval Transfer Bandwidth
[ 11] 0.0-10.0 sec 3.97 GBytes 3.41 Gbits/sec
[ 12] 0.0-10.0 sec 2.63 GBytes 2.26 Gbits/sec
[ 5] 0.0-10.0 sec 5.29 GBytes 4.55 Gbits/sec
[ 9] 0.0-10.0 sec 6.19 GBytes 5.31 Gbits/sec
[ 3] 0.0-10.0 sec 3.43 GBytes 2.95 Gbits/sec
[ 6] 0.0-10.0 sec 6.10 GBytes 5.24 Gbits/sec
[ 4] 0.0-10.0 sec 3.74 GBytes 3.21 Gbits/sec
[ 7] 0.0-10.0 sec 5.74 GBytes 4.93 Gbits/sec
[ 8] 0.0-10.0 sec 5.33 GBytes 4.58 Gbits/sec
[ 10] 0.0-10.2 sec 2.62 GBytes 2.20 Gbits/sec
[SUM] 0.0-10.2 sec 45.0 GBytes 37.8 Gbits/sec

-Pオプションを使用して10並列で実行した結果です。
最後の行、各並列での実行結果の合計が示されていますが、 37.8Gbits/sec となっています。
40GbEにおけるほぼ理論値が出ていることが確認できます。
はやい…

そして、NTTtcpというMicrosoftが公開しているツールがあるとのことだったので、そちらでもテストしてみることにしました。

NTTtcp with MTU 9000

送信側

$ ./NTttcp.exe -s -m 24,*,192.168.5.111 -t 30
Copyright Version 5.33
Network activity progressing…

Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
   0  30.016    152017.058   65536.000
   1  30.008    172660.091   65536.000
   2  30.000    195206.400   65536.000
   3  29.881    140094.910   65536.000
   4  29.680    164485.175   65536.000
   5  30.000    187421.867   65536.000
   6  30.000    206696.533   65536.000
   7  30.274    220114.422   65536.000
   8  30.000    143276.800   65536.000
   9  30.063    226766.457   65536.000
  10  30.004    176714.571   65536.000
  11  30.000    186645.333   65536.000
  12  30.008    168695.281   65536.000
  13  30.000    207208.533   65536.000
  14  30.000    211219.200   65536.000
  15  30.002    243292.580   65536.000
  16  29.759    247294.331   65536.000
  17  30.077    151723.643   65536.000
  18  29.992    194283.276   65536.000
  19  30.022    206172.007   65536.000
  20  30.000    127082.667   65536.000
  21  29.975    190990.092   65536.000
  22  29.987    196200.220   65536.000
  23  29.760    181253.763   65536.000

#### Totals: ####

Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
  131681.000000  30.001   8194.436   4389.220

Throughput(Buffers/s) Cycles/Byte Buffers
===================== =========== =============
     70227.526     2.130   2106896.000

DPCs(count/s) Pkts(num/DPC) Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
  100731.942   1.033  179893.237   0.578

Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
  16850158    3120561     64737   0    24.066

受信側

$ ./NTttcp.exe -r -m 24,*,192.168.5.111 -t 30
Copyright Version 5.33
Network activity progressing…

Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
   0 30.029    152115.281    60831.268
   1 30.013    172750.741    54972.069
   2 30.294    193288.704    57800.761
   3 30.185    138724.267    60691.135
   4 29.717    164140.316    57431.574
   5 30.013    187752.241    57852.899
   6 29.716    208883.323    57616.087
   7 30.263    220325.619    56724.817
   8 30.013    143334.155    56863.175
   9 30.044    226828.918    55499.565
  10 30.013    176832.173    55274.441
  11 30.013    186647.653    58564.156
  12 30.013    168679.824    56173.564
  13 30.013    207253.124    56957.149
  14 30.013    211270.951    58245.179
  15 30.294    240877.798    55655.737
  16 29.779    247252.896    57050.740
  17 29.763    153271.757    57865.536
  18 30.013    194315.796    57041.578
  19 30.013    206154.933    56982.983
  20 30.013    126995.635    57870.181
  21 29.998    191005.726    57402.725
  22 30.013    196121.947    58497.045
  23 29.779    181292.857    57231.037

#### Totals: ####

Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
 131738.545221   30.017    25233.644    4388.798

Throughput(Buffers/s) Cycles/Byte Buffers
===================== =========== =============
    70220.766     3.854    2107816.724

DPCs(count/s) Pkts(num/DPC) Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
  91530.266    1.993     182212.080    1.001

Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
  3121124     5474353      0     0    14.800

おそよ 4388MB/s となっています。
これはおよそ 40Gbps となりますので、かなりの速度が出ていることがわかります。

まとめ

MiktoTik製のCRS326-24S+2Q+RMの40GbEポートのスループットテストを簡易的に行いました。
これにより、L2レベルでは40GbEにおける理論値に近いスループットが出ることがわかりました。
L2に関して、スループットの低下等を気にする必要はなさそうです。
10GbEについても同様に理論値に近い速度が出ています。

L3以上の処理(VLAN等)を行うとCPU処理となるため、速度が低下すると考えられます。
これについては、気が向いたらテストしたいと思います。

参考

40GbEスイッチ MikroTik CRS326-24S+2Q+RM がやってきた!