Subject: tuning for small memory machines
To: None <tech-kern@netbsd.org, tech-perform@netbsd.org>
From: Simon Burge <simonb@wasabisystems.com>
List: tech-kern
Date: 11/27/2002 14:11:12
I've been noticing for a while that my 8MB pc532 has been getting slower
and slower.  An example is that under 1.5X it takes just over 4 hours to
compile a kernel, with 1.6K it's just over 10 hours.  This is with an
identical userland - only the kernel changed.

One benchmark I've been using to compiling pc532/machdep.c in
single-user mode.  For the various kernels I had lying around in /,
here's some times:

NetBSD 1.5X: avail mem 6220 KB  55.189u  20.468s  2:06.78 59.6% 0+0k 71+63io  5364pf+0w
NetBSD 1.6C: avail mem 6168 KB  56.360u 482.015s  9:38.15 93.1% 0+0k 75+61io 62491pf+1w
NetBSD 1.6D: avail mem 6168 KB  56.027u 488.959s  9:44.56 93.2% 0+0k 75+59io 63718pf+1w
NetBSD 1.6J: avail mem 6132 KB  56.829u 643.266s 12:26.71 93.7% 0+0k 71+63io 90841pf+1w
NetBSD 1.6K: avail mem 6092 KB  56.683u 219.568s 11:55.53 38.6% 0+0k 71+57io 82888pf+1w
NetBSD 1.6K: avail mem 6232 KB  56.567u 220.508s 10:25.33 44.3% 0+0k 66+59io 76750pf+1w

The last 1.6K kernel has NFS removed to try to bring the available
memory back to what it was around 1.5X.

At Jason's suggestion, I started playing with the ubc tunable
parameters.  After trying a couple of different combinations without
much gain, I just set all mins to 5% and all maxs to 10% - and the
compile speed returned back to what we were seeing in the 1.5X days.

Further analysis shows that it's pretty much just vm.anonmax that
affects things (for this particular benchmark).  Here's some timings
for various values of anonmax:

    vm.anonmax = 80 (default)
        56.499u 197.264s  9:38.60 43.8% 0+0k 0+55io 70259pf+1w
        56.595u 199.414s 11:03.29 38.5% 0+0k 0+56io 74919pf+1w
        56.325u 220.143s 11:06.18 41.4% 0+0k 0+54io 78995pf+1w

    vm.anonmax = 90
        55.232u  22.921s  2:11.07 59.6% 0+0k 0+54io  6877pf+1w
        55.491u  14.919s  1:45.78 66.5% 0+0k 0+55io  4000pf+1w
        55.509u  13.182s  1:39.96 68.7% 0+0k 0+66io  3307pf+1w

    vm.anonmax = 95
        55.647u   8.334s  1:27.26 73.3% 0+0k 0+56io  1797pf+1w
        55.735u   7.553s  1:22.23 76.9% 0+0k 0+54io  1408pf+1w
        55.795u   8.724s  1:26.39 74.6% 0+0k 0+54io  1926pf+1w

    vm.anonmax = 100
        55.642u   8.270s  1:24.14 75.9% 0+0k 0+65io  1612pf+1w
        55.534u   9.216s  1:27.40 74.0% 0+0k 0+64io  1927pf+1w
        55.312u   8.331s  1:24.15 75.6% 0+0k 0+64io  1604pf+1w

I'm running with vm.anonmax=95 now.

Now, the question is should we automatically tune vm.anonmax up high
for low-memory situations?  And what would qualify as a "low-memory"
situation?

Simon.
--
Simon Burge                                   <simonb@wasabisystems.com>
NetBSD Development, Support and Service:   http://www.wasabisystems.com/