[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:18552] chroot環境設定時間
こんにちは、
昨日、大統一Debianで言っていたことに関連して、chroot環境設定時間の問題
を試しました。実際に調べてみると、奥が深そうですね。
私のテスト環境は、SSD + 16 GB DRAM + Core i7 (8 core相当) +
高速インターネット(実測800kB/s-1.2MB/s)のsid/testing 環境です。
行ったことは、チョット違いgetmail4 を使いbuild+lintianの実行です。
インタープリタのパッケージなのでbuild時間は短い、普通にしたら以下です。
debuild real 8.07 user 5.84 sys 1.38
ただ最低限必要パッケージでつくられる典型的なpbuilder/cowbuilderの標準開始用の
親chrootを使ってbuildすると、なんと(キャッシュがある状態ですが):
cowbuilder real 50.23 user 15.12 sys 9.80
pbuilder real 55.48 user 18.34 sys 10.22
となりました。確かにcowbuilderは少し早いですが、ともに非常に遅いです。
完全にキャシュのない状態としても、5秒程度遅くなるだけです。
これは、sakuraのミラーが早いという事もあります。
ここにapt-cacherをここで追加してもむしろ数秒マイナスでした。
(まあ、すでにキャッシュされていたので、不要追加プロセスでしたので
この結果は当然ですが。)
また、eatmydata -- pdebuild等も実行しましたが効果はありません。(ただ、
もしかしたらeatmydataはchrootの中のコマンド起動時に起動しないと効果が
ないのかもしれません。もしかしたら、cow-shellも同じことしている???)
どうも時間がかかる原因はこの場合パッケージのダウンロード以外です。
たかがこの程度のことをするのに6倍以上かかるのはなぜか、不思議です。
chrootてそんなに遅くならないイメージを持っていました。
そこでどこに時間がかかっているのかなと見ていると、
パッケージで依存関係計算
依存関係パッケージ作成
パッケージの展開 (結構遅い)
パッケージスクリプト実行、特にtriggerの処理
今回は「Processing triggers for man-db ...」が気になった
(そう言えば、TEX関係があるとbuildに字間がもっとかかった気もする)
lintianの実行
この辺が眺めていると時間がかかってます。
一方、pbuilder/cowbuilderのcacheされたパッケージの利用や、新規ダウンロードの
パッケージのcacheへのコピー等は、画面がうるさいですが、全体の中では意外と時
間が掛かっていません。
最初に"apt-get build-dep getmail4"をして必要なパッケージを全てインストール
されたchrootを作って、それを利用だと、
cowbuilder real 31.16 user 11.16 sys 6.15
real 31.25 user 11.50 sys 5.77
です(2回とも、ほぼ再現しました)。よく見るとまだ色々インストールしているの
で遅いようです。
そこでlintianのdependencyもぶち込んでみました。それを利用だと、
cowbuilder real 22.82 user 10.61 sys 4.74
まあ、最悪の状況の半分以下までには追い込めました。
cowbuilder では、確かcp -lrで作業用の使い捨てchroot作成しますが、その時間は
cp -lr base.cow real 0.12 user 0.00 sys 0.11
cp -lr big.cow real 0.17 user 0.01 sys 0.15
いずれにせよ意外と早いようです。またソースパッケージの展開も
dpkg-source -x real 0.20 user 0.14 sys 0.04
これ自体も意外と早いです。lintianは
lintian *.dsc real 1.99 user 1.51 sys 0.23
lintian *.changes real 2.60 user 2.06 sys 0.48
ですが、これは最初の8秒の例でも実行しているので差の理由にはなりません。
まあ、まだどこかで14秒ほど時間の無駄があるようです。
ここで分かったことは、chrootを最初に十分のパッケージを入れた状態で用意
して実行すると、実行時間を半減できる高速化となり、30秒位上の無駄がな
くなり、スピードが倍増以上となることです。
pbuilderの標準的使用目的である「パッケージ依存関係の検査」のためには、
最低限必要パッケージでつくられる開始用の親chrootを使うのが必要なのは
わかります。
でも、builddのように多くのパッケージをコンパイルする場合にはもっとファイ
ルがインストールされた環境を開始用の親chrootを使うほうが効率的という事の
確認に本件はなっています。
まあ、こうして見ると パッケージのテストを効率的にするためには、ある程度
良く使われるパッケージ全てがインストールされた chroot を前もって作って
おいてそれを cp -rl して作業用に持ってきて、cow-shellを使って使うのが
一番効果的みたいですね。(フォント関係テストするならもちろんfontconfig等
も前もって入れておきたいですよね。)
もしパッケージの cache 機能を自前で持ちたかったら、chrootへのアクセスは
cowbuilder --execute
を使うのがいいのかもしれませんが、apt-cacher-ng等を用いてproxy
で cache しても、しなくても、どっちでも大差無さそうですね。
まあ、共有サーバーの負荷低減のためにも、ローカルのどこかでキャッシュ
するのは、「良い行為」でしょう。
またパッケージテストは最近いろいろあるんですね。
lintian — static checking
piuparts — install checking
autopkgtest — internal test code
お粗末ですが、以上ご報告まで。
青木