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




1 件のコメント:

  1. こんにちは、白水と申します。
    少し前に興味深く拝見していたのですが、
    今日リリースしましたFastCopy v3.30r2にて、
    ・(読み込みなしの)テストファイル作成モード
    という動作を追加しました。

    これはFastCopy自体の特徴の
    ・非同期I/Oを使った重畳WriteFile発行
    ・FILE_FLAG_NOBUFFERINGによるダイレクトI/O
    を実験用書き込みでも使えるようにするものです。


    SMB自体の制約は残るのですが、それ以外は制約要因がほぼない書き込み速度実験ができるかもしれません。
    ご興味がありましたら、お試し頂ければと思います。
    (従来と違う結果が出るか、結局、SMBが律速要因で…というオチになるかは判らないのですが)

    https://ipmsg.org/archive/FastCopy330r2_x64.zip (x64用binary)
    https://ipmsg.org/archive/FastCopy330r2src.zip (ソースコード)

    P.S v3.30はネットワークドライブ相手のテスト作成で FILE_FLAG_NOBUFFERING が無効になっていたので、その点だけ変更したものです

    返信削除