アーカイブ

‘debian’ タグのついている投稿

パッケージビルドのコンパイルオプションによるパフォーマンスチューニング 覚書

2009 年 10 月 3 日 コメントはありません

GCCのコンパイルオプションをいじってソフトウェアを自前でビルドすることのよるパフォーマンスの向上をいろいろ調べたり実験してみた。結論は、いじって著しくパフォーマンスが向上するものもあれば、そうでないものもある。確かにコンパイルオプションのよるチューニングでパフォーマンスが悪くなることはまずないが、依存パッケージにまで手をかけたりすると、果たしてその時間と苦労に見合ったパフォーマンス向上が見込めるかどうかは疑問である(コンパイルって一発で通ることはあまりないし、コンパイルそのものにどえらい時間がかかる場合がある。Qtとかホントにひどい)。

以下、パッケージビルド手順とコンパイルオプション設定について調べたことのメモ。上記のように「無理してやるもんでもない」という結論を得た今、もはや無意味な記録である。なお実験はbzip2や円周率の計算でやってみた。ガチャガチャやってみても3%程度しか計算が速くならなかった(たぶん有意でない)ので記録を残す気にもならない。というわけで以下、雑記。

Debianのパッケージ管理のうえでの自前コンパイルにおけるコンパイルのチューニングには、役に立ちそうなソフトウェアがいろいろとある。

pentium-builder

gccやg++に-marchや-mcpuなどのオプションを付加するラッパープログラム。ただし、挙動が良くわからない上に、どうもホントにただ付加しているだけのようで、コントロールが効きづらい印象を受けた。

apt-build

aptのパッケージ管理のうえで、指定したパッケージをソースコードからビルドしなおすプログラム。パッケージ作成の手間を減らす効果があるみたい。ただし、apt-buildの設定ファイルである/etc/apt/apt-build.confでコンパイルオプションを設定しても、dpkg-buildpackageで実行されるコンパイルには設定したオプションが反映されていないケースが多く、僕以外にも報告が多数あり(その1その2その3:Debianのスレッドでは回答がない始末)。”export CFLAGS=’-O3 -march=pentium3′”などのようにに環境変数CFLAGS等にコンパイルオプションを設定することで反映されるが、それってapt-buildとは関係ない。2ちゃんねるでもあまり良い評価がない(その1その2その3

どうも挙動が信頼できないうえに”man apt-build”にあったとどめの一言が”BUGS: Many.”。もう使うのやめた。

dpkg-buildpackage

上記apt-buildの元となるソフトウェア。

apt-get  update
apt-get  source  hello
cd  hello-x.x
debuild  -us  -uc
sudo  dpkg-i  ../hello_xxxx.deb

な手順でパッケージをビルドすることができる。で、出来上がったパッケージをdpkgでインストールする。コンパイルオプションは、環境変数CFLAGSに”export CFLAGS=’-O3 -march=pentium3m'”な具合に設定することができる。しかし、automakeの挙動(?正直よくわからん)でgccのコマンドライン末尾に”-g -O2″がついてるため、CFLAGSで設定された-Oxオプションが無効になってしまう(参考)。

dpkg-buildpackageではソースパッケージのdebian/rulesの記述を設定してからビルドにとりかかる。手順を詳しく調べたわけではないが、このrulesにコンパイルオプションを記述することでコンパイルに反映される。たとえば、

CFLAGS = -O3 -march=pentium3m

といった具合に。ただし、ここでCFLAGSを設定するとautomakeで設定されたものも消えてしまうのでCFLAGS_APPENDのほうがベターだと思う(未試行)。

一番よさげなのは?

以上の検討の結果、コンパイルオプションをいじるのはソースパッケージのdebian/rulesに記述し、dpkg-buildpackageを実行するのが最も融通が利きそうという結論を得た。

でも、もうこだわるのはやめた。postgresql、grass、qgisぐらいは最適ビルドしてやる。ほかは面倒くさい。疲れた。

以下、付随的な情報。

GCC: CPUに関する最適化オプション
Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか – bkブログ
-fPICのこと
フリーソフトウェア徹底活用講座(24)
-m32や-m64のこと
Debian 新メンテナガイド – debian/ ディレクトリ以下に無くてはならないファイル
ソースパッケージの構成の説明
カテゴリー: linux, PC タグ: