How to stress test DragonFly with Peter Holms kernel-stress-test-suite

Stefan Krüger skrueger at meinberlikomm.de
Thu Jun 8 13:08:23 PDT 2006


Some people may have read about Peter Holms Stress Test Suite on
commits@, and yes, Matt and I have found several bugs with it.

To get wider testing I thought I could write a little Stress-Test-Suite
guide, so let's start :)

First of all, get the source, it's available at:

http://www.holm.cc/stress/

and this is the version I'm using in this guide:

SHA1 (stress2.tgz) = 844faff0b5372cdbcfbfbe66ac769df597c56599
Last modified: 23-May-2006 14:31

so let's fetch it:

# fetch http://www.holm.cc/stress/stress2.tgz

untar it somewhere and apply this patch:

http://tecneeq.dyndns.org/~cosmicdj/DragonFly/stress2dfly.patch.gz
SHA1 (stress2dfly.patch.gz) = df468e8ea4f625928fd284bceb8f69f0c5854edb

# cd stress2; zcat ../stress2dfly.patch.gz | patch -p1

but before you start compiling it you need to tell
stress2/lib/resources.c your swapsize, so start your editor and search
for "const int64_t sz = 524256;", now you need to replace 524256 with
your swapsize.

How to do that:

# swapinfo -k
Device          1K-blocks     Used    Avail Capacity
/dev/ad0s1b        637704      156   637548     0%
# echo "637704 / 4" | bc # take the second argument and devide it by 4
159426

Replace the (sz =) 524256 in lib/resources.c with this number!

You can compile the suite now:

# cd ../stress2
# make

One last thing before you can start stressing your machine, edit
default.cfg and change BLASTHOST to an IP with a machine running inetd
with UDP discard enabled. If you don't have such a machine you can set
it to 127.0.0.1 or your local NIC IP. More on that later.

So what's next?

First some considerations. You want to stress-test your machine?
Your machine could panic and fsck takes quite some time... and
uploading 1+GB crashdump isn't fun, too. So we'll do a reboot!

At the Beasty-bootmenu, select

6. Escape to loader prompt

and at the

ok

prompt we'll first limit the memory dragonflybsd sees (and thus the
crashdump size) to 256MB

ok set hw.physmem="256M"

and then we'll boot into single-user mode

ok boot -s

first thing we'll do is

$ fsck -p

and then we'll mount some important dir's read-only!

$ mount -r /home	# this is were the stress-test-suite is
$ mount -r /usr	# you can leave this out but some cmds might come handy
$ mount /tmp	# usualy MFS, if not: mount_mfs -s 262144 swap /tmp
$ mount /proc	# shouldn't hurt...

then we'll start some services:

$ /etc/rc.d/dumpon start # don't forget to set up a dumpdev in rc.conf
$ /etc/rc.d/swap1 start	 # a stress-test needs it
$ /etc/rc.d/netif start

If you don't have a blasthost with UDP discard in your network,
just start a local inetd (don't forget to uncomment

discard dgram   udp     wait    root    internal

in /etc/inetd.conf!)

$ inetd -R 0 -p /tmp/inetd.pid	# -R 0 disable rate limiting,
				# needed for the udp stress-test

some handy sysctl's:

$ sysctl -w vfs.ufs.dirhash_docheck=1
$ sysctl -w debug.dircheck=1
$ sysctl -w debug.ttydebug=1
$ sysctl -w lwkt.token_debug=1
$ sysctl -w debug.spin_lock_test=1
$ sysctl -w kern.syscall_mpsafe=1
(kern.intr_mpsafe/kern.trap_mpsafe aren't safe yet,
 so don't enable them!)

Quoting stress2/README: "Do not run the tests as root."

so let's switch to an ordinary user:

$ su -m localuser
# cd /home/localuser/stress2
# INCARNATIONS=10 ./run.sh

if you want some verbosity:

# VERBOSE=4 ./run.sh

and if you want to run all tests:

# ./run.sh all.cfg

and that's it. If the stress-test triggers a panic, you're on a safe
side because everything is mounted read-only.

One last hint, if you got a panic, you need to boot with the same
hw.physmem settings otherwise savecore will not find your crashdump!





More information about the Kernel mailing list