Testing several German based vServer providers and their product(s)

Intro

I need to evaluate the performance i got for my money for various vServer (virtual Server) providers in Germany.

My existing vServer is a rather old one in terms of how long I have this server and thus how old the underlying hardware may/could be. I also experienced now-and-then delays in web requests and could not determine the cause as the overall load on my instance was/is low.

My current vServer was ordered in January 2012 from Strato. I will benchmark that machine against a actual vServer Version of Strato and against vServers from Hetzner and DomainFactory.

I choose the smallest available machine. None of the providers except DomainFactory let me try-before-buy a server. Thus i had to go into contract at least for a month for testing which will cost me approx 8 euros for each vServer.

I cannot test for general availability but for CPU and disk performance and will provide a system overview via ls and cut the most important parts and info of the system.

The tests I will run are basic and non-scientific but will let me compare stupidly raw performance of the CPU and disk and thus let me make conclusions about the underlying hardware and the overall performance.

All tests where made after 9pm in order not to interrupt services of other vServer users on the underlying physical hosts. I was done with all the tests at midnight on the same day.

Those are the test I will run on each and every machine.

Get the Distribution name

$ cat /etc/issue

Retrieve Kernel Version, Name, Arch

$ uname -a

Fetch CPU-Information

$ cat /proc/cpuinfo | head -n 25

Count the number of CPUs available

$ cat /proc/cpuinfo | grep processor | wc -l

Retrieve detailed Memory info

$ cat /proc/meminfo 

And basic memory overview

$ free -m

What file systems are mounted, what are their mount points and default options?

$ mount

Retrieve disk sizes and mount points

$ df -h

List the contents of /dev

$ ls /dev

Fetch the fstab contents

$ cat /etc/fstab

How is the network-interface configuration

$ cat /etc/network/interfaces

What are the current ifconfig details?

$ ifconfig

Make a simple sequential write test. 1GB file.

$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4

Make Disk Test using bonnie++. Use 256MB RAM and create a 2G file to be consistent over all hosts/servers and vServer constraints. I found DomainFactory vServer to behave very performant and thus raised the file size up to 16GB and Memory parameter to 4GB for tests.

$ apt-get install bonnie
$ mkdir -p /home/croessler/bonnie-test
$ bonnie++ -d /home/croessler/bonnie-test/ -s 2g -r 256 -f -b -u root

CPU: Do a simple brute force calculation

$ time echo $((42**4242424242))

CPU: read from /dev/zero and discard that information to /dev/null

$ time dd if=/dev/zero of=/dev/null bs=256M count=4

CPU: read from /dev/zero, zip that data and discard after on

$ apt-get install bzip2
$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null

First insights when getting a overview of vServer providers

Only DomainFactory and its vServer product “JiffyBoxes” let me go into a 24hour test without having to sign a contract.

Only DomainFactory offers Linux based virtual Servers with more than one CPU core. Why? At least two cores would be very beneficial for the physical hosts guests.

Only Strato and DomainFactory provide integrated Backup-solutions in Form of Snapshots of some sort. I don’t take that feature much into account, but its nice to have. But nothing beats a dedicated backup solution also providing incremental file based backups instead of having full system snapshots (all or nothing).

DomainFactory provides SSD-Storage too.

Overview of the order process and features provided

Strato - V-PowerServer A v5.1 (January 2012)

I own this virtual Server since January 2012. Therefore i assume the underlying physical Server is a bit old(ish).

The benchmarks on this server are out of scope as it runs several services that i and others rely on. Apache is running as well as Postfix, thus running benchmarks while those services are active and being used will falsify the results. Therefore i will run them (and on other servers as well) up to three times to get a small glimpse of the overall/median performance.

Strato - Virtual Server Linux Level 1 (v1304.1) (March 2014)

My Order was placed on 20:30.

5 minutes after order placement i received a confirmation email.

1 hour after order I got a mail stating the server is ready.

1 hour and 15 minutes after order a got a sms with the password for the strato-administration-panel.

1 hour and 30 minutes after order the technical hostname has been set up in DNS.

Ubuntu 12.04 LTS has been preinstalled. I needed to invoke a re-installation to Debian 7.0 from within the administration-panel.

A quick word to Strato’s customer back-end and server-administration-panel: config.stratoserver.net is extremely unresponsive. Each and every click needs at least 5 seconds or more before responding (mouseclick -> time to receive the HTML response). The back-end is full of advertising also…

I canceled that contract immediately after testing but Strato could not provide me a annulation date of today but only in 4 weeks. There seems to be no special termination here.

Hetzner - vServer VQ7 (March 2014)

When ordering I can choose between several distributions:

  • Rescue-System
  • CentOS 6.5 minimal
  • Debian 7.0 LAMP - nur 64 Bit
  • Debian 7.0 minimal
  • openSUSE 13.1 minimal - nur 64 Bit
  • Ubuntu 12.04 LTS minimal
  • Ubuntu 13.10 minimal - nur 64 Bit
  • CentOS 6.5 + cPanel - nur 64 Bit
  • CentOS 6.5 + Plesk - nur 64 Bit
  • Debian 7.0 + Plesk - nur 64 Bit

It also let me choose the architecture to be either 32bit or 64bit. I choose “Debian 7.0 minimal as 64bit” for this test.

Minimum contract term is 1 month.

The order confirmation mail was received approx 10 minutes later. The server was set up and I received ip-address and login information 15 minutes after order.

According to the AGB I can withdraw the contract within 14 days after beginning of the contract. Therefore I can test this system for 14 days. Great service!

The configuration interface is extremely useful / user-friendly and fast loading. It enables fast and easy Server-management but it’s not too easy by hiding important information from the user (looking at you 1and1 configuration-backend).

DomainFactory JiffyBox 24h Test-System (March 2014 CloudLevel 1)

DF (belongs to HostEurope) provides test-systems that are available for 24 hours.

The order process was fast, easy and straightforward.

  • enter email address and phone number
  • you get a call on your phone and you’ll get the unlock-code (via electronic voice)
  • you receive an email 5 minutes later with further details

I was provided with a test-server which specs are equal to their entry-level vServer except the test-server has 25GB storage instead of 75GB. But that will fit nicely for this test.

I also got plenty of Distributions to choose from:

  • CentOS 5.10 (1 GB)
  • CentOS 5.10 64-Bit (1 GB)
  • CentOS 6.5 (2 GB)
  • CentOS 6.5 64-Bit (2 GB)
  • Debian Wheezy (7.3) (2 GB)
  • Debian Wheezy (7.3) 64-Bit (2 GB)
  • Fedora 20 (2 GB)
  • Fedora 20 64-Bit (2 GB)
  • openSUSE 13.1 (2 GB)
  • openSUSE 13.1 64-Bit (2 GB)
  • Ubuntu 10.04 LTS (512 MB)
  • Ubuntu 10.04 LTS 64-Bit (512 MB)
  • Ubuntu 12.04 LTS (2 GB)
  • Ubuntu 12.04 LTS 64-Bit (2 GB)

The administration interface is stunning and awesome yet simple and experienced users as well as beginners will find all information. Integrated are some kind of popups providing information in real-time when creating an instance:

  • create instance …
  • creating disk + swap
  • installing system showing a progress bar

That messages flew by like nothing. DF was kind enough to provide a 24h test-server but limits the use of such a server:

  • several ports are blocked
  • 5GB maximum traffic
  • small other limitations

I can test that server with such limitations, that’s OK.

Summary as Spreadsheet + Text

Long story short. Here is my result. I did NOT took average values by calculating but by looking at them manually. I don’t care for sub-second differences.

benchmark-result

benchmark-result

Hetzner and DomainFactory seem to have (more or less) up-to-date kernels and provide an 64bit userspace+kernel, whereas Strato only offers 32bit arch.

Strato has good Disk-performance when reading/writing sequential (100MB/s +). Hetzner provides rock-solid real-world values of about 60MB/s. DomainFactory goes through the top with 600MB/s+ but it seems this is due to some kind of write-cache which is OK, but one must know that in order to be able to compare benchmarks on a fairly basis. Or its because 24h test-instances utilize SSDs. (everything according to dd-tests)

DomainFactory is the only one who provides more than one virtual CPU.

I found the 512 MB RAM in the Hetzner instance to be too limited for most of today’s use. One can use that small vServer (vServer VQ7) for small hosts/requirements, but i think the next bigger offer is a better fit (but costs 5€ more).

Disk space from Hetzner and my OLD Strato-Server are about the same: 20GB. Strato now offers 50GB storage capacity and DomainFactory hits 75GB (test-server got 25GB only). For my use 20-30 GB is OK.

In terms of raw single-core-CPU-performance Hetzner and DomainFactory take the lead. Strato seems to utilize some older Opterons. But that really doesn’t make the cut. I could not determine a leader here on raw CPU performance, that will heavily depend on each and every use-case. Nevertheless, Hetzner was fastest, second is DomainFactory.

A real plus for Hetzner and DomainFactory is the ability to modify the mountoptions in /etc/fstab. Strato does not take into account my modifications. Also Strato uses reiserfs as Filesystem whereas Hetzner and DomainFactory use ext3/4. A plus for DomainFactory for fine-tuning the fstab regarding the noatime mount option and utilizing a modern filesystem like ext4.

Having the above information currently i would either go with DomainFactory and their smallest vServer (CloudLevel 1) because it has fast CPUs (3 of them!), fast and huge storage. Costs: about 15€ per month.

Hetzner would place second but I would have not to choose the smallest vServer but the second one because of the slightly small amount of RAM (512MB). The next larger vServer provides 1GB of RAM. The smallest (512MB) costs about 8€ per month, the second costs 13€ per month being two euros cheaper than DomainFactory.

I personally would not recommend Strato at this point. They may have good sequential write performance but random-io kills that thing. Its cheap nevertheless and may suite any light use-case here. Costs 8€ per month. Nevertheless I can say that I never had any problems in terms of reliability / outages with Strato. I cannot say anything about Hetzner and DomainFactory about this point as I haven’t used any of their vServers. I was utilizing a Hetzner rootserver some time ago without any problems as well as one of Strato’s rootservers.

Update: Phoronix has just released a vServer IO-Benchmark here. As one can see, sometimes enabling virtio gains performance, sometimes performance drops. Seems to be some Kernel internal glitches.

Tests in detail

Now the tests itself. Largely uncommented.

Strato - V-PowerServer A v5.1 (January 2012)

Get the Distribution name

$ cat /etc/issue
Ubuntu 10.04.4 LTS \n \l

Retrieve Kernel Version, Name, Arch

$ uname -a
Linux hxxxxxxx.stratoserver.net 2.6.32-042stab078.27 #1 SMP Mon Jul 1 20:48:07 MSK 2013 i686 GNU/Linux

Fetch CPU-Information

$ cat /proc/cpuinfo | head -n 25
processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 16
model       : 2
model name  : Quad-Core AMD Opteron(tm) Processor 2346 HE
stepping    : 3
cpu MHz     : 750.000
cache size  : 512 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 4
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs npt lbrv svm_lock
bogomips    : 3616.52
TLB size    : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

There seems to be AMD advanced speed step involved here. CPU-Frequency is scaled down when not in use.

Count the number of CPUs available

$ cat /proc/cpuinfo | grep processor | wc -l
1

Retrieve detailed Memory info

$ cat /proc/meminfo 
MemTotal:        2097152 kB
MemFree:         1531216 kB
Cached:           184552 kB
Active:           208432 kB
Inactive:         314332 kB
Active(anon):     121188 kB
Inactive(anon):   217024 kB
Active(file):      87244 kB
Inactive(file):    97308 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        338212 kB
Shmem:             39816 kB
Slab:              43156 kB
SReclaimable:      30148 kB
SUnreclaim:        13008 kB

And basic memory overview

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2048        552       1495          0          0        180
-/+ buffers/cache:        372       1675
Swap:            0          0          0

What filesystems are mounted, what are their mountpoints and default options?

$ mount
/dev/vzfs on / type reiserfs (rw,usrquota,grpquota)

Retrieve disksizes and mountpoints

$ df -h
/dev/vzfs              25G  6,7G   19G  27% /

List the contents of /dev

$ ls /dev
agpgart   dsp   loop0  mem     midi3       null   ptyp4  ptypc  ram11  ram4    rmidi1     smpte3   tty2  ttyp0  ttyp8  urandom
audio     dsp1  loop1  midi0   mixer       port   ptyp5  ptypd  ram12  ram5    rmidi2     sndstat  tty3  ttyp1  ttyp9  vzfs
audio1    dsp2  loop2  midi00  mixer1      ptmx   ptyp6  ptype  ram13  ram6    rmidi3     stderr   tty4  ttyp2  ttypa  xconsole
audio2    dsp3  loop3  midi01  mixer2      pts    ptyp7  ptypf  ram14  ram7    sequencer  stdin    tty5  ttyp3  ttypb  zero
audio3    fd    loop4  midi02  mixer3      ptyp0  ptyp8  ram    ram15  ram8    shm        stdout   tty6  ttyp4  ttypc
audioctl  full  loop5  midi03  mpu401data  ptyp1  ptyp9  ram0   ram16  ram9    smpte0     tty      tty7  ttyp5  ttypd
console   kmem  loop6  midi1   mpu401stat  ptyp2  ptypa  ram1   ram2   random  smpte1     tty0     tty8  ttyp6  ttype
core      log   loop7  midi2   net         ptyp3  ptypb  ram10  ram3   rmidi0  smpte2     tty1     tty9  ttyp7  ttypf

Fetch the fstab contents

$ cat /etc/fstab
proc  /proc       proc    defaults    0    0
none  /dev/pts    devpts  rw          0    0

How is the network-interface configuration

$ cat /etc/network/interfaces
# This configuration file is auto-generated.
# WARNING: Do not edit this file, otherwise your changes will be lost.
# Please edit template /etc/network/interfaces.template instead.

auto lo
iface lo inet loopback
    address 127.0.0.1
    netmask 255.0.0.0
    broadcast xx.xx.xx.xx
    up ip route replace 127.0.0.0/8 dev lo

# Auto generated venet0 interfaces
auto venet0
iface venet0 inet static
    address 127.0.0.1
    netmask 255.255.255.255
    broadcast 0.0.0.0

    up route add default dev venet0

iface venet0 inet6 static
    address ::2
    netmask 128

    up ip -6 r a default dev venet0

auto venet0:0
iface venet0:0 inet static
    address xxx.xxx.xxx.xxx
    netmask 255.255.255.255

What are the current ifconfig details?

$ ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:33634802 errors:0 dropped:0 overruns:0 frame:0
          TX packets:33634802 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:7579557233 (7.5 GB)  TX bytes:7579557233 (7.5 GB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00.....
          inet addr:127.0.0.1  P-t-P:127.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.255
          inet6 addr: ::2/128 Scope:Compat
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:37205769 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38955833 errors:0 dropped:273 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:21123192573 (21.1 GB)  TX bytes:27058762623 (27.0 GB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-....
          inet addr:xxx.xxx.xxx.xxx  P-t-P:xxx.xxx.xxx.xxx  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

Make a simple sequential write test. 1GB file.

$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 10,6001 s, 101 MB/s

real    0m11.543s
user    0m0.003s
sys     0m8.758s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 10,5066 s, 102 MB/s

real    0m11.731s
user    0m0.002s
sys     0m8.837s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 10,6003 s, 101 MB/s

real    0m11.482s
user    0m0.002s
sys     0m8.531s

Make Disk Test using bonnie++. Use 256MB RAM and create a 2G file to be consistent over all hosts/servers and vServer constraints.

$ apt-get install bonnie
$ mkdir -p /home/croessler/bonnie-test
$ bonnie++ --get-me-the-version-please 2>&1 | tail -n 1
Version: 1.96

First run (2G file, 256M Ram):

$ bonnie++ -d /home/croessler/bonnie-test/ -s 2g -r 256 -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
hxxxxxxx.stratos 2G           41360  18 29353   9           894500  61 794.6  25
Latency                        2630ms    1912ms             53647us     266ms
Version  1.96       ------Sequential Create------ --------Random Create--------
hxxxxxx.stratoserv -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16    30   0 +++++ +++    48   0    26   0 +++++ +++    45   0
Latency               792ms    1340us     771ms     738ms     157us     787ms

First run results:

Strato 2012 | 2G File + 256M Ram
41360   KByte/s     written sequentially
29353   KByte/s     read and then written and flushed to the disk
894500  KByte/s     sequential read
794.6   seeks/s     random seeks

The sequential read performance of over 894MB/s is due to memory based file caching.

Second run (4G file, 2G Ram):

$bonnie++ -d /home/croessler/bonnie-test/ -s 4g -r 2g -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
h1993965.stratos 4G           42369  19 22648   8           96734  11 563.7  11
Latency                        2586ms    3384ms               285ms     540ms
Version  1.96       ------Sequential Create------ --------Random Create--------
h1993965.stratoserv -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16    31   0 +++++ +++    47   0    31   0 +++++ +++    42   0
Latency               800ms    1315us     727ms     683ms     908us     765ms

Second run results:

Strato 2012 | 4G File + 2G Ram
42369   KByte/s     written sequentially
22648   KByte/s     read and then written and flushed to the disk
96734   KByte/s     sequential read
563.7   seeks/s     random seeks

Write performance and read-write-flush performance is identical to the first run. Sequential read is now on a normal level as the file was larger than available memory. Thus bonnie had to access the disk instead of ram. Thats OK.

CPU: Do a simple bruteforce calculation

$ time echo $((42**4242424242))
0
real    0m27.993s
user    0m20.564s
sys     0m0.000s


$ time echo $((42**4242424242))
0
real    0m30.921s
user    0m20.258s
sys     0m0.010s


$ time echo $((42**4242424242))
0
real    0m27.166s
user    0m20.045s
sys     0m0.003s

CPU: read from /dev/zero and discard that information to /dev/null

$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 0,902056 s, 1,2 GB/s

real    0m0.976s
user    0m0.001s
sys     0m0.759s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 0,830306 s, 1,3 GB/s

real    0m0.904s
user    0m0.002s
sys     0m0.790s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 1,02609 s, 1,0 GB/s

real    0m1.073s
user    0m0.000s
sys     0m0.831s

CPU: read from /dev/zero, zip that data and discard after on

$ apt-get install bzip2
$ bzip2 --version 2>&1 | head -n 1
bzip2, a block-sorting file compressor.  Version 1.0.5, 10-Dec-2007.
$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 65,8892 s, 16,3 MB/s

real    1m6.597s
user    0m45.841s
sys     0m3.618s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 66,423 s, 16,2 MB/s

real    1m7.133s
user    0m45.983s
sys     0m3.950s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 66,7379 s, 16,1 MB/s

real    1m7.447s
user    0m45.821s
sys     0m4.196s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1,1 GB) copied, 67,4715 s, 15,9 MB/s

real    1m8.187s
user    0m46.356s
sys     0m4.135s

Strato - Virtual Server Linux Level 1 (v1304.1) (March 2014)

Get the Distribution name

$ cat /etc/issue
Debian GNU/Linux 7 \n \l

Retrieve Kernel Version, Name, Arch

$ uname -a
Linux hxxxxxx.stratoserver.net 3.2.41-042stab078.27 #1 SMP Mon Jul 1 20:48:07 MSK 2013 i686 GNU/Linux

Fetch CPU-Information

$ cat /proc/cpuinfo | head -n 25
processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 16
model       : 8
model name  : AMD Opteron(tm) Processor 4180
stepping    : 1
cpu MHz     : 1950.000
cache size  : 512 KB
physical id : 0
siblings    : 6
core id     : 0
cpu cores   : 6
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr npt lbrv svm_lock nrip_save pausefilter
bogomips    : 5200.31
TLB size    : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

Count the number of CPUs available

$ cat /proc/cpuinfo | grep processor | wc -l
1

Retrieve detailed Memory info

$ cat /proc/meminfo 
MemTotal:        2097152 kB
MemFree:         2034868 kB
Cached:            54844 kB
Active:            31680 kB
Inactive:          27796 kB
Active(anon):       2316 kB
Inactive(anon):     2316 kB
Active(file):      29364 kB
Inactive(file):    25480 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          4632 kB
Shmem:              2612 kB
Slab:               2796 kB
SReclaimable:       1048 kB

And basic memory overview

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2048         60       1987          0          0         53
-/+ buffers/cache:          7       2040
Swap:            0          0          0

What filesystems are mounted, what are their mountpoints and default options?

$ mount
/dev/vzfs on / type reiserfs (rw,usrquota,grpquota)

Retrieve disksizes and mountpoints

$ df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/vzfs        50G    178M   50G    1% /

List the contents of /dev

$ ls /dev
char     fuse  null   ptyp1  ptyp5  ptyp9  ptypd   shm     tty    tty11  tty4  tty8   ttyp2  ttyp6  ttypa  ttype    xconsole
console  kmsg  ptmx   ptyp2  ptyp6  ptypa  ptype   stderr  tty0   tty12  tty5  tty9   ttyp3  ttyp7  ttypb  ttypf    zero
fd   log   pts    ptyp3  ptyp7  ptypb  ptypf   stdin   tty1   tty2   tty6  ttyp0  ttyp4  ttyp8  ttypc  urandom
full     net   ptyp0  ptyp4  ptyp8  ptypc  random  stdout  tty10  tty3   tty7  ttyp1  ttyp5  ttyp9  ttypd  vzfs

Fetch the fstab contents

$ cat /etc/fstab
proc  /proc       proc    defaults    0    0
none  /dev/pts    devpts  rw,gid=5,mode=620    0    0
none  /run/shm    tmpfs   defaults    0    0

How is the network-interface configuration

$ cat /etc/network/interfaces
# This configuration file is auto-generated.
# WARNING: Do not edit this file, otherwise your changes will be lost.
# Please edit template /etc/network/interfaces.template instead.

auto lo
iface lo inet loopback
    address 127.0.0.1
    netmask 255.0.0.0
    broadcast xx.xx.xx.xx
    up ip route replace 127.0.0.0/8 dev lo

# Auto generated venet0 interfaces
auto venet0
iface venet0 inet static
    address 127.0.0.1
    netmask 255.255.255.255
    broadcast 0.0.0.0

    up route add default dev venet0

iface venet0 inet6 static
    address ::2
    netmask 128

    up ip -6 r a default dev venet0

auto venet0:0
iface venet0:0 inet static
    address xxx.xxx.xxx.xxx
    netmask 255.255.255.255

What are the current ifconfig details?

$ ifconfig
lo        Link encap:Lokale Schleife 
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          inet6-Adresse: ::1/128 Gültigkeitsbereich:Maschine
          UP LOOPBACK RUNNING  MTU:16436  Metrik:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

venet0    Link encap:UNSPEC  Hardware Adresse 00-00-00-00-00-00-00-00-0...
          inet Adresse:127.0.0.1  P-z-P:127.0.0.1  Bcast:0.0.0.0  Maske:255.255.255.255
          inet6-Adresse: ::2/128 Gültigkeitsbereich:Kompatibilität
          UP BROADCAST PUNKTZUPUNKT RUNNING NOARP  MTU:1500  Metrik:1
          RX packets:1621 errors:0 dropped:0 overruns:0 frame:0
          TX packets:859 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:1870952 (1.7 MiB)  TX bytes:70989 (69.3 KiB)

venet0:0  Link encap:UNSPEC  Hardware Adresse 00-00-00-00-00-00-00...
          inet Adresse:xxx.xxx.xxx.xxx  P-z-P:xxx.xxx.xxx.xxx  Bcast:xxx.xxx.xxx.xxx  Maske:255.255.255.255
          UP BROADCAST PUNKTZUPUNKT RUNNING NOARP  MTU:1500  Metrik:1

Make a simple sequential write test. 1GB file.

$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 2,56599 s, 418 MB/s

real    0m2.588s
user    0m0.000s
sys     0m1.976s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 5,95319 s, 180 MB/s

real    0m7.750s
user    0m0.002s
sys     0m2.437s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 7,53937 s, 142 MB/s

real    0m7.775s
user    0m0.001s
sys     0m2.281s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 9,37666 s, 115 MB/s

real    0m11.185s
user    0m0.000s
sys     0m2.175s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 8,50884 s, 126 MB/s

real    0m8.747s
user    0m0.000s
sys     0m2.415s

Make Disk Test using bonnie++. Use 256MB RAM and create a 2G file to be consistent over all hosts/servers and vServer constraints.

$ apt-get install bonnie
$ mkdir -p /home/croessler/bonnie-test
$ bonnie++ --get-me-the-version-please 2>&1 | tail -n 1
Version: 1.96

First run (2G Filesize, 256M Ram)

$ bonnie++ -d /home/croessler/bonnie-test/ -s 2g -r 256 -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
hxxxxxxx.stratos 2G           100654  11 82528   8           929619  31 391.8   5
Latency                        2039ms    2394ms               544ms     637ms
Version  1.96       ------Sequential Create------ --------Random Create--------
hxxxxxxx.stratoserv -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16     9   0 +++++ +++    15   0     9   0 +++++ +++    21   0
Latency              1206ms     478us    2065ms    3658ms     107us    3604ms

First run results:

Strato 2014 | 2G File + 256M Ram
100654  KByte/s     written sequentially
82528   KByte/s     read and then written and flushed to the disk
929619  KByte/s     sequential read
391.8   seeks/s     random seeks

Sequential read with over 920MB/s is caused by the filesystem cache in RAM. The remaining values are ok. Thats weird, because bonnie took ages for this test (1hour+).

Second run (4G Filesize, 2G Ram)

$ bonnie++ -d /home/croessler/bonnie-test/ -s 4g -r 2g -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
hxxxxxxx.stratos 4G           93241  10 64485   7           2269066  75 311.2   1
Latency                        3603ms    3158ms             25074us     799ms
Version  1.96       ------Sequential Create------ --------Random Create--------
hxxxxxxx.stratoserv -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16     8   0 +++++ +++    14   0     9   0 +++++ +++    16   0
Latency              1825ms     488us    1109ms   13456ms      12us    1400ms

Second run results:

Strato 2014 | 4G File + 2G Ram
93241   KByte/s     written sequentially
64485   KByte/s     read and then written and flushed to the disk
2269066 KByte/s     sequential read
311.2   seeks/s     random seeks

As I said before, thats weird: bonnie took ages for this test (2 hours), sequential write is at 90MB/s and sequential read is over 2GB/s. That can’t be. In the first test bonnie reached only 900MB/s in sequential read. That difference is too high than it can be explained by the bigger file (4 instead of 2 GB).

Let’s do a third test, again with 4G File and 2G Ram:

$ bonnie++ -d /home/croessler/bonnie-test/ -s 4g -r 2g -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
hxxxxxxx.stratos 4G           101716  11 102830  10           1649993  55 263.1   6
Latency                        2756ms    4304ms               509ms     770ms
Version  1.96       ------Sequential Create------ --------Random Create--------
hxxxxxxx.stratoserv -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16     9   0 +++++ +++    14   0    10   0 +++++ +++    28   0
Latency              1555ms     540us    1146ms    1711ms      11us    1090ms

Third run results:

Strato 2014 | 4G File + 2G Ram
101716  KByte/s     written sequentially
102830  KByte/s     read and then written and flushed to the disk
1649993 KByte/s     sequential read
263.1   seeks/s     random seeks

CPU: Do a simple bruteforce calculation

$ time echo $((42**4242424242))
0
real    0m19.623s
user    0m14.721s
sys     0m0.000s


$ time echo $((42**4242424242))
0
real    0m19.623s
user    0m14.715s
sys     0m0.007s


$ time echo $((42**4242424242))
0
real    0m19.590s
user    0m14.713s
sys     0m0.000s

CPU: read from /dev/zero and discard that information to /dev/null

$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 0,426671 s, 2,5 GB/s

real    0m0.449s
user    0m0.000s
sys     0m0.405s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 0,490546 s, 2,2 GB/s

real    0m0.514s
user    0m0.001s
sys     0m0.416s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 0,492118 s, 2,2 GB/s

real    0m0.515s
user    0m0.001s
sys     0m0.404s

CPU: read from /dev/zero, zip that data and discard after on

$ apt-get install bzip2
$ bzip2 --version 2>&1 | head -n 1
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 30,1133 s, 35,7 MB/s

real    0m30.471s
user    0m21.101s
sys     0m1.764s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 30,1732 s, 35,6 MB/s

real    0m30.530s
user    0m21.135s
sys     0m1.792s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 Datensätze ein
4+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 30,1776 s, 35,6 MB/s

real    0m30.560s
user    0m21.300s
sys     0m1.632s

Hetzner - vServer VQ7 (March 2014)

Get the Distribution name

$ cat /etc/issue
Debian GNU/Linux 7 \n \l

Retrieve Kernel Version, Name, Arch

$ uname -a
Linux Debian-70-wheezy-64-minimal 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 GNU/Linux

Fetch CPU-Information

$ cat /proc/cpuinfo | head -n 25
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 2
model name  : QEMU Virtual CPU version 1.0
stepping    : 3
microcode   : 0x1
cpu MHz     : 3400.022
cache size  : 4096 KB
fpu     : yes
fpu_exception   : yes
cpuid level : 4
wp      : yes
flags       : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm up rep_good nopl pni vmx cx16 popcnt hypervisor lahf_lm
bogomips    : 6800.04
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

Count the number of CPUs available

$ cat /proc/cpuinfo | grep processor | wc -l
1

Retrieve detailed Memory info

$ cat /proc/meminfo 
MemTotal:         508924 kB
MemFree:          260964 kB
Buffers:            7708 kB
Cached:           209248 kB
SwapCached:            0 kB
Active:           124504 kB
Inactive:          99008 kB
Active(anon):       6592 kB
Inactive(anon):      116 kB
Active(file):     117912 kB
Inactive(file):    98892 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:          6584 kB
Mapped:             5184 kB
Shmem:               148 kB
Slab:              18140 kB
SReclaimable:      12564 kB
SUnreclaim:         5576 kB
KernelStack:         424 kB
PageTables:         1300 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      254460 kB
Committed_AS:      39912 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        1396 kB
VmallocChunk:   34359736719 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       34804 kB
DirectMap2M:      489472 kB

And basic memory overview

$ free -m
             total       used       free     shared    buffers     cached
Mem:           496        242        254          0          7        204
-/+ buffers/cache:         30        466
Swap:            0          0          0

What filesystems are mounted, what are their mountpoints and default options?

$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=61923,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=50896k,mode=755)
/dev/disk/by-uuid/ac7addc9-53a7-4f7a-84a9-a89ccc1985b6 on / type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=101780k)
/dev/vda1 on /boot type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)

Retrieve disksizes and mountpoints

$ df -h
Filesystem                                              Size  Used Avail Use% Mounted on
rootfs                                                   20G  823M   18G   5% /
udev                                                     10M     0   10M   0% /dev
tmpfs                                                    50M  144K   50M   1% /run
/dev/disk/by-uuid/ac7addc9-53a7-4f7a-84a9-a89ccc1985b6   20G  823M   18G   5% /
tmpfs                                                   5.0M     0  5.0M   0% /run/lock
tmpfs                                                   100M     0  100M   0% /run/shm
/dev/vda1                                               504M   40M  440M   9% /boot

List the contents of /dev

$ ls /dev
autofs           fuse   loop7               port      stderr  tty16  tty27  tty38  tty49  tty6   uinput   vcsa3
block            hpet   loop-control        ppp       stdin   tty17  tty28  tty39  tty5   tty60  urandom  vcsa4
btrfs-control    input  MAKEDEV             psaux     stdout  tty18  tty29  tty4   tty50  tty61  vcs      vcsa5
bus              kmsg   mapper              ptmx      tty     tty19  tty3   tty40  tty51  tty62  vcs1     vcsa6
char             log    mcelog              pts       tty0    tty2   tty30  tty41  tty52  tty63  vcs2     vda
console          loop0  md                  random    tty1    tty20  tty31  tty42  tty53  tty7   vcs3     vda1
core             loop1  mem                 root      tty10   tty21  tty32  tty43  tty54  tty8   vcs4     vda2
cpu              loop2  net                 rtc       tty11   tty22  tty33  tty44  tty55  tty9   vcs5     vga_arbiter
cpu_dma_latency  loop3  network_latency     rtc0      tty12   tty23  tty34  tty45  tty56  ttyS0  vcs6     xconsole
disk             loop4  network_throughput  shm       tty13   tty24  tty35  tty46  tty57  ttyS1  vcsa     zero
fd               loop5  null                snapshot  tty14   tty25  tty36  tty47  tty58  ttyS2  vcsa1
full             loop6  oldmem              snd       tty15   tty26  tty37  tty48  tty59  ttyS3  vcsa2

Fetch the fstab contents

$ cat /etc/fstab
proc /proc proc defaults 0 0
# /dev/vda1 during Installation (RescueSystem)
UUID=689b5bee-090f-4b99-9885-62eba0697baf /boot ext3 defaults 0 0
# /dev/vda2 during Installation (RescueSystem)
UUID=ac7addc9-53a7-4f7a-84a9-a89ccc1985b6 / ext3 defaults 0 0

How is the network-interface configuration

$ cat /etc/network/interfaces
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   xx.xx.xx.xx
  broadcast xx.xx.xx.xx
  netmask   xx.xx.xx.xx
  gateway   xx.xx.xx.xx
  # default route to access subnet
  up route add -net xx.xx.xx.xx netmask xx.xx.xx.xx gw xx.xx.xx.xx eth0

iface eth0 inet6 static
  address xx:xx:xx:xx::2
  netmask 64
  gateway xx:xx:xx:xx::1

What are the current ifconfig details?

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1c:14:01:47:96
          inet addr:xx.xx.xx.xx  Bcast:xx.xx.xx.xx  Mask:xx.xx.xx.xx
          inet6 addr: xx::xx:xx:xx:xx/64 Scope:Link
          inet6 addr: xxxxxxxxxxxx::x/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25065 errors:0 dropped:3 overruns:0 frame:0
          TX packets:2691 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:26516639 (25.2 MiB)  TX bytes:276527 (270.0 KiB)
          Interrupt:10 Base address:0xa000 

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Make a simple sequential write test. 1GB file.

$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 18.8427 s, 57.0 MB/s

real    0m18.904s
user    0m0.000s
sys     0m3.420s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 17.1034 s, 62.8 MB/s

real    0m17.158s
user    0m0.000s
sys     0m1.312s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 17.1578 s, 62.6 MB/s

real    0m17.202s
user    0m0.000s
sys     0m1.256s

Make Disk Test using bonnie++. Use 256MB RAM and create a 2G file to be consistent over all hosts/servers and vServer constraints.

$ apt-get install bonnie
$ mkdir -p /home/croessler/bonnie-test
$ bonnie++ --get-me-the-version-please 2>&1 | tail -n 1
Version: 1.96

First run (2G Filesize, 256M Ram):

$ bonnie++ -d /home/croessler/bonnie-test/ -s 2g -r 256 -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
Debian-70-wheezy 2G           59716   6 44274   4           73953   3 420.3   9
Latency                         520ms     574ms               125ms     315ms
Version  1.96       ------Sequential Create------ --------Random Create--------
Debian-70-wheezy-64 -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1250   6 +++++ +++  1409   4  1297   5 +++++ +++  1455   4
Latency             87513us     638us     196ms   57826us      18us   66817us

First run results:

Hetzner | 2G File + 256M Ram
59716   KByte/s     written sequentially
44274   KByte/s     read and then written and flushed to the disk
73953   KByte/s     sequential read
420.3   seeks/s     random seeks

No second run here to utilize more ram. That machine just had 512M ram. I don’t expect the results to be that much different here.

CPU: Do a simple bruteforce calculation

$ time echo $((42**4242424242))
0
real    0m3.547s
user    0m3.612s
sys     0m0.000s


$ time echo $((42**4242424242))
0
real    0m3.611s
user    0m3.612s
sys     0m0.000s


$ time echo $((42**4242424242))
0
real    0m3.552s
user    0m3.548s
sys     0m0.000s

CPU: read from /dev/zero and discard that information to /dev/null

$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 0.201953 s, 5.3 GB/s

real    0m0.214s
user    0m0.000s
sys     0m0.188s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 0.174076 s, 6.2 GB/s

real    0m0.185s
user    0m0.000s
sys     0m0.180s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 0.174931 s, 6.1 GB/s

real    0m0.185s
user    0m0.000s
sys     0m0.184s

CPU: read from /dev/zero, zip that data and discard after on

$ apt-get install bzip2
$ bzip2 --version 2>&1 | head -n 1
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 10.8888 s, 98.6 MB/s

real    0m10.995s
user    0m10.257s
sys     0m0.732s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 10.7271 s, 100 MB/s

real    0m10.857s
user    0m10.157s
sys     0m0.700s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 9.98964 s, 107 MB/s

real    0m10.089s
user    0m9.401s
sys     0m0.684s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 9.98811 s, 108 MB/s

real    0m10.090s
user    0m9.417s
sys     0m0.668s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 9.92397 s, 108 MB/s

real    0m10.026s
user    0m9.349s
sys     0m0.672s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 9.99608 s, 107 MB/s

real    0m10.100s
user    0m9.425s
sys     0m0.668s

DomainFactory JiffyBox 24h testsystem (March 2014 CloudLevel 1)

Get the Distribution name

$ cat /etc/issue
Debian GNU/Linux 7 \n \l

Retrieve Kernel Version, Name, Arch

$ uname -a
Linux jxxxxxx.servers.jiffybox.net 3.10.29-x86_64-jb1 #1 SMP Mon Feb 10 15:41:57 CET 2014 x86_64 GNU/Linux

Fetch CPU-Information

$ cat /proc/cpuinfo | head -n 19
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
stepping    : 4
microcode   : 0x416
cpu MHz     : 2099.998
cache size  : 15360 KB
fpu     : yes
fpu_exception   : yes
cpuid level : 10
wp      : yes
flags       : fpu tsc msr pae cx8 cmov pat clflush mmx fxsr sse sse2 ss syscall nx lm constant_tsc rep_good nopl pni pclmulqdq vmx ssse3 cx16 sse4_1 sse4_2 popcnt aes avx f16c rdrand hypervisor lahf_lm tpr_shadow vnmi flexpriority ept vpid
bogomips    : 4199.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

Count the number of CPUs available

$ cat /proc/cpuinfo | grep processor | wc -l
3

Retrieve detailed Memory info

$ cat /proc/meminfo 
MemTotal:        2044164 kB
MemFree:         1568132 kB
Buffers:           20484 kB
Cached:           381948 kB
SwapCached:            0 kB
Active:           248512 kB
Inactive:         162452 kB
Active(anon):       8556 kB
Inactive(anon):      136 kB
Active(file):     239956 kB
Inactive(file):   162316 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        524284 kB
SwapFree:         524284 kB
Dirty:               292 kB
Writeback:             0 kB
AnonPages:          8544 kB
Mapped:             7952 kB
Shmem:               156 kB
Slab:              39296 kB
SReclaimable:      30032 kB
SUnreclaim:         9264 kB
KernelStack:        1120 kB
PageTables:         1124 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1546364 kB
Committed_AS:      76460 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        6328 kB
VmallocChunk:   34359732031 kB
DirectMap4k:     2105344 kB
DirectMap2M:           0 kB

And basic memory overview

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1996        464       1531          0         20        372
-/+ buffers/cache:         71       1924
Swap:          511          0        511

What filesystems are mounted, what are their mountpoints and default options?

$ mount
/dev/root on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs (rw,relatime,size=1021040k,nr_inodes=255260,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204420k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=513680k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620)

Retrieve disksizes and mountpoints

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           25G  1.1G   22G   5% /
/dev/root        25G  1.1G   22G   5% /
devtmpfs        998M     0  998M   0% /dev
tmpfs           200M  152K  200M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           502M     0  502M   0% /run/shm

List the contents of /dev

$ ls /dev
autofs       nbd4            ptyc2  ptyp2  ptys2  ptyv2  ptyy2   shm     tty48  ttybb  ttyeb  ttyrb  ttyub  ttyxb
block        nbd5            ptyc3  ptyp3  ptys3  ptyv3  ptyy3   stderr  tty49  ttybc  ttyec  ttyrc  ttyuc  ttyxc
btrfs-control    nbd6            ptyc4  ptyp4  ptys4  ptyv4  ptyy4   stdin   tty5   ttybd  ttyed  ttyrd  ttyud  ttyxd
char         nbd7            ptyc5  ptyp5  ptys5  ptyv5  ptyy5   stdout  tty50  ttybe  ttyee  ttyre  ttyue  ttyxe
console      nbd8            ptyc6  ptyp6  ptys6  ptyv6  ptyy6   tty     tty51  ttybf  ttyef  ttyrf  ttyuf  ttyxf
core         nbd9            ptyc7  ptyp7  ptys7  ptyv7  ptyy7   tty0    tty52  ttyc0  ttyp0  ttys0  ttyv0  ttyy0
cpu_dma_latency  net             ptyc8  ptyp8  ptys8  ptyv8  ptyy8   tty1    tty53  ttyc1  ttyp1  ttys1  ttyv1  ttyy1
disk         network_latency     ptyc9  ptyp9  ptys9  ptyv9  ptyy9   tty10   tty54  ttyc2  ttyp2  ttys2  ttyv2  ttyy2
dlm-control  network_throughput  ptyca  ptypa  ptysa  ptyva  ptyya   tty11   tty55  ttyc3  ttyp3  ttys3  ttyv3  ttyy3
dlm-monitor  null            ptycb  ptypb  ptysb  ptyvb  ptyyb   tty12   tty56  ttyc4  ttyp4  ttys4  ttyv4  ttyy4
dlm_plock    ppp             ptycc  ptypc  ptysc  ptyvc  ptyyc   tty13   tty57  ttyc5  ttyp5  ttys5  ttyv5  ttyy5
fd       psaux           ptycd  ptypd  ptysd  ptyvd  ptyyd   tty14   tty58  ttyc6  ttyp6  ttys6  ttyv6  ttyy6
full         ptmx            ptyce  ptype  ptyse  ptyve  ptyye   tty15   tty59  ttyc7  ttyp7  ttys7  ttyv7  ttyy7
fuse         pts             ptycf  ptypf  ptysf  ptyvf  ptyyf   tty16   tty6   ttyc8  ttyp8  ttys8  ttyv8  ttyy8
hvc0         ptya0           ptyd0  ptyq0  ptyt0  ptyw0  ptyz0   tty17   tty60  ttyc9  ttyp9  ttys9  ttyv9  ttyy9
hvc1         ptya1           ptyd1  ptyq1  ptyt1  ptyw1  ptyz1   tty18   tty61  ttyca  ttypa  ttysa  ttyva  ttyya
hvc2         ptya2           ptyd2  ptyq2  ptyt2  ptyw2  ptyz2   tty19   tty62  ttycb  ttypb  ttysb  ttyvb  ttyyb
hvc3         ptya3           ptyd3  ptyq3  ptyt3  ptyw3  ptyz3   tty2    tty63  ttycc  ttypc  ttysc  ttyvc  ttyyc
hvc4         ptya4           ptyd4  ptyq4  ptyt4  ptyw4  ptyz4   tty20   tty7   ttycd  ttypd  ttysd  ttyvd  ttyyd
hvc5         ptya5           ptyd5  ptyq5  ptyt5  ptyw5  ptyz5   tty21   tty8   ttyce  ttype  ttyse  ttyve  ttyye
hvc6         ptya6           ptyd6  ptyq6  ptyt6  ptyw6  ptyz6   tty22   tty9   ttycf  ttypf  ttysf  ttyvf  ttyyf
hvc7         ptya7           ptyd7  ptyq7  ptyt7  ptyw7  ptyz7   tty23   ttya0  ttyd0  ttyq0  ttyt0  ttyw0  ttyz0
input        ptya8           ptyd8  ptyq8  ptyt8  ptyw8  ptyz8   tty24   ttya1  ttyd1  ttyq1  ttyt1  ttyw1  ttyz1
kmsg         ptya9           ptyd9  ptyq9  ptyt9  ptyw9  ptyz9   tty25   ttya2  ttyd2  ttyq2  ttyt2  ttyw2  ttyz2
log      ptyaa           ptyda  ptyqa  ptyta  ptywa  ptyza   tty26   ttya3  ttyd3  ttyq3  ttyt3  ttyw3  ttyz3
loop0        ptyab           ptydb  ptyqb  ptytb  ptywb  ptyzb   tty27   ttya4  ttyd4  ttyq4  ttyt4  ttyw4  ttyz4
loop1        ptyac           ptydc  ptyqc  ptytc  ptywc  ptyzc   tty28   ttya5  ttyd5  ttyq5  ttyt5  ttyw5  ttyz5
loop2        ptyad           ptydd  ptyqd  ptytd  ptywd  ptyzd   tty29   ttya6  ttyd6  ttyq6  ttyt6  ttyw6  ttyz6
loop3        ptyae           ptyde  ptyqe  ptyte  ptywe  ptyze   tty3    ttya7  ttyd7  ttyq7  ttyt7  ttyw7  ttyz7
loop4        ptyaf           ptydf  ptyqf  ptytf  ptywf  ptyzf   tty30   ttya8  ttyd8  ttyq8  ttyt8  ttyw8  ttyz8
loop5        ptyb0           ptye0  ptyr0  ptyu0  ptyx0  ram0    tty31   ttya9  ttyd9  ttyq9  ttyt9  ttyw9  ttyz9
loop6        ptyb1           ptye1  ptyr1  ptyu1  ptyx1  ram1    tty32   ttyaa  ttyda  ttyqa  ttyta  ttywa  ttyza
loop7        ptyb2           ptye2  ptyr2  ptyu2  ptyx2  ram10   tty33   ttyab  ttydb  ttyqb  ttytb  ttywb  ttyzb
loop-control     ptyb3           ptye3  ptyr3  ptyu3  ptyx3  ram11   tty34   ttyac  ttydc  ttyqc  ttytc  ttywc  ttyzc
MAKEDEV      ptyb4           ptye4  ptyr4  ptyu4  ptyx4  ram12   tty35   ttyad  ttydd  ttyqd  ttytd  ttywd  ttyzd
mapper       ptyb5           ptye5  ptyr5  ptyu5  ptyx5  ram13   tty36   ttyae  ttyde  ttyqe  ttyte  ttywe  ttyze
md0      ptyb6           ptye6  ptyr6  ptyu6  ptyx6  ram14   tty37   ttyaf  ttydf  ttyqf  ttytf  ttywf  ttyzf
mem      ptyb7           ptye7  ptyr7  ptyu7  ptyx7  ram15   tty38   ttyb0  ttye0  ttyr0  ttyu0  ttyx0  urandom
nbd0         ptyb8           ptye8  ptyr8  ptyu8  ptyx8  ram2    tty39   ttyb1  ttye1  ttyr1  ttyu1  ttyx1  vcs
nbd1         ptyb9           ptye9  ptyr9  ptyu9  ptyx9  ram3    tty4    ttyb2  ttye2  ttyr2  ttyu2  ttyx2  vcs1
nbd10        ptyba           ptyea  ptyra  ptyua  ptyxa  ram4    tty40   ttyb3  ttye3  ttyr3  ttyu3  ttyx3  vcsa
nbd11        ptybb           ptyeb  ptyrb  ptyub  ptyxb  ram5    tty41   ttyb4  ttye4  ttyr4  ttyu4  ttyx4  vcsa1
nbd12        ptybc           ptyec  ptyrc  ptyuc  ptyxc  ram6    tty42   ttyb5  ttye5  ttyr5  ttyu5  ttyx5  xconsole
nbd13        ptybd           ptyed  ptyrd  ptyud  ptyxd  ram7    tty43   ttyb6  ttye6  ttyr6  ttyu6  ttyx6  xen
nbd14        ptybe           ptyee  ptyre  ptyue  ptyxe  ram8    tty44   ttyb7  ttye7  ttyr7  ttyu7  ttyx7  xvda
nbd15        ptybf           ptyef  ptyrf  ptyuf  ptyxf  ram9    tty45   ttyb8  ttye8  ttyr8  ttyu8  ttyx8  xvdb
nbd2         ptyc0           ptyp0  ptys0  ptyv0  ptyy0  random  tty46   ttyb9  ttye9  ttyr9  ttyu9  ttyx9  zero
nbd3         ptyc1           ptyp1  ptys1  ptyv1  ptyy1  root    tty47   ttyba  ttyea  ttyra  ttyua  ttyxa

Fetch the fstab contents

$ cat /etc/fstab

# editor /etc/fstab

# /etc/fstab: static file system information.
#
# file system    mount point   type    options                  dump  pass
/dev/xvda   /       ext4    noatime         0   1
/dev/xvdb   none        swap    sw          0   0
proc        /proc       proc    defaults        0   0

How is the network-interface configuration

$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

What are the current ifconfig details?

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3e:01:5f:d1
          inet addr:xx.xx.xx.xx  Bcast:xx.xx.xx.xx  Mask:255.255.255.0
          inet6 addr: xxxxxxxxxxxxxxxxxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40200 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18148 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:56518770 (53.9 MiB)  TX bytes:1320466 (1.2 MiB)
          Interrupt:41 

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Make a simple sequential write test. 1GB file.

$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 1.5576 s, 689 MB/s

real    0m1.579s
user    0m0.004s
sys     0m1.570s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 1.57286 s, 683 MB/s

real    0m1.770s
user    0m0.000s
sys     0m1.704s


$ time dd if=/dev/zero of=/root/test.1g bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 1.60242 s, 670 MB/s

real    0m1.801s
user    0m0.003s
sys     0m1.725s

Make Disk Test using bonnie++. Use 256MB RAM and create a 2G file to be consistent over all hosts/servers and vServer constraints.

$ apt-get install bonnie
$ mkdir -p /home/croessler/bonnie-test
$ bonnie++ --get-me-the-version-please 2>&1 | tail -n 1
Version: 1.96

First run (2G Filesize, 256M Ram)

$ bonnie++ -d /home/croessler/bonnie-test/ -s 2g -r 256 -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
jxxxxx.servers.j 2G           550647  99 335114  72           933367  78 12831 178
Latency                       11533us    9464us             28805us   11938us
Version  1.96       ------Sequential Create------ --------Random Create--------
jxxxxx.servers.jiff -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1997  22 +++++ +++  2238  20  1975  23 +++++ +++  2196  22
Latency              3545us     414us   17127us    8306us      17us    8796us

First run results:

DomainFactory | 2G File + 256M Ram
550647  KByte/s     written sequentially
335114  KByte/s     read and then written and flushed to the disk
933367  KByte/s     sequential read
12831   seeks/s     random seeks

Sequential read over 930MB/s is due to the fact that the test-file fit into Ram. Nevertheless that 24h test-server is blazingly fast. I assume there is a writecache involved here and/or SSDs as Disk.

Second run (8G filesize, 2G Ram)

$bonnie++ -d /home/croessler/bonnie-test/ -s 8g -r 2g -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
jxxxxx.servers.j 8G           524482  99 324213  72           757685  81  9765 273
Latency                       24059us   24494us             29477us    8122us
Version  1.96       ------Sequential Create------ --------Random Create--------
jxxxxx.servers.jiff -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1935  23 +++++ +++  2171  23  2010  24 +++++ +++  2215  22
Latency              3509us     465us   12351us    1233us      50us   18831us

Second run results:

DomainFactory | 8G File + 2G Ram
524482  KByte/s     written sequentially
324213  KByte/s     read and then written and flushed to the disk
757685  KByte/s     sequential read
9765    seeks/s     random seeks

Sequential read is slower now as the File does not fit in RAM anymore. This 24h testserver still is fastest. I bet there is an SSD used.

Third run (16G filesize, 4G Ram)

$bonnie++ -d /home/croessler/bonnie-test/ -s 16g -r 4g -f -b -u root
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
jxxxxx.servers. 16G           504667  97 297856  67           746612  83  8627 261
Latency                       62824us   35660us             32911us    6486us
Version  1.96       ------Sequential Create------ --------Random Create--------
jxxxxx.servers.jiff -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  2049  23 +++++ +++  2223  22  2035  22 +++++ +++  2131  22
Latency              2701us     425us    1186us   20401us     113us    1260us

Third run results:

DomainFactory | 16G File + 4G Ram
504667  KByte/s     written sequentially
297856  KByte/s     read and then written and flushed to the disk
746612  KByte/s     sequential read
8627    seeks/s     random seeks

Again great performance! Writecache and perhaps SSDs.

CPU: Do a simple bruteforce calculation

$ time echo $((42**4242424242))
0
real    0m6.109s
user    0m6.105s
sys     0m0.000s


$ time echo $((42**4242424242))
0
real    0m6.100s
user    0m6.101s
sys     0m0.000s


$ time echo $((42**4242424242))
0
real    0m6.101s
user    0m6.102s
sys     0m0.000s

CPU: read from /dev/zero and discard that information to /dev/null

$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 0.402004 s, 2.7 GB/s

real    0m0.446s
user    0m0.002s
sys     0m0.424s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 0.424445 s, 2.5 GB/s

real    0m0.446s
user    0m0.002s
sys     0m0.443s


$ time dd if=/dev/zero of=/dev/null bs=256M count=4
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 0.416605 s, 2.6 GB/s

real    0m0.438s
user    0m0.000s
sys     0m0.438s

CPU: read from /dev/zero, zip that data and discard after on

$ apt-get install bzip2
$ bzip2 --version 2>&1 | head -n 1
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 17.8011 s, 60.3 MB/s

real    0m17.962s
user    0m15.928s
sys     0m5.599s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 17.8485 s, 60.2 MB/s

real    0m18.008s
user    0m15.919s
sys     0m5.910s


$ time dd if=/dev/zero bs=256M count=4 | bzip2 > /dev/null
4+0 records in
4+0 records out
1073741824 bytes (1.1 GB) copied, 17.6505 s, 60.8 MB/s

real    0m17.810s
user    0m15.918s
sys     0m5.241s