More Related Content
Similar to MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料) (20)
More from NTT DATA Technology & Innovation (20)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
- 1. © 2023 NTT DATA Corporation 1
第39回 PostgreSQLアンカンファレンス@オンライン
MesonでPostgreSQLをビルドしてみよう!
2023年2月20日
株式会社NTTデータ 藤井 雅雄
- 2. © 2023 NTT DATA Corporation 2
自己紹介
藤井 雅雄
Database Technical Lead @ NTTデータ
データベース研究開発
PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション
WAL圧縮
バックアップ進捗確認
pg_bigm(全文検索モジュール) コミッタ
fujii_masao
MasaoFujii
- 3. © 2023 NTT DATA Corporation 3
本講演について
講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
今日紹介するPostgreSQL16に関する内容は、
正式リリースまでの間に変更となる可能性があることにご注意ください!!
講演資料に掲載の検証結果は、ノートPC上の簡易計測で取得したものです。
環境や条件などによっては、異なる検証結果になる可能性があるためご了承ください。
- 4. © 2023 NTT DATA Corporation 4
MesonでPostgreSQLを
ビルドしてみよう!
- 5. © 2023 NTT DATA Corporation 5
2022年9月のビルド関連ファイルへのコミット
$ git log --since 2022-09-01 --until 2022-09-30 --pretty=format:%s
configure src/tools/msvc/Solution.pm configure.ac src/include/pg_config.h.in src/include/port.h
Restore pg_pread and friends.
meson: Add initial version of meson based build system
Add definition pg_attribute_aligned() for MSVC
Harmonize more parameter names in bulk.
Remove DLLTOOL, DLLWRAP from configure / Makefile.global.in
aix: xlc: Use -Wl,-b,expfull for old compiler versions
Clean up minor inconsistencies in pg_attribute_printf() usage.
Use SIGNAL_ARGS consistently to declare signal handlers.
Bump minimum Perl version to 5.14
configure: Expand -fvisibility checks to more compilers, test for -qvisibility
Bump minimum version of Flex to 2.5.35
Bump minimum version of Bison to 2.3
Mesonベースのビルドシステムをv16からサポート。
以降、ソースツリー内で成熟させていく方針
https://wiki.postgresql.org/wiki/Meson
https://www.postgresql.org/docs/devel/install-meson.html
既存ビルドシステムの課題への対応
• Autoconfは古くなりつつあり、それを扱える開発者が少なくなってきている
• 再帰的なmakeは依存性の問題を解決するのが難しく、インクリメンタルなビルドには時間がかかる
• MSVCビルドシステムは、Windowsを使っていない開発者にとってはメンテナンスが難しく、テストはシリ
アルに実行される
前回PostgreSQLアンカンファレンス
資料からの再掲(*1)
(*1) PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
https://www.slideshare.net/nttdata-tech/postgresql-development-community-activities-2022-pgunconf38-nttdata
- 6. © 2023 NTT DATA Corporation 6
PostgreSQLバージョン16からMesonを使ったビルドシステムをサポート予定
既にPostgreSQLバージョン16開発版(現在のmasterブランチ)はMesonでビルド可能
MesonによるPostgreSQLのビルド方法を説明するPostgreSQLドキュメント内のページ
https://www.postgresql.org/docs/devel/install-meson.html
Mesonによるビルドシステムの各種情報を整理しているPostgreSQLコミュニティのWikiページ
https://wiki.postgresql.org/wiki/Meson
Autoconf+MakeやMSVCによる既存ビルドシステムの課題について、新しいビルドシステムで対応
• Autoconfは古くなりつつあり、それを扱える開発者が少なくなってきている
• 再帰的なmakeは依存性の問題を解決するのが難しく、インクリメンタルなビルドには時間がかかる
• MSVC独自ビルドシステムは、Windowsを使っていない開発者にとってはメンテナンスが難しく、テストはシリアルに実
行される(時間がかかる)
➡ 既存ビルドシステムのまま少しずつ改善することもできるが、Mesonによる近代的なビルドシステムに移行して対応する
方がよいと判断
- 7. © 2023 NTT DATA Corporation 7
Meson
高速でユーザフレンドリなオープンソースのビルドシステム
https://mesonbuild.com/
実際のビルド作業は、Ninja(スピード重視の軽量なビルドシステム)やMSBuildで実施
https://ninja-build.org/
他の大きなOSS(QEMUやGNOMEの大部分、systemdなど)でもMesonの採用が広がっている
https://mesonbuild.com/Users.html
Pythonで書かれていて貢献しやすい
実際、Mesonによるビルドシステムを提案・実装したPostgreSQLコミッタのAndresさんは、Mesonの開発にも貢献
https://github.com/mesonbuild/meson/commits?author=anarazel
- 8. © 2023 NTT DATA Corporation 8
Mesonのインストール
https://wiki.postgresql.org/wiki/Meson#Installing_Meson
MacOS
$ brew install meson
CentOS 8
# dnf -y install dnf-plugins-core
# dnf config-manager --set-enabled crb
# dnf -y install meson
- 9. © 2023 NTT DATA Corporation 9
典型的なPostgreSQLビルド方法の比較
AutoconfとMakeによる
従来から利用可能なビルド方法
MesonとNinjaによる
新しく利用可能なビルド方法
PostgreSQLの
コンパイル
$ ./configure オプション
$ make
$ meson setup ビルドディレクトリ オプション
$ cd ビルドディレクトリ
$ ninja
PostgreSQLの
インストール
$ su
# make install
# exit
$ su
# ninja install
# exit
ドキュメントの
コンパイル
$ make docs $ ninja docs
リグレッション
テスト
$ make check-world $ meson test
コマンドの比較表はPostgreSQLのWikiを参照
https://wiki.postgresql.org/wiki/Meson
- 10. © 2023 NTT DATA Corporation 10
MesonとNinjaはデフォルトでパラレル実行
makeは、コンパイルやリグレッションテストをデフォルトでシリアル実行
パラレル実行させるには、makeに-jオプションでパラレル度を指定する
ninjaは、ビルド環境のCPU数を自動的に検知して、デフォルトでコンパイルをパラレル実行
-jオプションでパラレル度を指定することも可能
meson testも、デフォルトでリグレッションテストをパラレル実行
--num-processesオプションでパラレル度を指定することも可能
- 11. © 2023 NTT DATA Corporation 11
MesonとNinjaでのいい感じ?の進捗報告
ninjaによるコンパイル時の進捗報告
meson testによるリグレッションテスト時の進捗報告
- 12. © 2023 NTT DATA Corporation 12
コンパイルやリグレッションテストの実行時間の比較
できるだけ同じ条件で各ビルドシステムによるコンパイルやリグレッションテストの実行時間を比較する。
• AutoconfとMakeによる従来からのビルドシステム
• MesonとNinjaによる新しいビルドシステム
実行時間はtimeコマンドで計測して、3回計測した中間値を結果として採用する。
ビルド環境
• MacBook Pro
• プロセッサ:2.4 GHz クアッドコアIntel Core i5
• メモリ:16 GB 2133 MHz LPDDR3
ビルド対象は、以下のIDのコミットでmasterブランチからチェックアウトしたソース
5352ca22e0 Rename force_parallel_mode to debug_parallel_query
- 13. © 2023 NTT DATA Corporation 13
実行時間を比較する"ほぼ同じ"条件のコマンド
Autoconf + Make Meson + Ninja
コンパイル
準備
./configure
--prefix=/opt/test1
--enable-debug
--enable-cassert
--enable-tap-tests
--with-lz4
--with-zstd
meson setup build
--prefix=/opt/test2
--debug
-Dcassert=true
-Dtap_tests=enabled
-Dlz4=enabled
-Dzstd=enabled
-Dbonjour=disabled -Dlibxml=disabled
-Dlibxslt=disabled -Dpam=disabled
-Dplperl=disabled -Dplpython=disabled
-Dpltcl=disabled -Dldap=disabled
PostgreSQL
コンパイル
make world-bin -j 10 -s ninja -j 10
PostgreSQL
インストール
make install ninja install
ドキュメント
コンパイル
make docs ninja docs
リグレッション
テスト
make check-world -j 10 -s meson test --num-processes 10
今回は、lz4などの一部の追加機能のみを有効化。
Mesonでは、追加機能に必要なソフトウェアがイン
ストール済であれば自動的にその追加機能が有効
になるのがデフォルトのため、今回は複数の追加機
能について明示的に無効化する。
今回は、パラレル度を明示的に10に設定
contribモジュールまでコンパイル
- 14. © 2023 NTT DATA Corporation 14
実行時間の計測結果
Autoconf + Make Meson + Ninja
コンパイル
準備
./configure
--prefix=/opt/test1
--enable-debug
--enable-cassert
--enable-tap-tests
--with-lz4
--with-zstd
meson setup build
--prefix=/opt/test2
--debug
-Dcassert=true
-Dtap_tests=enabled
-Dlz4=enabled
-Dzstd=enabled
-Dbonjour=disabled -Dlibxml=disabled
-Dlibxslt=disabled -Dpam=disabled
-Dplperl=disabled -Dplpython=disabled
-Dpltcl=disabled -Dldap=disabled
PostgreSQL
コンパイル
make world-bin -j 10 -s ninja -j 10
PostgreSQL
インストール
make install ninja install
ドキュメント
コンパイル
make docs ninja docs
リグレッション
テスト
make check-world -j 10 -s meson test --num-processes 10
105.5秒 112.6秒
413.1秒 351.6秒
60.0秒
8.2秒
34.6秒
48.2秒
10.8秒
24.3秒
- 15. © 2023 NTT DATA Corporation 15
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。