On Fri, May 15, 2009 at 07:45:43PM +0400, Dmitry V. Levin wrote: > On Fri, May 15, 2009 at 09:26:27PM +0600, Andrey Rahmatullin wrote: > > On Fri, May 15, 2009 at 01:25:33PM +0000, Sergey V Turchin wrote: > > > Сборка закончилась примерно 14-May-2009 16:23 > > > task закончился примерно 15-May-2009 08:46 > > И чо оно так долго делало? > > Тестировало установку 804 бинарных пакетов (15 часов 47 минут 03 секунды), > в среднем около 70 секунд на 1 пакет (установка базового чрута, установка > в него пакета со всеми его зависимостями, удаление чрута). Я боюсь, что большую половину времени там на самом деле скушала проверка, в которой используется --whatprovides. $ hsh --init --no-stuff ... $ hsh-run --rooter find / >$TMPDIR/out find: /.out: Permission denied find: /.host: Permission denied $ time xargs --delimiter='\n' <$TMPDIR/out hsh-run --rooter -- rpmquery --whatprovides >/dev/null warning: no package provides / warning: no package provides /usr/share/info/autoconf.info.gz warning: no package provides /usr/share/info/automake.info.gz warning: no package provides /usr/share/man/man1/autoconf.1.gz warning: no package provides /usr/share/man/man1/autoheader.1.gz warning: no package provides /usr/share/man/man1/autom4te.1.gz warning: no package provides /usr/share/man/man1/autoreconf.1.gz warning: no package provides /usr/share/man/man1/autoscan.1.gz warning: no package provides /usr/share/man/man1/autoupdate.1.gz warning: no package provides /usr/share/man/man1/config.guess.1.gz warning: no package provides /usr/share/man/man1/config.sub.1.gz warning: no package provides /usr/share/man/man1/ifnames.1.gz warning: no package provides /usr/bin/pydoc warning: no package provides /usr/src/RPM warning: no package provides /usr/src/RPM/RPMS warning: no package provides /usr/src/RPM/RPMS/noarch warning: no package provides /usr/src/RPM/SRPMS warning: no package provides /usr/src/RPM/SPECS warning: no package provides /usr/src/RPM/SOURCES warning: no package provides /usr/src/RPM/BUILD warning: no package provides /usr/src/.xsession.d warning: no package provides /usr/src/.rpmmacros ... warning: no package provides /dev warning: no package provides /dev/log warning: no package provides /dev/random warning: no package provides /dev/urandom warning: no package provides /dev/full warning: no package provides /dev/zero warning: no package provides /dev/null error: file /dev/stderr: No such file or directory error: file /dev/stdout: No such file or directory error: file /dev/stdin: No such file or directory error: file /dev/fd: No such file or directory warning: no package provides /dev/pts warning: no package provides /.in warning: no package provides /.host Command exited with non-zero status 123 95.34user 110.46system 4:21.10elapsed 78%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+12376937minor)pagefaults 0swaps $ Одна из проблем со скоростью здесь в том, что rpmquery для каждого аргумента всегда вынимает хедер из базы Packages, и для многих файлов этот хедер, естественно, одинаковый. То есть в цикле тупо вынимает один и тот же хедер. Я написал программу на Си, которая отличается от --whatprovides тем, что работает чисто на индексе, а хедер не вынимает вообще. Соответственно, это программа не умеет показывает, к чему файл относится, но всё ещё умеет показывать, если файл никуда не относится. Но оказывается, что эта программа не намного быстрее, даже не в два раза. $ time xargs --delimiter='\n' <$TMPDIR/out hsh-run --rooter -- ./qf-or-whatprovides-check ... warning: file /.in is not owned by any package warning: file /.host is not owned by any package Command exited with non-zero status 123 76.30user 72.44system 3:31.91elapsed 70%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+7156556minor)pagefaults 0swaps $ Значит, вынимание хедеров не является главным узким местом, как я сначала думал. Где-то ещё время утекает, надо будет профилировать.