コンテンツにスキップ

「Makepkg-optimize」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
Kgx (トーク | 投稿記録)
Kgx (トーク | 投稿記録)
 
(同じ利用者による、間の2版が非表示)
57行目: 57行目:


=== chroot を使う ===
=== chroot を使う ===

{{Note|chroot を [[en2:DeveloperWiki:Building in a clean chroot#Building in the chroot|アップデート]] するとき、[[#makepkg-optimize とバックエンドのインストール|AUR パッケージ]]は手動で更新が必要です。}}


==== パッケージのビルド ====
==== パッケージのビルド ====
69行目: 67行目:


===== PGO でビルド =====
===== PGO でビルド =====

{{ic|BUILDENV}} の {{ic|pgo}} オプションは、パッケージのビルド時にこのフラグが有効になっているかどうかによって、プロファイルの ''生成'' または ''適用'' のどちらかを行います。
クリーンな chroot ビルドでは、プロファイル生成時にはソフトウェアが chroot の外で実行される一方で、再コンパイル時にはプロファイルを chroot 内から適用する必要があるため、これが複雑になります。
この問題を解決する方法は、バインドマウントされたフォルダーを使って、3つのファイルシステム間を橋渡しすることです。


====== PGO キャッシュの作成 ======
====== PGO キャッシュの作成 ======


PGO を使うときは、[https://gcc.gnu.org/onlinedocs/gcc/Gcov-Data-Files.html プロファイル] を保存するために chroot の中と外、同じ場所にフォルダを作成して、それをバインドします:
プロファイルデータを保存するフォルダを作成してバインドします [https://gcc.gnu.org/onlinedocs/gcc/Gcov-Data-Files.html profiles]:


# mkdir -m 777 {"$CHROOT"/{root,"$USER"},}/mnt/pgo
# mkdir -m 777 {"$CHROOT"/{root,"$USER"},}/mnt/pgo
78行目: 80行目:
# mount -o bind "$CHROOT"/{root,"$USER"}/mnt/pgo
# mount -o bind "$CHROOT"/{root,"$USER"}/mnt/pgo


{{Tip|[[fstab]] を使って起動時に上記のフォルダを [https://serverfault.com/a/613184 バインド] することもできます。}}
{{Tip|起動時にこれらのフォルダ自動的にバインドするには、[[fstab]] を使います。[https://serverfault.com/a/613184 bind] の設定例:
#PGODEST
/full/path/to/$CHROOT/$USER/mnt/pgo/ /mnt/pgo/ none bind,x-gvfs-hide 0 0
/mnt/pgo/ /full/path/to/$CHROOT/root/mnt/pgo/ none bind,x-gvfs-hide 0 0

{{Note|chroot 内の pgo ディレクトリへのパスは、$VARIABLES を使わずにフルパスで記述してください。}} }}


それから {{ic|$CHROOT/root/etc/makepkg-optimize.conf}} を編集し{{ic|1=PROFDEST=/mnt/pgo}} を設定してください
{{ic|$CHROOT/root/etc/makepkg-optimize.conf}} を編集し{{ic|1=PROFDEST=/mnt/pgo}} を設定します


====== プログラムのプロファイル ======
====== プログラムのプロファイル ======

2025年4月28日 (月) 14:48時点における最新版

makepkg-optimizeAURpacman を補助する tidybuildenvexecutable スクリプト集です。build()package() で最適化をかけるマクロを提供します。

ノート Arch User Repository の他のパッケージと同じく、makepkg-optimizeAUR に公式サポートはありません。AUR ページのコメント欄を使ってください。

インストール

makepkg-optimizeAUR をインストールしてください。また、最適化を行うためにバックエンドをインストールしてください: openmp, upx, optipng, svgoAUR, polly

設定

makepkg-optimizeAUR は現在の makepkg の設定から /etc/makepkg-optimize.conf という名前の 設定ファイル を生成します。

このファイルにはコンパイルフラグ, ビルド環境, パッケージオプション, パッケージ出力, 圧縮デフォルト の追加オプションが記載されています。デフォルトでは全て無効となっています。

最適化されたパッケージのビルド

警告 最適化によってはパッケージのビルドが上手くいかなくなることがあり、過最適化がパフォーマンスの劣化を引き起こしたりセグメンテーション違反が発生する可能性もあります。

最適化の設定を行ったら、ビルドするときに設定ファイルを指定してください:

$ makepkg -c --config /etc/makepkg-optimize.conf
ヒント パッケージに古い最適化フラグを再利用しないように、makepkg-cを使用します。Makepkg#使用方法を参照してください。
ノート Profile-guided optimization ではパッケージを2回ビルド・インストールする必要があります。最初 $PROFDEST/pkgbase.gen にプロファイルを生成して、それからプロファイルを $PROFDEST/pkgbase.used に移動して適用します。

chroot で最適化されたパッケージのビルド

また、makepkg-optimize を使って chroot の中で最適化済みのパッケージをビルドすることもできます。

Chroot の設定

chroot をセットアップした後、設定が必要です。

makepkg-optimize とバックエンドのインストール

まず、chroot に最適化マクロのバックエンドをインストール:

$ arch-nspawn "$CHROOT"/root pacman -S openmp upx optipng polly

それから makepkg-optimizeAURsvgoAURダウンロードビルドしてください。

chroot でインストールするには、以下のようにパッケージファイルをコピーしてインストールします:

# cp svgo-1.2.2-2-any.pkg.tar.xz "$CHROOT"/root/root/
$ arch-nspawn "$CHROOT"/root pacman -U /root/svgo-1.2.2-2-any.pkg.tar.xz
警告 上記の操作を行うと完全な chroot ではなくなります。

chroot を使う

パッケージのビルド

まず、$CHROOT/root/etc/makepkg-optimize.conf を編集して好みの最適化を選択してください。

ビルドするときに、makepkg に設定ファイルを指定してください:

$ makechrootpkg -c -r "$CHROOT" -- -c --config /etc/makepkg-optimize.conf
PGO でビルド

BUILDENVpgo オプションは、パッケージのビルド時にこのフラグが有効になっているかどうかによって、プロファイルの 生成 または 適用 のどちらかを行います。 クリーンな chroot ビルドでは、プロファイル生成時にはソフトウェアが chroot の外で実行される一方で、再コンパイル時にはプロファイルを chroot 内から適用する必要があるため、これが複雑になります。 この問題を解決する方法は、バインドマウントされたフォルダーを使って、3つのファイルシステム間を橋渡しすることです。

PGO キャッシュの作成

プロファイルデータを保存するフォルダーを作成してバインドします profiles:

# mkdir -m 777 {"$CHROOT"/{root,"$USER"},}/mnt/pgo
# mount -o bind {,"$CHROOT"/root}/mnt/pgo
# mount -o bind "$CHROOT"/{root,"$USER"}/mnt/pgo
ヒント 起動時にこれらのフォルダーを自動的にバインドするには、fstab を使います。bind の設定例:
#PGODEST
/full/path/to/$CHROOT/$USER/mnt/pgo/ /mnt/pgo/ none bind,x-gvfs-hide 0 0
/mnt/pgo/ /full/path/to/$CHROOT/root/mnt/pgo/ none bind,x-gvfs-hide 0 0 
ノート chroot 内の pgo ディレクトリへのパスは、$VARIABLES を使わずにフルパスで記述してください。

$CHROOT/root/etc/makepkg-optimize.conf を編集し、PROFDEST=/mnt/pgo を設定します。

プログラムのプロファイル

パッケージをビルドして、インストールして、テスト実行してみてください。

ノート プログラムの exit() 時にプロファイルは作成されます。systemd などのデーモンの場合、プロファイルを作成するには再起動が必要となります。再起動したら、再ビルドする前に PGO キャッシュを再バインドしてください。

ソフトウェアを一通り使ったら、パッケージを再ビルド・再インストールしてください。