nbench

How to install nbench

  1. Download nbench from: http://www.tux.org/~mayer/linux/nbench-byte-2.2.3.tar.gz

  2. Extract and install it:

    1
    2
    3
    # tar -xvzf nbench-byte-XXXX.tar.gz
    # cd nbench-byte-XXXX
    # make

Note: You need to install glibc-static package on your guest.

Features and Functions

  • Numeric sort - Sorts an array of long integers.
  • String sort - Sorts an array of strings of arbitrary length.
  • Bitfield - Executes a variety of bit manipulation functions.
  • Emulated floating-point - A small software floating-point package.
  • Fourier coefficients - A numerical analysis routine for calculating series approximations of waveforms.
  • Assignment algorithm - A well-known task allocation algorithm.
  • Huffman compression - A well-known text and graphics compression algorithm.
  • IDEA encryption - A relatively new block cipher algorithm.
  • Neural Net - A small but functional back-propagation network simulator.
  • LU Decomposition - A robust algorithm for solving linear equations.

A run of the benchmark suite consists essentially of two phases for each of the tests. First, a calibration loop is run to determine the size of the problem the system can handle in a reasonable time, in order to adapt to the ever faster computer hardware available. Second, the actual test is run repeatedly several times to obtain a statistically meaningful result.

Originally, NBench and BYTEmark produced two overall index figures: Integer index and Floating-point index. The Integer index is the geometric mean of those tests that involve only integer processing—numeric sort, string sort, bitfield, emulated floating-point, assignment, Huffman, and IDEA—while the Floating-point index is the geometric mean of those tests that require the floating-point coprocessor—Fourier, neural net, and LU decomposition. The index figures where relative scores to get a general feel for the performance of the machine under test as compared to a baseline system based on a 90 MHz Pentium Intel CPU.

The Linux/Unix port has a second baseline machine, it is an AMD K6/233 with 32 MB RAM and 512 KB L2-cache running Linux 2.0.32 and using GNU gcc version 2.7.2.3 and libc-5.4.38. The original integer index was split into an integer-operation and a memory-operation index, as suggested by Andrew D. Balsa, reflecting the realization that memory management is important in CPU design. The original tests have been left alone, however, the geometric mean of the tests numeric sort, floating-point emulation, IDEA, and Huffman now constitutes the integer-arithmetic focused benchmark index, while the geometric mean of the tests string sort, bitfield, and assignment makes up the new memory index. The floating point index has been left alone, it is still the geometric mean of fourier, neural net, and LU decomposition.

How to use nbench

nbench is very easy to run, just issue command ./nbench and take a cup of coffee to wait the results.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# cd nbench-byte-XXXX
# ./nbench

BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST : Iterations/sec. : Old Index : New Index
: : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT : 1274.9 : 32.69 : 10.74
STRING SORT : 545.29 : 243.65 : 37.71
BITFIELD : 3.9117e+08 : 67.10 : 14.02
FP EMULATION : 195.95 : 94.03 : 21.70
FOURIER : 24257 : 27.59 : 15.49
ASSIGNMENT : 30.302 : 115.30 : 29.91
IDEA : 5556.7 : 84.99 : 25.23
HUFFMAN : 2032.3 : 56.36 : 18.00
NEURAL NET : 59.18 : 95.07 : 39.99
LU DECOMPOSITION : 1486.4 : 77.00 : 55.60
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX : 83.268
FLOATING-POINT INDEX: 58.668
Baseline (MSDOS*) : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU : 4 CPU GenuineIntel Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 2394MHz
L2 Cache : 12288 KB
OS : Linux 3.10.0-229.el7.x86_64
C compiler : gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC)
libc : libc-2.17.so
MEMORY INDEX : 25.097
INTEGER INDEX : 18.035
FLOATING-POINT INDEX: 32.539
Baseline (LINUX) : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.

Results analysis

There are three performance indicators: MEMORY INDEX, INTEGER INDEX, FLOATING-POINT INDEX, for these indicators the larger the better.

MEMORY INDEX - The performance of front-side bus (FSB) and cpu cache size.
INTEGER INDEX - Integer processing performance.
FLOATING-POINT INDEX - Double-precision floating-point processing performance.

Note: There is a RESULTS file under nbench-byte-XXXX, you can compare your results with the results in the RESULTS file.

The main parameters

1
2
3
4
# ./nbench -h
Usage: ./nbench [-v] [-c<FILE>]
-v = verbose
-c = input parameters thru command file <FILE>

You see, nbench is very easy to use.

Shortcomings

  • These benchmarks are meant to expose the theoretical upper limit of the CPU, FPU, and memory architecture of a system. They cannot measure video, disk, or network throughput (those are the domains of a different set of benchmarks).
  • NBench is single-threaded. Currently, each benchmark test uses only a single execution thread. However, most modern operating systems have some multitasking component. How a system “scales” as more tasks are run simultaneously is an effect that NBench does not explore.

Reference