FreeBSDのL2ブリッジ(if_bridge)は本当に遅かった

FreeBSDでL2ブリッジを有効にするとネットワーク性能が激烈に落ちるという話がある。なんでも、ブリッジの実装であるif_bridge(4)に存在するたくさんの最適化されてないロックのせいで性能劣化を引き起こしてるとか。

いやいや、いくら何でもそんなに変わらんやろ?と思い、ブリッジの有無でiperfしてみたら、ブリッジ有りの方でありえないほど遅くなって草も生えないんですが。

測定環境は下表の通り。ネットワークまわりのチューニングとかは特にしてない。

サーバ クライアント
OS FreeBSD 12.0-RELEASE-p4 amd64 Windows 10 Pro 1903 x64
CPU Xeon E5-2648Lv3 Ryzen 1700
NIC ConnectX-3 Pro EN (L2SW経由で40Gb接続)
ソフト iperf 2.0.13 iperf 2.0.14a

ご覧の通り、現状のif_bridgeは1GbEには十分だけど、10GbE以上の環境では完全ボトルネックとなってしまう。bhyve使うときに割と困るぞこれ…。

参考サイト