Mac OS X specific notes
*** Instructions before Starting libMicro ***
# Disable Open directory and LDAP using Directory Utility app
# Turn off airport
# Turn off spotlight. In terminal, execute the following:
sudo service com.apple.metadata.mds stop
# Turn off Time Machine in System Preferences
# Wait at least 2 minutes after boot to desktop for boot cache to settle down
*** Make and run quickstart ***
make
./bench >output.txt
gives you a text file named output.txt with the results of one run.
./multiview output1.txt output2.txt >compare.html
gives you a html file comparing two runs.
*** Makefile ***
The Makefile invokes Makefile.Darwin which invokes Makefile.com.Darwin.
Just invoke make, with options if necessary, and everything should
build correctly. The binaries are placed in a directory called
bin-ARCH where ARCH is the default or specified when building via
the ARCH flag.
options for invoking Makefile are:
ARCH defaults to i386
if you just want to build for ppc, you can specify
make ARCH=ppc
this will put the results in bin-ppc
to build fat/multi architecture, specify
make ARCH=fat
the makefile will automatically build with ARCH_FLAG="-arch ppc -arch i386 -arch x86_64" and put the results in bin-fat
to build with only two of the architectures see below
ARCH_FLAG defaults to -arch $(ARCH)
to build fat/multi architecture, specify
make ARCH_FLAG="-arch ppc -arch i386" ARCH=fat
this will put the results in bin-fat
OPT_FLAG defaults to -g
to build optimized, specify make OPT_FLAG=-s
SEMOP_FLAG defaults to -DUSE_SEMOP
to eliminate SEMOP usage, specify make SEMOP_FLAG=
this is needed on some lower-end systems (e.g. M63)
These can be combined, e.g.
make ARCH=ppc SEMOP_FLAG=
*** Before running benchmarks ***
The shell script create_stuff should be run before any benchmarking
this script takes care of raising the process limits which would
otherwise cause several of the tests to fail - if not you will see:
Running: pipe_pst1
fork: Resource temporarily unavailable
in your stderr during the runs. After you run create_stuff, the
system then needs to be rebooted.
*** running the benchmarks ***
The shell script "bench" will run all the benchmarks, or you can
pass it a parameter to run a single benchmark, e.g.
bench lmbench_bw_unix
Watch for:
# WARNINGS
# Quantization error likely;increase batch size (-B option) 4X to avoid.
in the output
To see an example run the supplied testbench script
Add or adjust the -B parameter for any benchmark that fails. The
Quantization error will refer to the benchmark preceding the error,
not the one following...
A typical run:
$ make clean
$ make
$ ./create_stuff
$ ./bench > output1
Running: getpid
for 0.13353 seconds
Running: getppid
for 3.65609 seconds
Running: getenv
for 0.20924 seconds
Running: getenvT2
for 0.37437 seconds
Running: gettimeofday
for 0.58077 seconds
etc...
Use the supplied multiview script to compare runs like:
multiview output1 output2 > compare.html
open compare.html (safari launches)
will show output2 results as a percentage change from the output1 results
*** Adding additional benchmark tests ***
Look at the sample file trivial.c. This demonstrates how to do
argument passing, the flow of control of a benchmark, etc. for the
trivial case. The tests starting with "lmbench_" were ported from
the lmbench suite, so they might be good examples as well.
*** Things to do ***
* port the rest of the lmbench benchmarks into this framework
* create website that will allow easy ability to compare many builds
across many machines with historical repository of runs
* document better how to write a benchmark for this framework
(started in trivial.c)
* check this into xnu/test
* create new benchmarks
*** Leopard notes ***
Due to rdar://4654956 and its original, rdar://2588252 you cannot
run these tests on Leopard without removing the cascade_lockf test.
There may be other tests which panic a Leopard system.