update:

while this benchmark is still valid, very simple, very cross platform, with a focus on the team cpu (why is there no multi core md5? (putting many many core arm servers at disadvantage) + harddisk (two very important components)

maybe stress-ng is the way to go? https://www.cyberciti.biz/faq/stress-test-linux-unix-server-with-stress-ng/

first of: always

of course: stop all background tasks prior that could result is lower performance

this benchmark ain’t perfect but

  • it is run fast
  • gives a good quick look at the performance of the system (per core)
  • is universal: md5sum and dd are basically available on al Unix/GNU Linux versions
  1. dd calculates the time it takes to create 1GByte file full of zeros (while also displaying harddisk speed in MB/s)
  2. takes the time ONE (no multicore md5!) cpu core needs to calculate the md5 hash sum for this 1GBytes of zeros (so should actually always be the same hash? X-D)
  3. cleans up by deleting the file

a basic benchmark: harddisk + CPU: dd + md5

this benchmark tests harddisk and cpu by creating a 1GB file (user can make it as big as one likes filesystem can create) and measures the time it takes to md5sum that file.

so you can calculate how long it is going to take to md5sum 1TB…

md5sum md5 based benchmark

mkdir /scripts; # create new folder
vim /scripts/benchmark_md5sum.sh; # create new file and open it, fill it with this content
#!/bin/bash
echo "===================== md5sum benchmark";
echo "======== generate 1GB test file";
dd if=/dev/zero of=md5sumTestFile count=1048576 bs=1024;
du -h md5sumTestFile;
time md5sum md5sumTestFile;
# removing test file
rm -rf md5sumTestFile;
# write and quit vim
:wq
chmod u+x ./scripts/benchmark_md5sum.sh; # make script executable

./scripts/benchmark_md5sum.sh; # run

results for: i5-4200U:

/scripts/benchmark_md5sum.sh
md5sum benchmark...
=== your cpu is:
model name	: Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
model name	: Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
model name	: Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
model name	: Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz

=== generate 1GB test file
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 4.11544 s, 261 MB/s
1.1G	md5sumTestFile
cd573cfaace07e7949bc0c46028904ff  md5sumTestFile

real	0m2.523s <- it took 2.5sec to md5sum 1.1GByte of data,
for a single i5 core (md5sum is not multicore)
user	0m2.259s
sys	0m0.263s

results for: i3-5010U

/scripts/benchmark_md5sum.sh; # first run
md5sum benchmark...
=== your cpu is:
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
=== generate 1GB test file
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.35875 s, 320 MB/s
1.1G	md5sumTestFile
cd573cfaace07e7949bc0c46028904ff  md5sumTestFile

real	0m3.002s
user	0m2.821s
sys	0m0.180s

# harddisk used
hdparm -i /dev/sda

/dev/sda:

 Model=SanDisk SDSSDH3 512G, FwRev=40101000
 Config={ Fixed }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=unknown, MaxMultSect=1, MultSect=off
 (maybe): CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=1000215216
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-4,5,6,7

 * signifies the current active mode

while the harddisk of the i5 system is unkown, it is about 19% slower

than that “SanDisk SDSSDH3 512G” of the i3 system.

but the i5@1.6Ghz is about 16% faster (per core) than the i3@2.1Ghz at higher clock speeds

both systems have 2x cores and 4x threads

desktop based: WebGL 3d in the browser fish glass benchmark

https://webglsamples.org/aquarium/aquarium.html

a very beautiful WebGL based benchmark X-D (thanks all involved!)

tell the user what hardware + os was used:

hostnamectl; # tested on this os + firefox 76.0.1 (64-bit)
         Icon name: computer-desktop
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-8-amd64
      Architecture: x86-64

sysbench: multicore cpu benchmark

unfortunately the migration of the package sysbench is “stuck” right now (from debian 9 to debian 10)

https://packages.debian.org/source/buster/sysbench

reasons given:

  • excuses:
    • Migration status: Blocked. Can’t migrate due to a non-migratable dependency. Check status below.
    • Blocked by: ck
      • Migration status for ck (- to 0.6.0-1.1): BLOCKED: Rejected/violates migration policy/introduces a regression
      • Issues preventing migration:
        • Updating ck introduces new bugs: #906697

sources here: https://github.com/akopytov/sysbench

you can install it via even in Debian 10 (Buster) via this script: (howto)

# tested on
hostnamectl 
   Static hostname: debian10
         Icon name: computer-desktop
           Chassis: desktop
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-6-amd64
      Architecture: x86-64
# manual download and install
arm cpu: https://packagecloud.io/akopytov/sysbench/packages/debian/buster/sysbench_1.0.20-1_arm64.deb
32Bit cpu: https://packagecloud.io/akopytov/sysbench/packages/debian/buster/sysbench_1.0.20-1_i386.deb
64Bit cpu: https://packagecloud.io/akopytov/sysbench/packages/debian/buster/sysbench_1.0.20-1_amd64.deb
# then
dpkg -i package.deb

# script installer
su - root; # become root
wget https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh; # download script
chmod +x script.deb.sh; # mark script as runnable
./script.deb.sh; # run it

# will add this file and repository
cat /etc/apt/sources.list.d/akopytov_sysbench.list
# this file was generated by packagecloud.io for
# the repository at https://packagecloud.io/akopytov/sysbench

deb https://packagecloud.io/akopytov/sysbench/debian/ buster main
deb-src https://packagecloud.io/akopytov/sysbench/debian/ buster main

apt update; # update package repo info
apt install sysbench; # install sysbench

let’s bench:

DO NOT USE KNOPPIX ON SERVERS!

SysBench: multi core/thread CPU benchmark

and more:

Cross-platform and multi-threaded benchmark tool

SysBench is a modular, cross-platform and multi-threaded benchmark tool for evaluating OS parameters that are important for a system running a database under intensive load.

The idea of this benchmark suite is to quickly get an impression about system performance without setting up complex database benchmarks or even without installing a database at all.

Current features allow to test the following system parameters:

 * file I/O performance
 * scheduler performance
 * memory allocation and transfer speed
 * POSIX threads implementation performance
 * database server performance (OLTP benchmark)

Primarily written for MySQL server benchmarking, SysBench will be further extended to support multiple database backends, distributed benchmarks and third-party plug-in modules. (src)

unfortunately not in Debian 9 or Debian 10 default repository, manual install needed.

apt-get install sysbench; # install it
sysbench --test=cpu --cpu-max-prime=20000 run; # run it
sysbench 0.4.12: multi-threaded system evaluation benchmark
Running the test with following options:
 Number of threads: 1
Doing CPU performance benchmark
Threads started!
 Done.
Maximum prime number checked in CPU test: 20000
 Test execution summary:
 total time: 29.8547s
 total number of events: 10000
 total time taken by event execution: 29.8524
 per-request statistics:
 min: 2.90ms
 avg: 2.99ms
 max: 6.04ms
 approx. 95 percentile: 3.31ms
Threads fairness:
 events (avg/stddev): 10000.0000/0.00
 execution time (avg/stddev): 29.8524/0.00

script it:

per default it uses only one core – to use automatically all cores

vim /scripts/bench_cpu.sh

#!/bin/bash

NUM_CORES=$(grep -c ^processor /proc/cpuinfo)

echo "============ CPU MIPS and FLOPS"

cat /proc/cpuinfo | grep -ie hardware;
cat /proc/cpuinfo | grep -ie model;
cat /proc/cpuinfo | grep -ie mips;
cat /proc/cpuinfo | grep -ie flops;
echo "============ CPU BENCHMARK"

sysbench --test=cpu --cpu-max-prime=20000 run --num-threads=$NUM_CORES

or download it from here. bench_cpu.sh

:wq save and quit

wget https://dwaves.de/wp-content/uploads/2017/05/bench_cpu.sh_.txt; # download script
mv bench_cpu.sh_.txt bench_cpu.sh; # rename
chmod +x /scripts/bench_cpu.sh; # make script executable

# run it and meassure time how long it takes to run it
time /scripts/bench_cpu.sh;

SysBench results for: i3-5010U

time /scripts/bench_cpu.sh
============ CPU MIPS and FLOPS
model		: 61
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
model		: 61
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
model		: 61
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
model		: 61
model name	: Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
bogomips	: 4190.13
bogomips	: 4190.13
bogomips	: 4190.13
bogomips	: 4190.13
============ CPU BENCHMARK
WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 4
Initializing random number generator from current time


Prime numbers limit: 20000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:   789.06

General statistics:
    total time:                          10.0040s
    total number of events:              7896

Latency (ms):
         min:                                    4.23
         avg:                                    5.07
         max:                                   17.07
         95th percentile:                        5.09
         sum:                                40003.80

Threads fairness:
    events (avg/stddev):           1974.0000/12.69
    execution time (avg/stddev):   10.0010/0.00


real	0m10.053s
user	0m39.667s
sys	0m0.023s

CPU benchmarks results based on SysBench:

sorted: slowest cpu on top, fastest cpu on bottom (always using all available cores/threads, more cores = better):

  • Intel(R) Pentium(R) CPU G2020 @ 2.90GHz
    • 2x Threads
    • real 0m13.699s
  • AMD Phenom(tm) II X4 955 Processor
    • 4x Threads
    • real 0m11.520s
    • power usage: 200 W idle, 400 W all cores 100% load
    • sorry to say AMD but those x86 CPUs are pretty energy intense, hope they get better.
  • Odroid H2
    • 4x Intel(R) Celeron(R) J4105 CPU @ 1.50GHz (dynamically clocks up to 2.2 GHz when CPU power is needed)
    • real 0m10.203s (wow almost the same as i5-4200U CPU @ 1.60GHz)
  • Intel(R) Core(TM) i3-5010U CPU @ 2.10GHz
  • Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
    • 4x Threads
    • real 0m10.039s
    • +36% (compared to G2020)
  • Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz
    • 4x Threads
    • real 0m8.695s
    • +15% faster than i5-4200U CPU @ 1.60GHz
  • model : 58, model name : Intel(R) Core(TM) i5-3470T CPU @ 2.90GHz
    • 4x Threads
    • real 0m7,399s
    • +25% compared to the i5-4200U CPU @ 1.60GHz
  • 2x Xeon E5540 @ 2.53GHz
    • 16x Threads
    • real 0m3.304s
    • +123.94% (i5-3470T CPU @ 2.90GHz)

Links:

https://nerdpol.ch/tags/benchmark

SysBench is the amazing work of akopytov:

Other Benchmarks:

OpenBenchMarKing

https://openbenchmarking.org/

phronix

https://www.phoronix-test-suite.com/

nice hardware components comparison platform:

https://userbenchmark.com/

only for windows 🙁

admin