概要
- Linux と OpenBSD での簡単なスレッド+ソケット作成ベンチマークの比較
- OpenBSD の方が 圧倒的に高速 な結果
- ソースコードの要点:2スレッドでそれぞれ256ソケット生成
- Linux は0.017〜0.026秒、 OpenBSD は0.002〜0.006秒
- 背景や詳細な理由はリンク先スレッドで解説
LinuxとOpenBSDにおけるスレッド&ソケット生成ベンチマーク比較
- Jann Horn 提供のベンチマークプログラム紹介
- 2スレッドで各256個のソケットを生成するCコード
- ソケット生成失敗時はエラー出力
- Linux での実行結果
- 平均 0.017〜0.026秒 の実行時間
- ソケット生成自体は問題なく完了
- OpenBSD での実行結果
- 初回は「 Too many open files」エラー(ulimit設定不足)
- ulimit調整(例:ulimit -n 1024)後は 0.002〜0.006秒 の高速実行
- 機械構成 は完全一致しないが、ほぼ同等スペック
- OpenBSD がLinuxより 約5〜10倍高速 な結果
- 一般的にはOpenBSDが遅いベンチマークが多いが、本件は逆パターン
ベンチマークのポイントと補足
- プログラムの主な処理内容
- 1つの追加スレッドを生成
- 両スレッドで 256個のソケット を作成
- 実行時間を gettimeofday で計測
- timeコマンド の精度が足りないため、プログラム内で自計測
- ネットワークスタック自体の違いではなく、他の要因が影響
- 詳細な理由やヒントは スレッド元の議論 参照推奨
- Linuxで本ベンチマークを上回る環境があれば興味深い
所感とまとめ
- 通常はOpenBSDが極端に遅いベンチマークが多い
- 今回のような例は 珍しくコレクション入り
- 比較的小規模なスレッド・ソケット生成 ではOpenBSDの実装が有利な場合あり
- 性能評価時は 単純な先入観に頼らず、実測値と考察が重要
いや、一般的にLinuxはOpenBSDより少なくとも3倍は速いよ。最適化にあんまり気を使ってないからね。