ThinkPadのパーツ交換・何かのレビュー依頼・その他連絡についてはメールフォームからどうぞ

2017年2月7日火曜日

自宅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を使いました。



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

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


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




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

3.NTttcpを使う


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

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





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

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


4.実環境でのテスト


 ツールでの計測はあくまで理論値みたいなもので、実際の運用では意味がありません。
では、サーバーOS同士で実際にファイルを転送してみたらどうか…と思い
両方のPCにメモリディスクを作り、そこに8GB程度のファイルを置いて
移動してみることにしました。


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マルチチャネルを利用すれば、もう少しスループットが出せるのでは……
という仮定があります。
ケーブルが高いのが難ですが、そのうち試してみたいと思います。




0 件のコメント:

コメントを投稿