FreeBSD - The Power To Serve

FreeBSDプロジェクトの開発者は7月16日(協定世界時)、「PostgreSQL/FreeBSD performance and scalability on a 40-core machine (Version 2.0. SVN revision 142)」において、以前の40コア/80スレッドマシンで実施したPostgreSQL性能計測ではデバッグ機能が有効になったmalloc(3)を使っていたため性能がでない状態になっていたとし、あらためてデバッグ機能を無効にしたmalloc(3)を使った性能結果を発表した。結果、デバッグ機能を有効にした状態よりもトップのトランザクション数が増加したほか、スレッド数に対するスケーラビリティも向上するという性能の向上が確認されたとしている。

FreeBSDの開発版ではmalloc(3)のデバッグ機能をデフォルトで有効化している。リリース版や安定版ではデフォルトで無効になっている。今回ホワイトペーパーがアップデートされたことで、リリース版を使った場合の性能により近い値が得られるようになったといえる。デバッグ機能が有効になった状態では30スレッドあたりでスケールが停止していたが、今回は40スレッド近くまでスケールが延びており、マルチコアの活用が進んでいることがわかる。

デバッグ機能が有効になったmalloc(3)を使った場合の性能

デバッグ機能が無効になったmalloc(3)を使った場合の性能

以前のベンチマーク結果ではパッチを適用したカーネルと汎用的なカーネルとで最大36倍ほどの性能差が示されていた。今回は最大で47倍ほどの性能差が計測されている。

スレッド数 通常のカーネル パッチ適用済みカーネル
1 6879.86 6974.37
5 37178.50 41397.20
10 39751.57 82072.96
15 13197.35 120631.85
20 9514.03 156877.13
25 6911.00 184950.45
30 5834.56 201329.75
35 5036.53 206066.68
40 4408.60 201023.61
60 2942.11 139162.67
80 3528.10 120946.09

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

この取り組みは、FreeBSDで動作するPostgreSQLがマルチコアに対してスケールしないという指摘を受けて、FreeBSDの開発者がカーネル調査を実施して得られたもの。性能が出ない原因を探し出してそれぞれを解決していった結果、今回の性能向上が確認された。