Subject: pkg_comp + SMP (tested on real hardware)
To: None <pkgsrc-users@netbsd.org>
From: Lars Nordlund <lars.nordlund@hem.utfors.se>
List: pkgsrc-users
Date: 07/06/2006 23:56:02
Hello

I have finally had the opportunity to do some testing of pkg_comp[1] on
SMP gear. The machine is equipped with 2.5GiB RAM and two "Intel(R) Xeon
(TM) CPU 3.20GHz" running with hyper threading enabled. It was running
NetBSD 3.0 release and I also used the 3.0 release sets in pkg_comp.

All builds has started with empty /usr/pkgsrc/packages/All directories
to have all dependencies built in each test run. I also made sure that
all distfiles were already downloaded.

I started out by building meta-pkgs/kde3 with 4 parallel build
processes. Due to various issues, it became a longer test then I had
expected. So I only did one run. (I also wanted to test that my
mkdir-based locking scheme held up. It did.)

meta-pkgs/kde3, 4 jobs
----------------------
Total time: 5:36:00
ksh time: 20170.81 real     43677.84 user     17988.42 sys

Notes:
meta-pkgs/kde3 has an unfortunate "waist" in the dependency graph.
qt3-libs -> qt3-tools -> kdelibs3 -> kdebase3. These packages were
mainly built alone. Nearly half the time was spent building only one
package.


Next I wanted to compare between different number of parallel jobs. To
save time I needed a smaller work set. I listed the following packages
in the pkg_comp config file:

devel/subversion editors/emacs devel/check devel/cmake shells/zsh
wm/fvwm-themes net/lftp

misc pkgs, 1 job
----------------
Total time: 50:53
perl build time: 4:44
apache2 build time: 2:11
ksh time: 3054.04 real      3603.45 user      1882.48 sys

misc pkgs, 2 jobs
-----------------
Total time: 25:15
perl build time: 5:18
apache2 build time: 2:35
ksh time: 2115.49 real      3693.54 user      1929.13 sys

misc pkgs, 4 jobs
-----------------
Total time, 31:15
perl build time: 8:13
apache2 build time: 4:43
ksh time: 1875.15 real      4729.19 user      2804.02 sys

Notes:
The machine is using IDE which may explain why individual packages took
so much longer when going from 1 to 2 parallel jobs.
100% improvement on the total time when going from -j 1 to -j 2 is
probably thanks to hyper threading making process switching faster. And
in pkgsrc there are a lot of processes to switch between (buildlink3).


Final notes:
Taking advantage of SMP in pkgsrc works out quite nicely. In
combination with pkg_comp it is very convenient to start larger builds
without having to pkg_delete half the running system. I also welcome
the changes to make pkg_comp portable between operating systems, as has
been discussed in pkgsrc forums not long ago.


[1]: http://www.ludd.ltu.se/~nordlund/pkgsrc/


Many thanks to GMQ Consulting (www.gmq.se) for providing the hardware!


Best regards,
	Lars Nordlund