Name Date Size #Lines LOC

..--

pgms/H05-Jun-2025-584439

src/H05-Jun-2025-5,7943,572

testdir/H05-Jun-2025-10,53010,492

.cprojectH A D05-Jun-202514.5 KiB246244

.projectH A D05-Jun-20252.4 KiB8382

MakefileH A D05-Jun-202510.5 KiB305148

READMEH A D05-Jun-202517.3 KiB419306

RunH A D05-Jun-202562.3 KiB2,0021,272

USAGEH A D05-Jun-202517.8 KiB401316

WRITING_TESTSH A D05-Jun-20254.5 KiB13490

README

1Version 5.1.3 -- 2011-01-13
2
3================================================================
4To use Unixbench:
5
61. UnixBench from version 5.1 on has both system and graphics tests.
7   If you want to use the graphic tests, edit the Makefile and make sure
8   that the line "GRAPHIC_TESTS = defined" is not commented out; then check
9   that the "GL_LIBS" definition is OK for your system.  Also make sure
10   that the "x11perf" command is on your search path.
11
12   If you don't want the graphics tests, then comment out the
13   "GRAPHIC_TESTS = defined" line.  Note: comment it out, don't
14   set it to anything.
15
162. Do "make".
17
183. Do "Run" to run the system test; "Run graphics" to run the graphics
19   tests; "Run gindex" to run both.
20
21You will need perl, as Run is written in perl.
22
23For more information on using the tests, read "USAGE".
24
25For information on adding tests into the benchmark, see "WRITING_TESTS".
26
27
28===================== RELEASE NOTES =====================================
29
30========================  Jan 13 ==========================
31
32v5.1.3
33
34Fixed issue that would cause a race condition if you attempted to compile in
35parallel with more than 3 parallel jobs.
36
37
38Kelly Lucas, Jan 13, 2011
39kdlucas at gmail period com
40
41
42========================  Dec 07 ==========================
43
44v5.1.2
45
46One big fix: if unixbench is installed in a directory whose pathname contains
47a space, it should now run (previously it failed).
48
49To avoid possible clashes, the environment variables unixbench uses are now
50prefixed with "UB_".  These are all optional, and for most people will be
51completely unnecessary, but if you want you can set these:
52
53    UB_BINDIR      Directory where the test programs live.
54    UB_TMPDIR      Temp directory, for temp files.
55    UB_RESULTDIR   Directory to put results in.
56    UB_TESTDIR     Directory where the tests are executed.
57
58And a couple of tiny fixes:
59* In pgms/tst.sh, changed "sort -n +1" to "sort -n -k 1"
60* In Makefile, made it clearer that GRAPHIC_TESTS should be commented
61  out (not set to 0) to disable graphics
62Thanks to nordi for pointing these out.
63
64
65Ian Smith, December 26, 2007
66johantheghost at yahoo period com
67
68
69========================  Oct 07 ==========================
70
71v5.1.1
72
73It turns out that the setting of LANG is crucial to the results.  This
74explains why people in different regions were seeing odd results, and also
75why runlevel 1 produced odd results -- runlevel 1 doesn't set LANG, and
76hence reverts to ASCII, whereas most people use a UTF-8 encoding, which is
77much slower in some tests (eg. shell tests).
78
79So now we manually set LANG to "en_US.utf8", which is configured with the
80variable "$language".  Don't change this if you want to share your results.
81We also report the language settings in use.
82
83See "The Language Setting" in USAGE for more info.  Thanks to nordi for
84pointing out the LANG issue.
85
86I also added the "grep" and "sysexec" tests.  These are non-index tests,
87and "grep" uses the system's grep, so it's not much use for comparing
88different systems.  But some folks on the OpenSuSE list have been finding
89these useful.  They aren't in any of the main test groups; do "Run grep
90sysexec" to run them.
91
92Index Changes
93-------------
94
95The setting of LANG will affect consistency with systems where this is
96not the default value.  However, it should produce more consistent results
97in future.
98
99
100Ian Smith, October 15, 2007
101johantheghost at yahoo period com
102
103
104========================  Oct 07 ==========================
105
106v5.1
107
108The major new feature in this version is the addition of graphical
109benchmarks.  Since these may not compile on all systems, you can enable/
110disable them with the GRAPHIC_TESTS variable in the Makefile.
111
112As before, each test is run for 3 or 10 iterations.  However, we now discard
113the worst 1/3 of the scores before averaging the remainder.  The logic is
114that a glitch in the system (background process waking up, for example) may
115make one or two runs go slow, so let's discard those.  Hopefully this will
116produce more consistent and repeatable results.  Check the log file
117for a test run to see the discarded scores.
118
119Made the tests compile and run on x86-64/Linux (fixed an execl bug passing
120int instead of pointer).
121
122Also fixed some general bugs.
123
124Thanks to Stefan Esser for help and testing / bug reporting.
125
126Index Changes
127-------------
128
129The tests are now divided into categories, and each category generates
130its own index.  This keeps the graphics test results separate from
131the system tests.
132
133The "graphics" test and corresponding index are new.
134
135The "discard the worst scores" strategy should produce slightly higher
136test scores, but at least they should (hopefully!) be more consistent.
137The scores should not be higher than the best scores you would have got
138with 5.0, so this should not be a huge consistency issue.
139
140Ian Smith, October 11, 2007
141johantheghost at yahoo period com
142
143
144========================  Sep 07 ==========================
145
146v5.0
147
148All the work I've done on this release is Linux-based, because that's
149the only Unix I have access to.  I've tried to make it more OS-agnostic
150if anything; for example, it no longer has to figure out the format reported
151by /usr/bin/time.  However, it's possible that portability has been damaged.
152If anyone wants to fix this, please feel free to mail me patches.
153
154In particular, the analysis of the system's CPUs is done via /proc/cpuinfo.
155For systems which don't have this, please make appropriate changes in
156getCpuInfo() and getSystemInfo().
157
158The big change has been to make the tests multi-CPU aware.  See the
159"Multiple CPUs" section in "USAGE" for details.  Other changes:
160
161* Completely rewrote Run in Perl; drastically simplified the way data is
162  processed.  The confusing system of interlocking shell and awk scripts is
163  now just one script.  Various intermediate files used to store and process
164  results are now replaced by Perl data structures internal to the script.
165
166* Removed from the index runs file system read and write tests which were
167  ignored for the index and wasted about 10 minutes per run (see fstime.c).
168  The read and write tests can now be selected individually.  Made fstime.c
169  take parameters, so we no longer need to build 3 versions of it.
170
171* Made the output file names unique; they are built from
172  hostname-date-sequence.
173
174* Worked on result reporting, error handling, and logging.  See TESTS.
175  We now generate both text and HTML reports.
176
177* Removed some obsolete files.
178
179Index Changes
180-------------
181
182The index is still based on David Niemi's SPARCstation 20-61 (rated at 10.0),
183and the intention in the changes I've made has been to keep the tests
184unchanged, in order to maintain consistency with old result sets.
185
186However, the following changes have been made to the index:
187
188* The Pipe-based Context Switching test (context1) was being dropped
189  from the index report in v4.1.0 due to a bug; I've put it back in.
190
191* I've added shell1 to the index, to get a measure of how the shell tests
192  scale with multiple CPUs (shell8 already exercises all the CPUs, even
193  in single-copy mode).  I made up the baseline score for this by
194  extrapolation.
195
196Both of these test can be dropped, if you wish, by editing the "TEST
197SPECIFICATIONS" section of Run.
198
199Ian Smith, September 20, 2007
200johantheghost at yahoo period com
201
202========================  Aug 97 ==========================
203
204v4.1.0
205
206Double precision Whetstone put in place instead of the old "double" benchmark.
207
208Removal of some obsolete files.
209
210"system" suite adds shell8.
211
212perlbench and poll added as "exhibition" (non-index) benchmarks.
213
214Incorporates several suggestions by Andre Derrick Balsa <andrewbalsa@usa.net>
215
216Code cleanups to reduce compiler warnings by David C Niemi <niemi@tux.org>
217and Andy Kahn <kahn@zk3.dec.com>; Digital Unix options by Andy Kahn.
218
219========================  Jun 97 ==========================
220
221v4.0.1
222
223Minor change to fstime.c to fix overflow problems on fast machines.  Counting
224is now done in units of 256 (smallest BUFSIZE) and unsigned longs are used,
225giving another 23 dB or so of headroom ;^)  Results should be virtually
226identical aside from very small rounding errors.
227
228========================  Dec 95 ==========================
229
230v4.0
231
232Byte no longer seems to have anything to do with this benchmark, and I was
233unable to reach any of the original authors; so I have taken it upon myself
234to clean it up.
235
236This is version 4.  Major assumptions made in these benchmarks have changed
237since they were written, but they are nonetheless popular (particularly for
238measuring hardware for Linux).  Some changes made:
239
240-	The biggest change is to put a lot more operating system-oriented
241	tests into the index.  I experimented for a while with a decibel-like
242	logarithmic scale, but finally settled on using a geometric mean for
243	the final index (the individual scores are a normalized, and their
244	logs are averaged; the resulting value is exponentiated).
245
246	"George", certain SPARCstation 20-61 with 128 MB RAM, a SPARC Storage
247	Array, and Solaris 2.3 is my new baseline; it is rated at 10.0 in each
248	of the index scores for a final score of 10.0.
249
250	Overall I find the geometric averaging is a big improvement for
251	avoiding the skew that was once possible (e.g. a Pentium-75 which got
252	40 on the buggy version of fstime, such that fstime accounted for over
253	half of its total score and hence wildly skewed its average).
254
255	I also expect that the new numbers look different enough from the old
256	ones that no one is too likely to casually mistake them for each other.
257
258	I am finding new SPARCs running Solaris 2.4 getting about 15-20, and
259	my 486 DX2-66 Compaq running Linux 1.3.45 got a 9.1.  It got
260	understandably poor scores on CPU and FPU benchmarks (a horrible
261	1.8 on "double" and 1.3 on "fsdisk"); but made up for it by averaging
262	over 20 on the OS-oriented benchmarks.  The Pentium-75 running
263	Linux gets about 20 (and it *still* runs Windows 3.1 slowly.  Oh well).
264
265-	It is difficult to get a modern compiler to even consider making
266	dhry2 without registers, short of turning off *all* optimizations.
267	This is also not a terribly meaningful test, even if it were possible,
268	as noone compiles without registers nowadays.  Replaced this benchmark
269	with dhry2reg in the index, and dropped it out of usage in general as
270	it is so hard to make a legitimate one.
271
272-	fstime: this had some bugs when compiled on modern systems which return
273	the number of bytes read/written for read(2)/write(2) calls.  The code
274	assumed that a negative return code was given for EOF, but most modern
275	systems return 0 (certainly on SunOS 4, Solaris2, and Linux, which is
276	what counts for me).  The old code yielded wildly inflated read scores,
277	would eat up tens of MB of disk space on fast systems, and yielded
278	roughly 50% lower than normal copy scores than it should have.
279
280	Also, it counted partial blocks *fully*; made it count the proportional
281	part of the block which was actually finished.
282
283	Made bigger and smaller variants of fstime which are designed to beat
284	up the disk I/O and the buffer cache, respectively.  Adjusted the
285	sleeps so that they are short for short benchmarks.
286
287-	Instead of 1,2,4, and 8-shell benchmarks, went to 1, 8, and 16 to
288	give a broader range of information (and to run 1 fewer test).
289	The only real problem with this is that not many iterations get
290	done with 16 at a time on slow systems, so there are some significant
291	rounding errors; 8 therefore still used for the benchmark.  There is
292	also the problem that the last (uncompleted) loop is counted as a full
293	loop, so it is impossible to score below 1.0 lpm (which gave my laptop
294	a break).  Probably redesigning Shell to do each loop a bit more
295	quickly (but with less intensity) would be a good idea.
296
297	This benchmark appears to be very heavily influenced by the speed
298	of the loader, by which shell is being used as /bin/sh, and by how
299	well-compiled some of the common shell utilities like grep, sed, and
300	sort are.  With a consistent tool set it is also a good indicator of
301	the bandwidth between main memory and the CPU (e.g. Pentia score about
302	twice as high as 486es due to their 64-bit bus).  Small, sometimes
303	broken shells like "ash-linux" do particularly well here, while big,
304	robust shells like bash do not.
305
306-	"dc" is a somewhat iffy benchmark, because there are two versions of
307	it floating around, one being small, very fast, and buggy, and one
308	being more correct but slow.  It was never in the index anyway.
309
310-	Execl is a somewhat troubling benchmark in that it yields much higher
311	scores if compiled statically.  I frown on this practice because it
312	distorts the scores away from reflecting how programs are really used
313	(i.e. dynamically linked).
314
315-	Arithoh is really more an indicator of the compiler quality than of
316	the computer itself.  For example, GCC 2.7.x with -O2 and a few extra
317	options optimizes much of it away, resulting in about a 1200% boost
318	to the score.  Clearly not a good one for the index.
319
320I am still a bit unhappy with the variance in some of the benchmarks, most
321notably the fstime suite; and with how long it takes to run.  But I think
322it gets significantly more reliable results than the older version in less
323time.
324
325If anyone has ideas on how to make these benchmarks faster, lower-variance,
326or more meaningful; or has nice, new, portable benchmarks to add, don't
327hesitate to e-mail me.
328
329David C Niemi <niemi@tux.org>		7 Dec 1995
330
331========================  May 91 ==========================
332This is version 3. This set of programs should be able to determine if
333your system is BSD or SysV. (It uses the output format of time (1)
334to see. If you have any problems, contact me (by email,
335preferably): ben@bytepb.byte.com
336
337---
338
339The document doc/bench.doc describes the basic flow of the
340benchmark system. The document doc/bench3.doc describes the major
341changes in design of this version. As a user of the benchmarks,
342you should understand some of the methods that have been
343implemented to generate loop counts:
344
345Tests that are compiled C code:
346  The function wake_me(second, func) is included (from the file
347timeit.c). This function uses signal and alarm to set a countdown
348for the time request by the benchmark administration script
349(Run). As soon as the clock is started, the test is run with a
350counter keeping track of the number of loops that the test makes.
351When alarm sends its signal, the loop counter value is sent to stderr
352and the program terminates. Since the time resolution, signal
353trapping and other factors don't insure that the test is for the
354precise time that was requested, the test program is also run
355from the time (1) command. The real time value returned from time
356(1) is what is used in calculating the number of loops per second
357(or minute, depending on the test).  As is obvious, there is some
358overhead time that is not taken into account, therefore the
359number of loops per second is not absolute. The overhead of the
360test starting and stopping and the signal and alarm calls is
361common to the overhead of real applications. If a program loads
362quickly, the number of loops per second increases; a phenomenon
363that favors systems that can load programs quickly. (Setting the
364sticky bit of the test programs is not considered fair play.)
365
366Test that use existing UNIX programs or shell scripts:
367  The concept is the same as that of compiled tests, except the
368alarm and signal are contained in separate compiled program,
369looper (source is looper.c). Looper uses an execvp to invoke the
370test with its arguments. Here, the overhead includes the
371invocation and execution of looper.
372
373--
374
375The index numbers are generated from a baseline file that is in
376pgms/index.base. You can put tests that you wish in this file.
377All you need to do is take the results/log file from your
378baseline machine, edit out the comment and blank lines, and sort
379the result (vi/ex command: 1,$!sort). The sort in necessary
380because the process of generating the index report uses join (1).
381You can regenerate the reports by running "make report."
382
383--
384
385========================= Jan 90 =============================
386Tom Yager has joined the effort here at BYTE; he is responsible
387for many refinements in the UNIX benchmarks.
388
389The memory access tests have been deleted from the benchmarks.
390The file access tests have been reversed so that the test is run
391for a fixed time. The amount of data transfered (written, read,
392and copied) is the variable. !WARNING! This test can eat up a
393large hunk of disk space.
394
395The initial line of all shell scripts has been changed from the
396SCO and XENIX form (:) to the more standard form "#! /bin/sh".
397But different systems handle shell switching differently. Check
398the documentation on your system and find out how you are
399supposed to do it. Or, simpler yet, just run the benchmarks from
400the Bourne shell. (You may need to set SHELL=/bin/sh as well.)
401
402The options to Run have not been checked in a while. They may no
403longer function. Next time, I'll get back on them. There needs to
404be another option added (next time) that halts testing between
405each test. !WARNING! Some systems have caches that are not getting flushed
406before the next test or iteration is run. This can cause
407erroneous values.
408
409========================= Sept 89 =============================
410The database (db) programs now have a tuneable message queue space.
411queue space. The default set in the Run script is 1024 bytes.
412Other major changes are in the format of the times. We now show
413Arithmetic and Geometric mean and standard deviation for User
414Time, System Time, and Real Time. Generally, in reporting, we
415plan on using the Real Time values with the benchs run with one
416active user (the bench user). Comments and arguments are requested.
417
418contact: BIX bensmith or rick_g
419