逸般の誤家庭で40GbEはじめますた その3(構築編)

機材が揃ったので、サーバ/クライアント直結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/秒にも満たないが、素敵な速さだ。