皆さん情報ありがとうございます。 それとお返事遅れてごめんなさい。 皆さんの情報を集めたところ、 1) 遅い環境は10秒以上、速い環境は2秒もかからない 2) 仮想環境が影響しているのか否かは不明 3) マシンスペックが不足しているわけでもなさそう (矢倉さんの環境はリッチだけど16秒かかっている) 4) CPUは大して消費していないのでI/Oアクセスに時間がかかっている という何だか原因特定が難しそうな状況ですね。 先述の Operating System: Windows 7 Ultimate 64-bit (6.1, Build 7601) Service Pack 1 (7601.win7sp1_gdr.140303-2144) Language: Japanese (Regional Setting: Japanese) System Manufacturer: Dell Inc. System Model: XPS 8300 BIOS: BIOS Date: 03/28/12 09:12:57 Ver: 04.06.04 Processor: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz (8 CPUs), ~3.4GHz Memory: 16384MB RAM (その他詳細は https://dl.dropboxusercontent.com/u/86335040/DxDiag20140911.txt参照) というHostに VirtualBox 4.3.12 r93733 を入れ そこに RAM 1 G byte HDD 60 G byte にFedora 20を入れた環境があるのですが、これで測ると time rpm -qa | wc 1268 1268 42784 real 0m9.570s user 0m1.218s sys 0m0.211s と、やっぱり時間がかかっているんですね。 Debian系のディストリビューションのVMも作ってあるので、 そこでdpkg -lを計測したりもしているのですが、1秒もかからないんですよね。 real 0m0.340s user 0m0.041s sys 0m0.011s DebとRPMとではデータの持ち方が違うんでしょうけど、 RPMが特定の条件で遅くなる何かを抱えているんでしょうかね? とりあえずopensuse-factory MLの皆さんの協力も得つつ https://github.com/joeyh/etckeeper/pull/17#issuecomment-55059127 と https://github.com/joeyh/etckeeper/pull/17#issuecomment-55078734 に対する返答を考えたいと思います。
(09/11/2014 11:48 PM), 1xx wrote:
皆さんの環境で time rpm -qa | wc を実行すると、何行(何パッケージ)の出力を何秒で完了するでしょうか?
私は
Operating System: Windows 7 Ultimate 64-bit (6.1, Build 7601) Service Pack 1 (7601.win7sp1_gdr.140303-2144) Language: Japanese (Regional Setting: Japanese) System Manufacturer: Dell Inc. System Model: XPS 8300 BIOS: BIOS Date: 03/28/12 09:12:57 Ver: 04.06.04 Processor: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz (8 CPUs), ~3.4GHz Memory: 16384MB RAM (その他詳細は https://dl.dropboxusercontent.com/u/86335040/DxDiag20140911.txt 参照)
というHostに VirtualBox 4.3.12 r93733 を入れ そこに RAM 1 G byte HDD 60 G byte LVM+ext4使用 のVMを作り openSUSE 13.1 を入れてテストしておりました。
下記のメールで書いたとおり、私のこの環境では30秒を超えることがあります。
(1回目)
time rpm -qa | wc 1917 1917 65019
real 1m52.677s user 0m1.641s sys 0m0.302s
(2回目)
time rpm -qa | wc 1917 1917 65019
real 0m6.990s user 0m0.977s sys 0m0.124s
(リブート後1回目)
time rpm -qa | wc 1917 1917 65019
real 0m23.426s user 0m1.898s sys 0m0.328s
そのことが原因で、パッケージのインストール・アンインストール・更新時に ZYppプラグインがタイムアウトしetckeeperが正常終了しません。 そこで以下のパッチを書いてetckeeperがrpm -qaを呼び出さないようにできるpatchを書き、 pullrequestしました。 https://github.com/joeyh/etckeeper/pull/17 https://build.opensuse.org/package/view_file/utilities/etckeeper/etckeeper-a...
ところがetckeeperの作者joeyhさんから以下のコメントをもらいました。 https://github.com/joeyh/etckeeper/pull/17#issuecomment-55059127 要は、環境が悪すぎるのではないか、ということです。
ところで昨晩VirtualBoxを4.3.16に上げたのですが、 その環境で、同じVMでrpm -qaを実行すると2秒ほどで終わりました。
あまりにも差が極端なので、今VirtualBox4.3.12に環境を戻して、 rpm -qaを実行して上記結果を得ました。
ひょっとするとメチャクチャ環境依存なのではないかという疑いが出てきました。
そこで皆さんの環境と time rpm -qa | wc の結果を教えていただきたいのです。 よろしくお願いします。
alerqueさんから https://github.com/joeyh/etckeeper/pull/17#issuecomment-55078734 というコメントをもらったけど、こっちも意味合いが取れずに困っています:-)
2014年7月30日 19:32 1xx <itsango@gmail.com>:
etckeeperについて皆さんに相談です。
upstreamにいくつかpullrequestを送付し、 そのうち小さな修正は取り込まれました。
しかし、以下の2つが大きな変更が取り込まれず pendingになっています。 仕様を大きく変更してしまうので、 おそらくupstreamには取り込まれないでしょう。
これらの変更をopenSUSE独自のpatchとして 適応するか否かの判断に迷っています。
etckeeperは割としょっちゅうソースが更新されているので パッチを当てると、後々メンテが面倒になりそうです。
1. ZYpp pluginのタイムアウトに対するパッチ
zypperやYaST 1 click installなど、ZYppが動作すると、 etckeeperはプラグインを通じて自動的に起動します。 そして更新前・更新後の/etcの状態をVCSで管理しようとします。
しかしこの動作が遅いという問題が有ります。 30秒かかってpluginがtimeoutしてしまいます。 (インストール自体は成功します。) そして、timeoutした場合、etckeeperの自動commitは成功しません。
原因は解っています。 etckeeperはVCSのログにどのパッケージを追加・削除・変更したのかを 記録します。 この記録をするために、(アン)インストーラの起動前後で 合計2回rpm -qa | sortでパッケージ一覧を取得し、 その差分を取っています。 試しに私の環境で今rpm -qaしてみると24.255秒かかりました。 これを合計2回行うので30秒を超えてしまいZYppのpluginが timeoutします。
そこで、このログにパッケージの増減リストを取るのを諦めて、 rpm -qaをさせないことをconfファイルに定義できるpatchを書きました。
また、ZYppプラグインをサブパッケージにして、 アンインストール可能にしました。 ZYppによるetckeeperの自動commitを必要としない人は プラグインだけをアンインストールできます。 (が、etckeeperの魅力が半減します。) こちらはパッチではなく、サブパッケージなのでリリースします。
2. ZYpp, YUMの2つのパッケージマネージャーに対応するパッチ
あまり知られていませんが、openSUSEは パッケージマネージャーとして、ZYppの他にYUMも使えます。 (使っている人がいるかどうかは判りませんが。) しかしetckeeperは複数のパッケージマネージャーを使う ディストリビューションを想定していません。
そこで複数のパッケージマネージャーに対応するパッチを 書いたのですが、仕様変更が大きく、 upstreamに取り込まれていません。
これらのパッチを入れた状態でリリースすべきでしょうか? それとも独自仕様は入れない方が良いでしょうか?
「1.」は機能的に不便なのでパッチを当ててもいいかなと 思うのですが、後々メンテを考えると入れてしまっていいのか どうか悩みます。 「2.」はYUMを使っている人がいるか否か判らないので、 あてないでいいかなと思っています。
皆さんのご意見を聞かせてください。
2014年7月13日 23:12 1xx <itsango@gmail.com>:
2014年7月13日 16:15 1xx <itsango@gmail.com>:
test仕様書: https://docs.google.com/spreadsheets/d/1kmtjqvCnqNMmuFHRLh0-xh1iBdjhxnvKoYgR...
-- 1xx <ItSANgo@gmail.com> <https://twitter.com/ItSANgo> <http://d.hatena.ne.jp/Itisango/> -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-ja+owner@opensuse.org