後ろへ向かって前進 Act.2

www.ragemax.com

(更新: 2017年2月12日)

自宅40GbEで、悪あがきする!(なかなか手ごわい相手です)

前回は「自宅のPCに40GbE NICを入れたけど、あんまりスループットが出ないね」
って記事を書きました。
今回はその続きで、どこまで性能を出せるかという話題です。

[考察]

 前回、40GbE NICでも実測では11Gbpsくらいという結果が出ました。
この原因を考えてみます。

  1. OSがWindows Server 2012 R2/2016ではない
    →これらのサーバーOSではRDMAという機能が使えます。
    これはCPUやディスクを使わず、ネットワーク越しにPC間のメモリからメモリに
    直接データを転送するというすごい機能で、このおかげで低遅延・高速転送が
    実現できるわけです。
    今回の40GbE NICであるConnectX-3もRDMAをサポートしていますが、
    クライアントOSでは使えません。(Windows 10 Enterpriseは例外)

  2. その他設定漏れ,仕様など→何かあるのかもしれない。

 とりあえず、できることから試していくことにします。
なお、書き漏れてましたが環境は以下の通りです。

 2台にそれぞれConnectX-3を入れ、QSFP+ケーブル1本で直結しています。
両方ともにドライバの設定で、ジャンボフレームの値を9000byteに変更しました。
それ以外はデフォルトです。

どちらのマシンもPCIe3.0×8接続が不足なくできるため、環境に瑕疵はない……と思う。

[実験]

1.片方のPCだけWindows Server 2016にする

 まずメイン機のみ、Windows Server 2016の評価版を入れて実験します。
スループット計測はiPerf3を使いました。

40GbE NIC入れてる片方をWindows Server 2016にして、2016側を受け手にして送信側からiPerfでテストしたらスループットがいきなり20Gbpsを超えた。やっぱりRDMAの力が必要だな。 pic.twitter.com/fMdimcPiyb

— のらねこ! (@ragemax) 2017年2月5日

 いきなりスループットが20Gbpsまで伸びました。しゅごい。
これはもう片方も2016にしちゃうか~と、安易に考えました。

2.両方ともWindows Server 2016にする

 今度は、録画機側もWindows Server 2016としました。
インストールは速いから助かりますね。

40GbEの両端をWindows Server 2016にすると25Gbpsくらい出た pic.twitter.com/tdFpPTtX05

— のらねこ! (@ragemax) 2017年2月5日

 更に伸び、今度は25Gbpsを計測。やっぱりサーバーOSだなガハハ!という感想。

3.NTttcpを使う

 これまでは計測にiPerfを使っていましたが、マイクロソフトが同じようなツールとして
NTTtcpというものを用意しています。
なんせマイクロソフト純正ですから、何かしらメリットがあるんだろうな…と思い
双方にダウンロードしてテストしてみます。
利用方法は、以下のページを参考にしました。

Windows Server 2012 R2 - 40GbE TCP/IP性能例
http://rdma.hatenablog.com/entry/2014/04/19/195751

マイクロソフト謹製のNTttcpっていうツールで計測したら余裕で40Gbps出た。今までのは何だったのか。 pic.twitter.com/u3vuJAsZim

— のらねこ! (@ragemax) 2017年2月5日

 いきなり仕様と同等の40Gbpsを記録しました。メッチャ速い。これを待っていました。
とはいえ、ファイルコピーで実測したわけではないですが……
でもとりあえずこれで満足しました。おい。

 このツール、使うCPUのコア数を指定することができますが、
全コアを使うこともできます。iPerfではできないのですが、
この辺が理由かもしれません。
 また、このあとWindows 10 Pro同士でもやってみましたが
同程度のスループットが出せました。

4.実環境でのテスト

 ツールでの計測はあくまで理論値みたいなもので、実際の運用では意味がありません。

では、サーバーOS同士で実際にファイルを転送してみたらどうか…と思い

両方のPCにメモリディスクを作り、そこに8GB程度のファイルを置いて

移動してみることにしました。

自宅40GbE実験を進めた結果、実環境だとメモリディスク同士の転送で2.3GB/sくらい出たから、つまり20Gbps程度は何とかなるってことかな。 pic.twitter.com/zDHj8mj4Zh

— のらねこ! (@ragemax) 2017年2月5日

Windows 10同士の時は半分くらいしか速度が出ませんでしたが、
一気に2.3GB/sくらいに向上しました。
40Gbpsの理論値からは半分程度ですが、RDMAの効果が出ているのかもしれません。
理論値に届かないのは、ファイル転送のプロトコル(SMB)の問題か、
もしくは他の要因があるのかもしれません。

 しかし、実験はまだ続きます。これらのつぶやきがTwitterで少しだけ拡散したところ、
ツワモノの皆様から貴重なアドバイスをいくつか頂戴しました。
それらをフィードバックしたいと思います。

5.iPerf3で計測し直す(Windows 10にて)

 iPerf3には同時スレッド数を指定する -P オプションがあり、
標準では1スレッドのみ実行されます。
これを複数にしたら、Windows 10でも速くなるんじゃね?という感じです。
とりあえず、14スレッドに指定して実験してみました。

14スレッドなら24Gbps

 結果として、Windows 10でも多スレッドなら
ある程度スループットが伸びることがわかりました。
実際は5スレッドくらいから20Gbpsを超え、8~10スレッドくらいで
24Gbpsくらいに達するようです。

6.Windows 10 ProでSMBダイレクト機能を有効にしてみる(失敗)

 気づかなかったんですが、Windows 10(少なくともAnniversary Update位から)の
『Windows の機能』の有効化ページに、SMB ダイレクトの項目ができていました。

OS入れ直しまでしたのに……

 [RDMAが有効になる]とポップアップでは表示されます。マジかよ……と思い、
2台のPCで有効にしましたが、結果としては意味がありませんでした。
これを有効にしても、Windows 10 ProではRDMAを有効にできないようです。
何かしら方法があるかもしれませんが、現状では不明です。

7.まとめ

ここまで40GbE NICを使ってみて、得られた教訓をメモします。

  • ジャンボフレームは必須。9000byte以上指定しないと10Gbpsも出ない。
  • Windows 10 Proでも色々やればある程度のスループットは出るが、
    実際のファイル転送では10GbEに毛が生えた程度にとどまる。
  • **40GbEを使うなら、サーバーOSでないと厳しい。**RDMAの力。

 結局は最後に落ち着く……という感じでしょうか。

サーバーOSでなくても、Windows 10 EnterpriseはRDMAを有効にできるようですが

一般的ではないですね。

そもそも40GbEに見合ったストレージがコンシューマーにない…という問題も
ありますが、これについてはそのうち解決されると信じたいです。

8.最後に(奥の手がまだある)

 今回購入したConnectX-3は2ポートのため、使っていないもう1ポートを使い
**SMBマルチチャネル**を利用すれば、もう少しスループットが出せるのでは……
という仮定があります。
ケーブルが高いのが難ですが、そのうち試してみたいと思います。