10GbE対応のネットワークカードおよびスイッチングハブ、ケーブルで構築された高速ネットワークでは、システムを適切に設定することで理想的な速度での通信を実現できるようになります。たとえば、最近の製品ではIntelの10GbEネットワークアダプタX540ファミリーなどが使われることが多いように思いますので、このデバイスを設定を例にあげて紹介します。
10GbEのポートが2つ搭載されたX540-T2をFreeBSD 10-CURRENTで見ると、次のようになります。ここでは片方のポートだけ結線しています。
この状態で通信すると、10GbEの論理速度から比べてだいぶ低い速度での通信しか実現できません。ドライバが使用するメモリ量の設定値を引き上げたり、経路上のすべての機器でジャンボフレームを使用するように設定を変更する必要があります。
Intel製の10GbE NICに関する設定は/usr/src/sys/dev/ixgbe/READMEに詳細が記述されていますので、基本的にはこの内容にしたがってシステムを設定します。まず、nmbclustersおよびnmbjumbo*の値を引き上げます。X540-T2を複数枚挿してある場合には、そもそもこの値を引き上げないとネットワークアダプタとして使用できません。READMEに書いてあるように割り込みのメッセージも出力されると思いますので、intr_storm_thresholdの値も説明にしたがって引き上げておきます。
次に、ifconfigでIPを割り当てる段階で同時にmtuの値を指定します。指定できる値はデバイスごとに異なります。X540-T2の場合は16114です。デフォルトではこの値は1500と定められています。10GbEの通信速度に対して1500という値は小さすぎて性能を発揮できませんので、こうした大きなサイズのmtuに変更して利用します。これがジャンボフレームです。
次のようにmtuの値が16114になっていることを確認します。
通信経路をすべてジャンボフレームに対応させたら、その経路が本当にジャンボフレームに対応したかを次のようにroute(8)コマンドで確認します。mtuの値が次のように引き上がっていれば設定は成功しています。mtuの値が1500になっている場合、どこかで設定が失敗しています。
インターフェースのmtuを引き上げたのに、route(8)が報告する経路のmtuの値が1500になっている場合には、相手のインターフェースのmtuの設定がジャンボフレームになっているか、間に挟まっているスイッチングハブがジャンボフレームの設定になっているか、などを確認してください。
10GbEに対応したスイッチングハブは高価なため、M/Bに10GbEネットワークアダプタを複数枚挿してソフトウェア的にブリッジを構築するケースもあるでしょう。その場合、すべてのインターフェースのmtuを引き上げないとbridge0のmtuが1500に固定化され、ここがネックになって経路が1500に固定化されている可能性があります。次のようにブリッジのmtuの値もジャンボフレームへ引き上がっていることを確認してください。
ifconfig(8)で設定を変更しても設定が反映されないという場合、通信経路にあるすべてのマシンを一度再起動するといった処理をしてみてください。
このセットアップされた状態で、ジャンボフレームに対応した通信を実施することで性能をフルに発揮できます。FreeBSDにインストールされているnc(1)は、デフォルトの状態ではジャンボフレームに対応していませんが、次のようにオプションを指定してビルドするとジャンボフレームに対応したnc(1)をインストールできます。
こうしてビルドしたnc(1)には-jというマニュアルには掲載されていないオプションを指定できるようになります。これは送り出すサイズをジャンボバッファと同じサイズに引き上げるというものです。先日紹介したネットワーク通信の方法を参考にして、nc(1)で通信速度を計測してみてください。構成しているハードウェアによって左右されますが、1GiB/secの速度を超える通信を確認できると思います。
scp、nc、ftp、NFSでデータ転送を実施する方法で紹介したのと同じ方法で通信速度を比較した例を次に示します。
表 計測結果
転送方法 | 転送速度[MiB/s] |
nc -j | 1163 |
nc | 832 |
ftp put | 95.3 |
scp | 60.2 |
NFS | 326.1 |
1000baseTの場合と異なり、ジャンボフレームに対応していない状態のnc(1)やFTP、NFSの速度に大きな違いがあることを確認できます。10GbEネットワークで通信を実施する場合、ジャンボフレームに対応したネットワークを構築し、ジャンボフレームに対応したプログラムを使って通信を実施することが、高速通信を実現する鍵ということがいえます。