tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Optimising check-shlibs-elf.awk



I noticed that x11/kde-workspace4 was taking an extraordinarily long
time to complete the _check-shlibs phase so took a look at it.
This package is somewhat unusual in the number of files it tests
(298), due to the considerable number of small .so's it builds, so is
a good candidate for this test.
A baseline run on a fast SmartOS machine takes:
 $ ptime bmake _check-shlibs
 => Checking for missing run-time search paths in kde-workspace4-4.11.5nb5
 real 7:55.251878017
 user 2:08.013799404
 sys 5:14.145580838
With the corresponding DTrace for number of exec calls:
 $ dtrace -n 'syscall::exece:return { @num[execname] = count(); }'
 dtrace: description 'syscall::exece:return ' matched 1 probe
 [...]
 greadelf 298
 pkg_info 5809
 ksh93 95612
The reason for the high number of shell calls is that the awk script
checks for the existence of every possible shared library until it
gets a match, but repeats this for every file that is checked. There
are also corresponding pkg_info calls to find which package the
library belongs to.
By adding a couple of caches (one for the "test -f" checks, one for
the pkg_info results), we can significantly reduce the runtime:
 $ ptime bmake _check-shlibs
 => Checking for missing run-time search paths in kde-workspace4-4.11.5nb5
 real 18.503489661
 user 6.115494568
 sys 11.551809938
 $ dtrace -n 'syscall::exece:return { @num[execname] = count(); }'
 dtrace: description 'syscall::exece:return ' matched 1 probe
 [...]
 pkg_info 114
 greadelf 298
 ksh93 3028
The diff is here:
 http://us-east.manta.joyent.com/pkgsrc/public/patches/check-shlibs-elf.diff
Comments and testing on other systems welcome. As always I will push this
through full bulk builds for testing on SmartOS.
-- 
Jonathan Perkin - Joyent, Inc. - www.joyent.com


Home | Main Index | Thread Index | Old Index

AltStyle によって変換されたページ (->オリジナル) /