機材が揃ったので、サーバ/クライアント直結40GBASE-SR4ネットワークを構築する。
ネットワーク概略図を示す。
(2020-03-07 追記)
FreeBSDのL2ブリッジif_bridge
はジャイアントロックを使った実装が原因でボトルネックとなるようだ。実際、うちの環境ではブリッジなしでは30Gbpsを超えるのに対し、ブリッジを使うと12~13Gbpsで頭打ちとなる。
クライアントとサーバを40GBASE-SR4で直結し、サーバで40GbEのI/Fと1GbEのI/Fをブリッジする。こうすることで、40GbE対応スイッチがなくとも、40GbEによる高速化の恩恵を受けつつ既存の1000BASE-Tネットワークとの相互運用が実現できる。当然ながら、サーバが落ちてるとクライアントのネットワークも使えなくなってしまうが、うちでは常時稼働させてるので殆ど問題ない。いざって時はクライアントを従来通り1000BASE-Tで繋げばいいだけだし、そこは割り切る。
40GbEといっても恐るるなかれ、ネットワークカードは何の変哲もないPCI-Expressカードだ。ビデオカード等を取り付ける要領でマシンにNICを挿し、ドライバをインストールすればよい。
FreeBSD(サーバ側)では/boot/loader.conf
に以下の1行を追加し再起動すると、mlxen0/mlxen1というネットワークデバイスが生えてくる。
mlx4en_load="YES"
40GbEと1GbEのブリッジは/etc/rc.conf
に以下の設定を追加する。このサーバではsshやSambaなどのサービスを提供しているので、igb0
のIPアドレスをbridge0
に付け替える。ブリッジにIPアドレスを振る場合は、必ずブリッジそのもの(ここではbridge0
)に対して行う。ブリッジメンバ(ここではigb0)に振ると、一見動いているように見えてブロードキャストは到達するのにユニキャストは到達しない、といった非常に分かりにくい問題を誘発することになる。
cloned_interfaces="bridge0" ifconfig_bridge0="ether XX:YY:ZZ:00:00:01 addm igb0 addm mlxen0 up" ifconfig_bridge0_alias0="inet 192.168.0.1 netmask 255.255.255.0" ifconfig_igb0="up" ifconfig_mlxen0="up"
うまくブリッジが出来上がればifconfigが↓こんな感じになる。bhyve用のブリッジも兼用してるのでtapも刺さってるのは無視してくだしあ。
$ ifconfig bridge0 bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 description: vm-public ether XX:YY:ZZ:00:00:01 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 nd6 options=9<PERFORMNUD,IFDISABLED> groups: bridge vm-switch viid-4c918@ id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 member: tap1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 8 priority 128 path cost 2000000 member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 7 priority 128 path cost 2000000 member: mlxen0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 4 priority 128 path cost 500 member: igb0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> ifmaxaddr 0 port 1 priority 128 path cost 2000000
Windows(クライアント側)はふつーのEthernet設定の要領で、ConnectX-3のネットワークプロパティでIPアドレス等を設定してやればよい。サーバ側の設定が問題なければ、今までと同じように通信が行えるはず。
最後にSambaでファイルコピーを行ったGIF動画を貼っておく。サーバのSSD(Intel DC S3500シリーズ)の速度がボトルネックとなり10Gb/秒にも満たないが、素敵な速さだ。