FreeBSD - The Power To Serve

FreeBSDプロジェクトの開発者は6月28日(協定世界時)、「PostgreSQL/FreeBSD performance and scalability on a 40-core machine」において、40コア/80スレッドのマシンにおけるPostgreSQLの性能を最大で36倍ほど高速化するパッチを発表した。同パッチは現在も議論されており、FreeBSD 11.0-RELEASEやFreeBSD 10.1-RELEASEに取り込まれるものとみられる。

開発者はメニーコアマシンで動作するPostgreSQLの性能がスケールしないという指摘を受けて問題の調査を開始。分析を進めたところ、共有メモリに並列アクセスするタイミングで大量のコンテンションが発生していることを発見したと指摘。ほかにも改善の余地のあるキャッシュ利用、性能の悪いセマフォの利用、コンパイラの違いによるスケジューラコードの性能の差、ストレージドライバにおける性能向上などいくつかの改善点を発見したという。

スレッド数 通常のカーネル パッチ適用済みカーネル
1 5698.41 6378.57
5 33026.72 38513.55
10 26854.85 75916.02
15 11874.05 110696.75
20 9232.19 141171.54
25 7530.54 156066.39
30 6086.78 153771.79
35 5050.99 131141.87
40 3969.86 115945.73
60 2389.97 76474.32
80 1944.68 70179.30

縦軸がベンチマークのtps、横軸が並列数

これら改善を取り込んだカーネルと一般的なカーネルを比較したところ、一般的なカーネルは5並列以降は並列数が増えるごとに性能が低下するが、改善を取り込んだカーネルでは25から30並列ほどまで性能がスケール、その後徐々に性能が落ちる傾向を示した。性能差は最大で36倍ほどになっている。この改善はFreeBSD 11.0-RELEASEやFreeBSD 10.0-RELEASEで取り込まれるものとみられる。