Linux stack or BSD stack

LinuxのTCP/IPスタックと*BSDのTCP/IPスタックどっちが優れているのかというのはよく出てくる質問で、探せばベンチマーク結果もいろいろ出てくるが、当然TCP/IPスタック以外のカーネル構造の違いも大きいので、apple-to-appleの比較は難しい。

ユーザベースではLinuxが圧倒的なのだろうけど、NetflixのCDNではFreeBSDが使われているのは有名(「Netflix and FreeBSD: Using Open Source to Deliver Streaming Video 」[FOSDEM2019])。また、「サービス可用性を改善するための異種OS間プロセスマイグレーションの活用」によると、一般的にLinuxは常に高スループットであるが、高負荷時にはエラーが頻発する。一方、FreeBSDは高負荷時でもエラーを起こさない。粘りがあるというか、ダイソンの掃除機のように吸引力が落ちないという感じだろうか。

Apple-to-appleの比較が難しいのであれば、比較したいものをどちらかに移植するというが、大変ではあるがストレートフォワードなアプローチだろう。「The Battle of the Schedulers: FreeBSD ULE vs. Linux CFS」[USENIX ATC 2018]はそのような試みのひとつで、LinuxとFreeBSDのスケジューラを比較するために、FreeBSD ULEをLinuxに移植して評価を行っている。例えば(エクストリームな例ではあるが)、シングルコア上でのApacheベンチがULEの方が40%弱性能が高いが、これはプリエンプションの挙動の違いなのだとか。CFSだとワーカによってトラフィックインジェクタが頻繁にプリエンプトされるので、性能が落ちる。一方、ULEではカーネルスレッド以外にはプリエンプトされないので、性能は一定。

ネットワークスタックについてはどうだろうか。BSDのネットワークスタックをLinuxカーネルに移植するという話もあるかもしれない。FreeBSDのTCP/IPスタックをユーザランドで動作するようにしたライブラリは、libuinetやTencentのF-stackなど、いくつか存在する。DPDKなどのパケットエンジンを使えるものもあるので、性能もよさそうだし、カーネルをいじるひつようがないので、気軽に試すこともできる。LinuxのTCP/IPをライブラリ化するような奇特なヒトはいないだろうか?

[追記] Linux Kernel Library (LKL)ってプロジェクトがあるようだ。Linuxカーネルをまるごとライブラリ化するようなイメージ。

この記事が気に入ったらサポートをしてみませんか?