さて
およそ半年前、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処理となるため、速度が低下すると考えられます。
これについては、気が向いたらテストしたいと思います。