Hi,
As posted before on LKML, here goes my contained jackd test-suite (see
attached tarball, jackd_test3.2.tar.gz).
The provided shell script, can be issued from the command line as:
./jack_test3_run.sh [secs] [clients] [ports] [period]
where:
secs - number of seconds to run jackd workload (default = 300)
clients - number of test-clients to run (default = 20)
ports - number of interface ports per client (default = 4)
period - number of frames per buffer (default = 64)
Each test client (jack_test3_client) registers the same number of input and
output ports (default is 4ins x 4outs), where each output is the audio mix
of all inputs.
The jack_test_run.sh script sets this jackd maximum port limit
number as it sees fit, so any number of clients is allowed, provided
there's enough CPU and/or RAM ;)
Each test run produces a kernel-timestamped log filename with the complete
captured stdout/err. Consolidated results can be produced by feeding
several of those logfiles into the jack_test3_consolidated.awk script,
just like this:
cat *.log | awk -f jack_test3_consolidated.awk
Additionally, if gnuplot is available, a graphical log chart is written
as a PNG output file, for your eyes pleasure. You can (re)generate any chart
for any log filename (and only one), by issuing the following script
command line:
./jack_test3_plot.sh <logfilename>
Now, let's get to the point. With the default workload (20 clients * 4 * 4
ports) I've ran it against a Con Kolivas' 2.6.10-cko1 patched kernel and
the real jewel as is latest 2.6.10-rc3-mm1-RT-V0.7.33-04, which is Ingo
Molnar's full PREEMPT_RT patched kernel. The tests were conducted on my
P4(a)2.5G laptop, against the on-board alsa driver (snd-ali5451).
The jackd command line is therefore:
jackd -v -R -P60 -dalsa -dhw:0 -r44100 -p64 -n2 -S -P
The results speak for themselves :)
2.6.10-cko1 RT-V0.7.33-04
------------- -------------
Timeout Rate . . . . . . . . : ( 0.0) ( 0.0) /hour
XRUN Rate . . . . . . . . . . : 216.8 2.2 /hour
Delay Rate (>spare time) . . : 395.2 0.0 /hour
Delay Rate (>1000 usecs) . . : 375.8 0.0 /hour
Delay Maximum . . . . . . . . : 4320 308 usecs
Cycle Maximum . . . . . . . . : 845 1051 usecs
Average DSP Load. . . . . . . : 44.0 50.2 %
Average CPU System Load . . . : 14.4 31.7 %
Average CPU User Load . . . . : 19.8 21.4 %
Average CPU Nice Load . . . . : 0.0 0.0 %
Average CPU I/O Wait Load . . : 0.1 0.1 %
Average CPU IRQ Load . . . . : 0.0 0.0 %
Average CPU Soft-IRQ Load . . : 0.0 0.0 %
Average Interrupt Rate . . . : 1691.7 1692.6 /sec
Average Context-Switch Rate . : 13368.8 18213.9 /sec
So, bottom-line goes like this: even though vanilla is getting a little
more tasty, Ingo's RT patch performance beats it up by orders of
magnitune. Nuff said. ;)
--
rncbc aka Rui Nuno Capela
rncbc(a)rncbc.org