RTX 3080,RTX 3090がスゴい!GTX1080,RTX2060とベンチ結果を比較してみる。

4Kゲーミング

2020年9月17日に、NVIDIAのAmpereアーキテクチャを採用したGPU、RTX 3080が発売解禁されました。
筆者は、深夜販売に突撃して運よく入手出来たので、4Kゲーミング性能について軽くベンチマークを通して見ていきます。

RTX 3090 ?

RTX3080に続いて、RTX 3090が2020年9月24日に発売解禁となりました。
こちらも深夜販売での抽選に参加したところ運よく入手できましたので、こちらも見ていきます。

なお、「コスパ」とか言ってはいけません。
筆者が泣いてしまいます。

ベンチマーク環境

ベンチマークには、おなじみ3DMarkを使用します。
また、DLSSについてもどのような効果があるのか気になったので、こちらも試してみます。
手持ちのゲームでDLSSに対応したゲームが「DEATH STRANDING」ぐらいしか無かったので、参考程度にご覧ください。

ベンチマークPCとしては以下のものを使用しています。

詳細
CPU AMD Ryzen9 3950X 16-Core Processor
M/B ASUS Pro WS X570-ACE
Memory DDR4 Non-ECC UDIMM 16GB x4(64GB) 3200MHz
PSU 80PLUS GOLD 750W
Storage Western Digital SN550 500GB (M.2 NVMe)
Gprahics MSI GTX 1080 AERO
NVIDIA RTX 2060 FE
MSI RTX 3080 GAMING X TRIO
ZOTAC RTX 3090 Trinity

RTX 2000シリーズとの比較ベンチを多く見ますが、GTX世代との比較があまりなされていないように思ったのと、筆者がGTX 1080からの更新のため、GTX 1080との性能差に注目したいところです。
また、手持ちにあるGPUの中にRTX 2000シリーズがRTX 2060しか無かったので、参考程度です。

RTX 3080 and RTX 3090

RTX 3080 FE RTX 3090 FE
CUDAコア 8704基 10496基
RTコア 68基 82基
Tensorコア 272基 328基
ベースクロック 1.44GHz 1.4GHz
ブーストクロック 1.71GHz 1.7GHz
VRAM 10GB GDDR6X 24GB GDDR6X

外観

ZOTAC RTX 3090 Trinity

RTX 3090のカスタムカードとしては小さい部類だと思います。
他のカードにおいて、高さがPCIeスロットブラケットを大きく超えているのに対して、こちらのカードはさほど飛び出ていません。
補助電源は 8pin x2 となっています。

MSI RTX 3080 GAMING X TRIO

ブーストクロックが1815MHzにOCされたカードです。
こちらのカード、RTX 3080のTBPが320Wになっているのに対して、OCがされているためにこのカードのTBPは340Wとなっています。
そのため、補助電源が 8pin x3 となっています。
補助電源として 8pin x3 が必要なグラフィックカード、過去にあったんでしょうか…

NVIDIA RTX 2060 Founders Edition

何の変哲もない RTX 2060 Founders Edition です。
個人輸入で入手したものです。

MSI GTX 1080 AERO

どこぞで投げ売りされていた、MSI AEROシリーズのGTX 1080カードです。
サイドフロータイプになっています。

3DMark Time Spy (1920 x 1080)

Time Spy のデフォルト設定では2K解像度ですが、今回はFullHDにカスタム設定を行っています。

やはり、RTX 3000シリーズは、GTX 1080と比較してもスコアにおいて倍以上の差をつけてます。
しかし、RTX 3090はRTX 3080と比較しても誤差程度の差しかないようです。

3DMark Time Spy Extreme (3840 x 2160)

続いて、4K相当のベンチマークである、Time Spy Extremeを実行しました。

こちらも、RTX 3000シリーズは共に、GTX 1080と比較すると倍以上のスコアとなっています。
また、先ほどに比べるとRTX3080と比較してRTX 3090のスコアが伸びているように感じます。
RTX 3090を活かすには4K以上の環境でないと意味がない といった考え方もできます。

3DMark Port Royal (1920 x 1080)

続いて、レイトレーシング性能を計測しました。
こちらもまずはFullHDから。

GTX 1080においてはRTコアを搭載していないため、比較対象として適切ではないですね。
RTX 2060と比較すると、その差は歴然です。
また、こちらもRTX 3090のスコアが伸びていることが分かります。

3DMark Port Royal (3840 x 2160)

続いて、4Kレイトレーシング性能を計測しました。

GTX 1080については言うまでもないですね(RTコア無いし)。
ここで気になるのが、RTX 2060のスコアが思ったより出ていないことです。
Port Royalのデフォルト解像度は2Kであるので、試しにそちらを実行したところ4193というスコアが出ました。
4Kになった瞬間スコアががた落ちしたということになるが、RTX 2060ではRTコアが足りていないのでしょうかね。
気になるところです。
本題に戻って、こちらもRTX 3000シリーズのスコアの伸びが目立っていますね。
4K解像度においても、レイトレーシングを利用しながらゲームを快適にプレイすることは夢ではない ということでしょう。

DEATH STRANDING (1920 x 1080)

続いて、DLSSの効果について適当に計測しました。
素人による計測なので、参考程度にご覧ください。
なお、以降、「DEATH STRANDING」上の画質設定はすべて一番高いものを設定しています。

筆者環境では、プレイ中はFPSが120程度から変動しませんでした。
(もちろん、フレームレート制限が120FPSとなっているわけではない。)

DEATH STRANDING (3840 x 2160)

続いて、4K解像度でのプレイ。

こちらは、はっきりと差が現れました。
RTX 3000シリーズの性能向上がうかがえます。
(RTX 3000シリーズのスコアについては、環境によってはもっと高くなる可能性があると思います。)

DEATH STRANDING with DLSS (3840 x 2160)

続いて、4K解像度においてDLSSを利用してみます。
DLSSについては解説しません。
DLSS設定については「パフォーマンス」を選択しています。

先ほども述べたように、実質的なFPS上限が120程度になっていることでRTX 3000シリーズでの変化を確認することは出来ない状態です。
しかしながら、RTX 2060においてはFPS値が向上しており、DLSSの効果が確認できます。

GPU温度

続いて、多くの方が気になっているであろうGPU温度について。
こちらは、3DMark Time Spy Extreme 実行中の最大GPU温度です。

GTX1080についてはサイドフロータイプであるので、冷却面での問題があるのは必然と言えます。
感心したのは、RTX 3000シリーズにおいてTBPが増加したにもかかわらず、思ったよりGPU温度が高くなく、冷却できているという事です。
RTX 3080,3090共に75,6度と、ハイエンドグラフィックカードとしてはかなり冷えているのではないでしょうか。

消費電力

続いて、消費電力です。
システム全体の消費電力である点に注意してください。(カード単体の消費電力ではありません)
また、「DEATH STRANDING」プレイ時の消費電力です。

こちらは概ね予想通りといったところでしょうか。
アイドル状態でも消費電力の差が見られます。
RTX 3090では200Wを超えて225W程度、RTX 3080では188Wでした。

4K解像度において「DEATH STRANDING」をプレイ中は、RTX 3090で550W程度、RTX 3080で540W程度でした。
先に述べたように、使用したグラフィックカードにおいて、RTX 3080はOCによってTBPが340Wとなっており、RTX 3090が350Wであるから、妥当な差であると言えそうです。

さて、面白いのはここです。
DLSSパフォーマンスを有効にした状態でプレイした時の消費電力について。
RTX 3000シリーズの両カードにおいて、DLSSを利用していない場合と比較すると、消費電力が低下しています。
4K解像度によってCUDAコアが使用する電力より、DLSS+(低解像度)CUDAが利用する電力の方が少ないという事でしょうか。
見た目で差を感じない人にとってDLSSを有効化した状態でゲームプレイをすることは、消費電力を下げる選択肢となるかもしれません。

電源ユニットの容量はどれぐらいが好ましい?

Ryzen9 3950X + RTX 3090の組み合わせで、ゲームプレイ中は550W程度の電力を消費するという事です。
今回、750W電源を利用してベンチマークを行いましたが、その最中に電源が落ちるといったことはありませんでした。
しかし、負荷率が50%程度で最も変換効率が高くなる電源ユニットが多いことを踏まえると、1000W以上の電源ユニットを用意したいところです。
また、Ryzen Threadripperなど、HEDT CPU環境で利用する場合は、もっと余裕が欲しいところです。

RTX 3070 ?

10月に発売予定のRTX 3070。
RTX 3080やRTX 3090がこれだけ性能向上しているとなると、こちらも期待できそうです。

お家で始める仮想化環境 Proxmox VE クラスタ構築・マイグレーション編

目次

環境

前提として、Proxmoxの基本的な構築が完了している必要があります。
Proxmox環境の構築方法はこちらをご覧ください。

また、今回は2台のノードでクラスタの構成を行います。

クラスタ構成時の注意点

Proxmoxのクラスタは、2台のノードから構成することが出来ます。
しかしながら、HA構成にしたい場合は3台以上のノードが必要になります。

また、一度クラスタに追加したノードの削除について、一度削除したノードを再登録することが出来ません。
Proxmoxを再インストールする必要があります。
(CLIにてProxmoxを再インストールせずに再登録する方法もあるようです)

試しにクラスタを構成する場合は、これらに対して注意が必要です。

クラスタ構成の利点

クラスタを構成すると、各ノードのWebGUIにアクセスする必要が無くなり、単一のWebGUIからクラスタ内のすべてのノードの操作が出来るようになります。
また、マイグレーションが可能になり、NFSなどの共有ストレージ上に配置されたVMであれば、ライブマイグレーションも利用可能になります。

(Proxmoxではこれらの機能はすべて無償で利用できます)

準備

管理用のネットワークとは別に、クラスタ構成に使用するネットワークを設定することが出来ますので、必要に応じてクラスタに使用するNICの設定をしておきます。

クラスタの作成

まず、元となるクラスタの作成を行います。
どのノードで作業してもよいはずですが、今回は「node1」と名のつけたノードで作業します。
この作業は、どれか1つのノードのみの作業でかまいません。

左側のメニューで「Datacenter」を選択し、「Cluster」を選び、クラスタ情報を表示します。

「Create Cluster」ボタンを押します。

クラスタ名を決め、「Cluster Name」に入力します。
この名前は後から変更することが出来ませんので、慎重に決めてください。
また、「Cluster Network」に、クラスタで使用するネットワークを設定します。
複数のリンクを使用することで、Failoverなどが可能になるようです。

入力が完了したら、「Create」を押して、操作が完了するのを待ちます。
「TASK OK」と表示されれば、閉じて問題ありません。

これで、先ほどの画面に作成したクラスタの情報が表示されているはずです。

クラスタへの参加

先ほど「Node1」で作成したクラスタに対して、別のノードを参加させる操作を行います。
今回は「Node2」を参加させます。
複数のノードを参加させる場合は、残りのすべてのノードで同様の操作を行ってください。

まずは、先ほどクラスタを作成した「Node1」上で、クラスタへの参加に必要な情報を取得します。
「Cluster Information」より「Join Information」を押すことで、必要な情報が表示されます。

以下のようなダイアログが表示されますので「Join Information」の中身をコピーします。
左下の「Copy Information」ボタンを利用してコピーが出来るようですが、うまくできない場合は手動でコピーしてみてください。

続いて、「Node2」で作業を行います。
「Datacenter」から「Cluster」より、「Join Cluster」を押します。

以下のようなダイアログが表示されますので、「Information」のところに先ほどコピーした文字列をそのまま貼り付けます。

貼り付けると、「Peer Address」や「Passowrd」などが表示されますので、「Password」にクラスタを作成したノード(今回は「Node1」)のパスワードを入力します。
また、「Cluter Network」の項目で、「Link 0」にて、クラスタに使用するネットワークを選択します。

入力が完了したら、「Join」を押します。

すると、以下のようなダイアログが出て止まってしまいますが、「Node1」の方へ戻り、「Cluster Nodes」に登録したノードが表示されているか確認します。

表示されていれば、このダイアログは閉じてかまいません。

以上で、クラスタへの参加が完了します。
複数のノードを参加させたい場合は、ノード数に応じてこの操作を繰り返してください。

マイグレーション

試しに、クラスタ内でVMのマイグレーションを行ってみます。
今回は「Node1」に存在するVM「TestVM」を「Node2」へマイグレーションしてみます。

移動させたいVMを選択肢、右上の「Migrate」ボタンを押します。

以下のように、移動先のノードを選択するダイアログが表示されますので、「Target Node」の項目で移動先のノードを選択します。

選択したら、「Migrate」ボタンを押します。
すると、マイグレーション処理が開始され、しばらく待つと「TASK OK」と表示されますので、ダイアログを閉じます。

「TestVM」が「Node2」に移動していることが確認できます。

このように、停止中のVMを移動させるマイグレーションは、非常に簡単に行うことが出来ます。

100GbEをテストしてみる。計測編 Mellanox ConnectX-5

Mellanox ConnectX-5 (MCX555A-ECAT)

今回、検証に当たって以下のマシンを2台お借りしたので、100GbEにおいて性能測定ツールが帯域を使用しきれるのか、調べてみました。

詳細
CPU AMD EPYC 7232P 8-Core Processor
Memory DDR4 ECC RDIMM 64GB
NIC Mellanox ConnectX-5 100Gb(InfiniBand/Ethernet) MCX555A-ECAT

目次

準備

今回は、Ubuntu 20.04.1 を使用しました。
Ubuntuに最初から入っているドライバは使用せず、Mellanox公式から取得したドライバを使用することにします。
今回は、MLNX_OFED_LINUX-5.1-0.6.6.0-ubuntu20.04-x86_64.tgzを使用しました。

取得したファイルを解凍します。

1
2
$ tar zxvf MLNX_OFED_LINUX-5.1-0.6.6.0-ubuntu20.04-x86_64.tgz
$ cd MLNX_OFED_LINUX-5.1-0.6.6.0-ubuntu20.04-x86_64/

解凍されたディレクトリの中にある、mlnxofedinstallを実行します。

1
2
3
4
5
$ ls
common_installers.pl DEBS LICENSE RPM-GPG-KEY-Mellanox
common.pl distro mlnx_add_kernel_support.sh src
create_mlnx_ofed_installers.pl docs mlnxofedinstall uninstall.sh
$ ./mlnxofedinstall

実行後、新しいドライバを使用するにはopenibdの再起動が必要な旨のメッセージが表示されますので、指示に従います。

1
2
3
4
Installation passed successfully
To load the new driver, run:
/etc/init.d/openibd restart
$ sudo /etc/init.d/openibd restart

IPアドレスについて、今回は10.0.0.1/2410.0.0.2/24を使用し、以下のように直結することにします。

10.0.0.1/24 ---------- 10.0.0.2/24

OSインストール時にIPアドレスの設定はしていませんので、 Interface は Down な状態になっています。
そこで Interface を Up にしますが、設定を保存しておく必要はないので今回はipコマンドを使用しました。

1
$ sudo ip link set enp65s0 up

Inteface にIPアドレスの割り当てを行います。(この場合、該当のインタフェースはenp65s0です)

1
$ sudo ip addr add <ip> dev enp65s0

DACを接続し100Gbpsでリンクしているか確認します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$ ethtool enp65s0
Settings for enp65s0:
Supported ports: [ Backplane ]
Supported link modes: 1000baseKX/Full
10000baseKR/Full
40000baseKR4/Full
40000baseCR4/Full
40000baseSR4/Full
40000baseLR4/Full
25000baseCR/Full
25000baseKR/Full
25000baseSR/Full
50000baseCR2/Full
50000baseKR2/Full
100000baseKR4/Full
100000baseSR4/Full
100000baseCR4/Full
100000baseLR4_ER4/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Supported FEC modes: None BaseR RS
Advertised link modes: 1000baseKX/Full
10000baseKR/Full
40000baseKR4/Full
40000baseCR4/Full
40000baseSR4/Full
40000baseLR4/Full
25000baseCR/Full
25000baseKR/Full
25000baseSR/Full
50000baseCR2/Full
50000baseKR2/Full
100000baseKR4/Full
100000baseSR4/Full
100000baseCR4/Full
100000baseLR4_ER4/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Advertised FEC modes: RS
Link partner advertised link modes: Not reported
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 100000Mb/s
Duplex: Full
Port: Direct Attach Copper
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Cannot get wake-on-lan settings: Operation not permitted
Current message level: 0x00000004 (4)
link
Link detected: yes

Speed: 100000Mb/sとなっているので、100Gbpsで正しくリンクアップしていることが確認できました。

計測(MTU1500)

まずは、MTU1500で計測してみます。

iperf3 Single Thread

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ iperf3 -c 10.0.0.1
Connecting to host 10.0.0.1, port 5201
[ 5] local 10.0.0.2 port 41020 connected to 10.0.0.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 2.24 GBytes 19.2 Gbits/sec 0 1.05 MBytes
[ 5] 1.00-2.00 sec 2.25 GBytes 19.3 Gbits/sec 0 1.05 MBytes
[ 5] 2.00-3.00 sec 3.47 GBytes 29.8 Gbits/sec 371 1.01 MBytes
[ 5] 3.00-4.00 sec 3.44 GBytes 29.5 Gbits/sec 1 1.01 MBytes
[ 5] 4.00-5.00 sec 2.82 GBytes 24.3 Gbits/sec 3 1.01 MBytes
[ 5] 5.00-6.00 sec 2.68 GBytes 23.0 Gbits/sec 2 1.01 MBytes
[ 5] 6.00-7.00 sec 2.65 GBytes 22.8 Gbits/sec 1 1.01 MBytes
[ 5] 7.00-8.00 sec 2.65 GBytes 22.8 Gbits/sec 0 1.01 MBytes
[ 5] 8.00-9.00 sec 2.65 GBytes 22.8 Gbits/sec 0 1.01 MBytes
[ 5] 9.00-10.00 sec 2.65 GBytes 22.8 Gbits/sec 0 1.23 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 27.5 GBytes 23.6 Gbits/sec 378 sender
[ 5] 0.00-10.00 sec 27.5 GBytes 23.6 Gbits/sec receiver

iperf Done.

23.6 Gbits/sec

iperf3 10 Threads.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ iperf3 -P 10 -c 10.0.0.1
--<中略>--
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 181 sender
[ 5] 0.00-10.00 sec 3.10 GBytes 2.67 Gbits/sec receiver
[ 7] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 17 sender
[ 7] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 9] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 36 sender
[ 9] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 11] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 185 sender
[ 11] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 13] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 0 sender
[ 13] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 15] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 13 sender
[ 15] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 17] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 0 sender
[ 17] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 19] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 24 sender
[ 19] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 21] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 45 sender
[ 21] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[ 23] 0.00-10.00 sec 3.11 GBytes 2.67 Gbits/sec 4 sender
[ 23] 0.00-10.00 sec 3.10 GBytes 2.66 Gbits/sec receiver
[SUM] 0.00-10.00 sec 31.1 GBytes 26.7 Gbits/sec 505 sender
[SUM] 0.00-10.00 sec 31.0 GBytes 26.6 Gbits/sec receiver

iperf Done.

26.6 Gbits/sec

iperf2 Single Thread.

1
2
3
4
5
6
7
8
$ iperf -c 10.0.0.1
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[ 3] local 10.0.0.2 port 46778 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 26.5 GBytes 22.8 Gbits/sec

22.8 Gbits/sec

iperf2 10 Threads.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ iperf -c 10.0.0.1 -P 10
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 1.80 MByte (default)
------------------------------------------------------------
[ 12] local 10.0.0.2 port 46800 connected with 10.0.0.1 port 5001
[ 7] local 10.0.0.2 port 46794 connected with 10.0.0.1 port 5001
[ 9] local 10.0.0.2 port 46792 connected with 10.0.0.1 port 5001
[ 10] local 10.0.0.2 port 46796 connected with 10.0.0.1 port 5001
[ 4] local 10.0.0.2 port 46784 connected with 10.0.0.1 port 5001
[ 6] local 10.0.0.2 port 46786 connected with 10.0.0.1 port 5001
[ 3] local 10.0.0.2 port 46782 connected with 10.0.0.1 port 5001
[ 8] local 10.0.0.2 port 46790 connected with 10.0.0.1 port 5001
[ 5] local 10.0.0.2 port 46788 connected with 10.0.0.1 port 5001
[ 11] local 10.0.0.2 port 46798 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 12] 0.0-10.0 sec 11.6 GBytes 9.92 Gbits/sec
[ 7] 0.0-10.0 sec 7.99 GBytes 6.86 Gbits/sec
[ 9] 0.0-10.0 sec 7.15 GBytes 6.14 Gbits/sec
[ 10] 0.0-10.0 sec 11.1 GBytes 9.53 Gbits/sec
[ 4] 0.0-10.0 sec 10.8 GBytes 9.26 Gbits/sec
[ 6] 0.0-10.0 sec 13.5 GBytes 11.6 Gbits/sec
[ 3] 0.0-10.0 sec 7.58 GBytes 6.51 Gbits/sec
[ 8] 0.0-10.0 sec 10.1 GBytes 8.63 Gbits/sec
[ 5] 0.0-10.0 sec 13.4 GBytes 11.5 Gbits/sec
[ 11] 0.0-10.0 sec 6.85 GBytes 5.88 Gbits/sec
[SUM] 0.0-10.0 sec 99.9 GBytes 85.8 Gbits/sec

85.8 Gbits/sec

表にしてみると以下のようになりました。

計測方法 実測値
iperf3 Single Thread 23.6 Gbits/sec
iperf3 10 Threads 26.6 Gbits/sec
iperf2 Single Thread 22.8 Gbits/sec
iperf2 10 Threads 85.8 Gbits/sec

iperf3よりもiperf2の方が計測時に速度が出ていることが分かります。
この結果は、CRS326-24S+2Q+RMでの40GbEのスループットをテストしてみた!でも同様の傾向がみられました。

計測(MTU9000)

続いて、MTUを9000にして再度計測を行ってみます。

1
$ sudo ip link set dev enp65s0 mtu 9000

iperf3 Single Thread

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ iperf3 -c 10.0.0.1
Connecting to host 10.0.0.1, port 5201
[ 5] local 10.0.0.2 port 41070 connected to 10.0.0.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 4.29 GBytes 36.8 Gbits/sec 42 1.71 MBytes
[ 5] 1.00-2.00 sec 3.49 GBytes 30.0 Gbits/sec 4 1.71 MBytes
[ 5] 2.00-3.00 sec 3.56 GBytes 30.6 Gbits/sec 3 1.71 MBytes
[ 5] 3.00-4.00 sec 3.57 GBytes 30.7 Gbits/sec 1 1.71 MBytes
[ 5] 4.00-5.00 sec 3.57 GBytes 30.7 Gbits/sec 1 1.72 MBytes
[ 5] 5.00-6.00 sec 3.29 GBytes 28.3 Gbits/sec 6 1.72 MBytes
[ 5] 6.00-7.00 sec 3.39 GBytes 29.1 Gbits/sec 3 1.72 MBytes
[ 5] 7.00-8.00 sec 3.39 GBytes 29.1 Gbits/sec 18 1.08 MBytes
[ 5] 8.00-9.00 sec 3.33 GBytes 28.6 Gbits/sec 0 1.08 MBytes
[ 5] 9.00-10.00 sec 3.37 GBytes 28.9 Gbits/sec 2 1.08 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 35.2 GBytes 30.3 Gbits/sec 80 sender
[ 5] 0.00-10.00 sec 35.2 GBytes 30.3 Gbits/sec receiver

iperf Done.

30.3 Gbits/sec

iperf3 10 Threads.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ iperf3 -P 10 -c 10.0.0.1
--<中略>--
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 41 sender
[ 5] 0.00-10.00 sec 4.24 GBytes 3.65 Gbits/sec receiver
[ 7] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 24 sender
[ 7] 0.00-10.00 sec 4.24 GBytes 3.65 Gbits/sec receiver
[ 9] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 70 sender
[ 9] 0.00-10.00 sec 4.24 GBytes 3.64 Gbits/sec receiver
[ 11] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 30 sender
[ 11] 0.00-10.00 sec 4.24 GBytes 3.65 Gbits/sec receiver
[ 13] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 65 sender
[ 13] 0.00-10.00 sec 4.24 GBytes 3.65 Gbits/sec receiver
[ 15] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 44 sender
[ 15] 0.00-10.00 sec 4.24 GBytes 3.65 Gbits/sec receiver
[ 17] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 34 sender
[ 17] 0.00-10.00 sec 4.24 GBytes 3.65 Gbits/sec receiver
[ 19] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 75 sender
[ 19] 0.00-10.00 sec 4.24 GBytes 3.65 Gbits/sec receiver
[ 21] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 72 sender
[ 21] 0.00-10.00 sec 4.24 GBytes 3.64 Gbits/sec receiver
[ 23] 0.00-10.00 sec 4.25 GBytes 3.65 Gbits/sec 45 sender
[ 23] 0.00-10.00 sec 4.24 GBytes 3.64 Gbits/sec receiver
[SUM] 0.00-10.00 sec 42.5 GBytes 36.5 Gbits/sec 500 sender
[SUM] 0.00-10.00 sec 42.4 GBytes 36.4 Gbits/sec receiver

iperf Done.

36.4 Gbits/sec

iperf2 Single Thread.

1
2
3
4
5
6
7
8
$ iperf -c 10.0.0.1
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 2.13 MByte (default)
------------------------------------------------------------
[ 3] local 10.0.0.2 port 46828 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 40.0 GBytes 34.4 Gbits/sec

34.4 Gbits/sec

iperf2 10 Threads.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ iperf -c 10.0.0.1 -P 10
------------------------------------------------------------
Client connecting to 10.0.0.1, TCP port 5001
TCP window size: 1.90 MByte (default)
------------------------------------------------------------
[ 12] local 10.0.0.2 port 46848 connected with 10.0.0.1 port 5001
[ 8] local 10.0.0.2 port 46838 connected with 10.0.0.1 port 5001
[ 7] local 10.0.0.2 port 46840 connected with 10.0.0.1 port 5001
[ 11] local 10.0.0.2 port 46846 connected with 10.0.0.1 port 5001
[ 5] local 10.0.0.2 port 46834 connected with 10.0.0.1 port 5001
[ 6] local 10.0.0.2 port 46836 connected with 10.0.0.1 port 5001
[ 10] local 10.0.0.2 port 46842 connected with 10.0.0.1 port 5001
[ 4] local 10.0.0.2 port 46832 connected with 10.0.0.1 port 5001
[ 9] local 10.0.0.2 port 46844 connected with 10.0.0.1 port 5001
[ 3] local 10.0.0.2 port 46830 connected with 10.0.0.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 12] 0.0-10.0 sec 8.39 GBytes 7.21 Gbits/sec
[ 8] 0.0-10.0 sec 8.72 GBytes 7.49 Gbits/sec
[ 7] 0.0-10.0 sec 22.3 GBytes 19.1 Gbits/sec
[ 11] 0.0-10.0 sec 8.59 GBytes 7.38 Gbits/sec
[ 5] 0.0-10.0 sec 9.57 GBytes 8.22 Gbits/sec
[ 6] 0.0-10.0 sec 21.7 GBytes 18.6 Gbits/sec
[ 10] 0.0-10.0 sec 8.56 GBytes 7.35 Gbits/sec
[ 4] 0.0-10.0 sec 9.24 GBytes 7.93 Gbits/sec
[ 9] 0.0-10.0 sec 8.87 GBytes 7.62 Gbits/sec
[ 3] 0.0-10.0 sec 9.19 GBytes 7.90 Gbits/sec
[SUM] 0.0-10.0 sec 115 GBytes 98.8 Gbits/sec

98.8 Gbits/sec

表にしてみると以下のようになりました。

計測方法 実測値
iperf3 Single Thread 30.3 Gbits/sec
iperf3 10 Threads 36.4 Gbits/sec
iperf2 Single Thread 34.4 Gbits/sec
iperf2 10 Threads 98.8 Gbits/sec

先ほどと同様に、こちらもiperf3よりiperf2の方が計測時に速度が出ていることが分かります。

まとめ

先ほどの結果をまとめて表にしてみると以下のようになりました。

計測方法 MTU 1500 MTU 9000
iperf3 Single Thread 23.6 Gbits/sec 30.3 Gbits/sec
iperf3 10 Threads 26.6 Gbits/sec 36.4 Gbits/sec
iperf2 Single Thread 22.8 Gbits/sec 34.4 Gbits/sec
iperf2 10 Threads 85.8 Gbits/sec 98.8 Gbits/sec

これらの結果を踏まえると、それぞれの計測方法においてMTU9000の方が計測値が速いことから、ジャンボフレームはある程度の効果があると考えられます。
また、iperf2において-Pオプションを使用して並列実行することで、98.8 Gbits/secと100Gbps近い数値が出ています。

iperf2-Pオプションを使用して計測することでソフトウェア側のボトルネックをある程度解消できることは、以前計測を行った際の結果から予想していましたが、せいぜい40Gbps程度が限界だろうと思っていたので、100Gbpsという理論値に近い数値が出たことは予想外でした。

テスト結果が信頼できるかどうかという点については不明ですが、正しい結果であるとすれば、100GbEにおいてもiperf2-Pオプションと併用することで帯域テストを行うことは十分可能なのではないでしょうか。

今回は 100GbE 環境をマシンごと利用できる機会があったので、検証を行ってみました。
本環境で100Gbps出せるという事が確認できました。

40GbE環境や100GbE環境でiperf2iperf3を使用して帯域テストを行う際には、ソフトウェア側がボトルネックになる可能性を考慮する必要があります。

参考になれば幸いです。