Differences

This shows you the differences between two versions of the page.

Link to this comparison view

en:information_technology:dedicated_or_virtual_server [2017-10-19 03:23]
en:information_technology:dedicated_or_virtual_server [2019-10-24 22:39] (current)
Line 1: Line 1:
 +====== A dedicated server or a virtual server ======
 +
 +<WRAP info>​These are my notes on choosing between Hetzner'​s Dedicated Server EQ 4 and Virtual Private Server VQ 19. This was written in 2011 so this may not reflect the current similarities and differences between the two server types.</​WRAP>​
 +
 +===== Introduction =====
 +
 +I've been running [[https://​catza.net/​|catza.net]] on [[https://​www.hetzner.de/​en/​|Hetzner'​s]] dedicated server EQ 4 and have been very satisfied with the server and the service. EQ 4 offers plenty of CPU power, memory and disk and has a low price tag. I've had no issues. But there were several factors that made me thinking of downgrading to a VPS:  ​
 +  * Hetzner has started to offer some interesting VPS's (vServer). I was interested in VQ 19.
 +  * I used a VPS before EQ 4 and it worked fine so I generally have nothing against the idea of a VPS.
 +  * I checked my [[https://​catza.net/​|service'​s]] usage statistics against the specs of both EQ 4 and VQ 19 and it should run fine on both. The service is not a high traffic service and the technical architecture is lightweight including a multi-level caching scheme. It requires some RAM but with that should run smoothly even on a VPS.
 +  * My service provides no income but I pay all the fees. The monthly fee is a factor and a VPS generally costs less than a Dedi.        ​
 +  * Running a dedicated server when VPS is enough is a waste of natural resources and a form of consumerism.
 +
 +While reading this comparison please keep in mind that we are talking about cheap servers intended for small scale use. When I write things like //excellent performance//​ and //fast disk IO// they should be interpreted the server level in mind. The enterprise stuff is a different story. At my day job we have ordered a database server that can run disk IO at level of 4 gigabytes per second (approximately 40 gigabits per second). As you might quess the server is not Hetzner'​s EQ or VQ series.
 +
 +===== The features list =====
 +
 +Here are the main features found in EQ 4 and VQ 19 with my comments. Notice that the features listed reflect the Hetzner'​s offerings as of 2011-07-24. ​
 +
 +^ Feature ^ Hetzner EQ 4 ^ Hetzner VQ 19 ^ My comments ^
 +| Price per month | 49 euros (has a setup fee) | 19 euros (no setup fee) | Both are cheap compared to the specs and Hetzner'​s good reputation. But this whole comparison is really not fair since EQ costs 2,5 times the VQ. VQ's lower price is very tempting. |
 +| Traffic included (if exceeded the network connection is switched to a slower one) | 10 TB | 4 TB | 10 TB is much more than I need and it is very unlikely that I would hit the 4 TB limit. So this is not a deciding factor for me. |
 +| RAM | 8 GB | 2 GB | So both are fine for me. 8 GB is a huge space and due to disk buffering EQ 4 mostly servers my content from RAM. 2 GB is enough to run [[https://​catza.net/​|catza.net]] even when on a high load. |
 +| Disk space | 750 GB software mirrored | 80 GB on some sort of RAID | 80 GB is enough to fit the system, the service, the content and a couple of copies of them. Both have a some sort for RAID protection. |  ​
 +| Backup space | 100 GB included | none | This is a strong point to choose EQ 4 instead of VQ 19. I have lot of photo content and it cannot be uploaded from home (limited uplink) or when on travel (3G) in a reasonable time. With VQ 19 I would need to use Amazon'​s S3 or similar internet storage solution and this adds to the price tag. |
 +| CPU | Intel i7-920 4 cores | Single virtual core | Intel i7 makes [[https://​catza.net/​|catza.net]] fly. Single virtual core is sufficient since it is a guaranteed share (not dependent on other VPS's that run on the same host). |  ​
 +| Management | Full control. Feature-rich management robot including monitoring and rescue features. Multiple OS images available. | Full control. Feature-rich management robot including monitoring and rescue features. Multiple OS images available. | The services offer similar management features and freedom of configuration. |
 +| The hardware | Consumer-grade components. | Consumer-grade components. | Nothing special here. With these price tags do not expect to get enterprise class hardware. For us not running an enterprise consumer-grade hardware gives the best performance compared to the price. I'd bet that in practice four VQ 19's run on a single EQ class server. |
 +
 +===== The test results =====
 +
 +I had a day to spare so I ordered VQ 19. The setup process seems to be automatic since I ordered it the middle of the night during a weekend and during a holiday season and it was up and running in 15 minutes. Then I installed Debian 64 bit minimal, configured the system and shipped the whole [[https://​catza.net|catza.net]] from EQ's backup space.
 +
 +The test results are pretty much as I expected. VQ 19 has an excellent CPU performance and an adequate IO performance. EQ of course beats VQ in numbers. But in practice considering my application I'd say the difference in small.
 +
 +My application'​s unit tests complete in 153 wall clock seconds with EQ 4 and in 193 wall clock seconds with VQ 19.
 +
 +==== Disk performance ====
 +
 +Disk performance testing with dd is a crude method. Yes it gives some performance figures but the load don't match a typical web application.
 +
 +Using big block sizes show rather weak results for VQ 19. I'd say that these are just benchmark numbers. The tests with smaller block sizes are closer to real life and there VQ 19 performs adequately. ​
 +
 +My application should run fine on VQ 19. EQ 4 offers more IO power. But if you have something really IO demanding maybe the standard EQ disk system is not enough for you.
 +
 +^ the test ^ EQ 4 ^ VQ 19 ^
 +| nice dd if=/​dev/​zero of=test bs=2M count=2000 | 4194304000 bytes (4.2 GB) copied, 30.1258 s, 139 MB/s | 4194304000 bytes (4.2 GB) copied, 241.968 s, 17.3 MB/s |
 +| dd if=/​dev/​zero of=test bs=2M count=2000 | 4194304000 bytes (4.2 GB) copied, 32.5151 s, 129 MB/s | 4194304000 bytes (4.2 GB) copied, 298.434 s, 14.1 MB/s |
 +| dd if=/​dev/​zero of=test bs=385K count=7000 | 2759680000 bytes (2.8 GB) copied, 13.7199 s, 201 MB/s | 2759680000 bytes (2.8 GB) copied, 149.822 s, 18.4 MB/s |
 +| dd if=/​dev/​zero of=test bs=64k count=16k conv=fdatasync | 1073741824 bytes (1.1 GB) copied, 11.4975 s, 93.4 MB/s | 1073741824 bytes (1.1 GB) copied, 30.2424 s, 35.5 MB/s |
 +| dd if=/​dev/​zero of=test bs=32k count=32k | 1073741824 bytes (1.1 GB) copied, ​ 1.06718 s, 1.0 GB/s | 1073741824 bytes (1.1 GB) copied, 19.782 s, 54.3 MB/s | 
 +| hdparm -t on root | 332 MB in  3.00 seconds = 110.54 MB/sec | 76 MB in  3.41 seconds =  22.31 MB/sec |
 +
 +==== Unix Bench ====
 +
 +EQ 4 is CPU-vice a high performance server. VQ 19 shows excellent results too matching the EQ's single core results.
 +
 +=== EQ 4 ===
 +
 +<​code>​
 +========================================================================
 +   BYTE UNIX Benchmarks (Version 5.1.3)
 +
 +   ​System:​ Catz: GNU/Linux
 +   OS: GNU/Linux -- 2.6.32-5-amd64 -- #1 SMP Tue Jun 14 09:42:28 UTC 2011
 +   ​Machine:​ x86_64 (unknown)
 +   ​Language:​ en_US.utf8 (charmap="​UTF-8",​ collate="​UTF-8"​)
 +   CPU 0: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.9 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   CPU 1: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.3 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   CPU 2: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.3 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   CPU 3: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.3 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   CPU 4: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.3 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   CPU 5: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.3 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   CPU 6: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.3 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   CPU 7: Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz (5346.3 bogomips)
 +          Hyper-Threading,​ x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET,​ Intel virtualization
 +   ​12:​47:​28 up 19 days,  9:58,  2 users, ​ load average: 0.00, 0.04, 0.08; runlevel
 +
 +------------------------------------------------------------------------
 +Benchmark Run: Sun Jul 24 2011 12:47:28 - 13:15:49
 +8 CPUs in system; running 1 parallel copy of tests
 +
 +Dhrystone 2 using register variables ​      ​27380319.9 lps   (10.0 s, 7 samples)
 +Double-Precision Whetstone ​                    ​3514.0 MWIPS (10.0 s, 7 samples)
 +Execl Throughput ​                              ​2350.5 lps   (29.8 s, 2 samples)
 +File Copy 1024 bufsize 2000 maxblocks ​       997464.6 KBps  (30.0 s, 2 samples)
 +File Copy 256 bufsize 500 maxblocks ​         275827.6 KBps  (30.0 s, 2 samples)
 +File Copy 4096 bufsize 8000 maxblocks ​      ​2008339.0 KBps  (30.0 s, 2 samples)
 +Pipe Throughput ​                            ​2389575.4 lps   (10.0 s, 7 samples)
 +Pipe-based Context Switching ​                ​111529.9 lps   (10.0 s, 7 samples)
 +Process Creation ​                              ​9869.8 lps   (30.0 s, 2 samples)
 +Shell Scripts (1 concurrent) ​                  ​5207.8 lpm   (60.0 s, 2 samples)
 +Shell Scripts (8 concurrent) ​                  ​3838.8 lpm   (60.0 s, 2 samples)
 +System Call Overhead ​                       4065280.4 lps   (10.0 s, 7 samples)
 +
 +System Benchmarks Index Values ​              ​BASELINE ​      ​RESULT ​   INDEX
 +Dhrystone 2 using register variables ​        ​116700.0 ​  ​27380319.9 ​  ​2346.2
 +Double-Precision Whetstone ​                      ​55.0 ​      ​3514.0 ​   638.9
 +Execl Throughput ​                                ​43.0 ​      ​2350.5 ​   546.6
 +File Copy 1024 bufsize 2000 maxblocks ​         3960.0 ​    ​997464.6 ​  ​2518.8
 +File Copy 256 bufsize 500 maxblocks ​           1655.0 ​    ​275827.6 ​  ​1666.6
 +File Copy 4096 bufsize 8000 maxblocks ​         5800.0 ​   2008339.0 ​  ​3462.7
 +Pipe Throughput ​                              ​12440.0 ​   2389575.4 ​  ​1920.9
 +Pipe-based Context Switching ​                  ​4000.0 ​    ​111529.9 ​   278.8
 +Process Creation ​                               126.0       ​9869.8 ​   783.3
 +Shell Scripts (1 concurrent) ​                    ​42.4 ​      ​5207.8 ​  ​1228.3
 +Shell Scripts (8 concurrent) ​                     6.0       ​3838.8 ​  ​6397.9
 +System Call Overhead ​                         15000.0 ​   4065280.4 ​  ​2710.2
 +                                                                   ​========
 +System Benchmarks Index Score                                        1475.4
 +
 +------------------------------------------------------------------------
 +Benchmark Run: Sun Jul 24 2011 13:15:49 - 13:44:22
 +8 CPUs in system; running 8 parallel copies of tests
 +
 +Dhrystone 2 using register variables ​     118476442.5 lps   (10.0 s, 7 samples)
 +Double-Precision Whetstone ​                   22621.1 MWIPS (9.9 s, 7 samples)
 +Execl Throughput ​                             25881.9 lps   (29.8 s, 2 samples)
 +File Copy 1024 bufsize 2000 maxblocks ​       770590.3 KBps  (30.0 s, 2 samples)
 +File Copy 256 bufsize 500 maxblocks ​         207984.5 KBps  (30.0 s, 2 samples)
 +File Copy 4096 bufsize 8000 maxblocks ​      ​1917802.5 KBps  (30.0 s, 2 samples)
 +Pipe Throughput ​                           10128644.1 lps   (10.0 s, 7 samples)
 +Pipe-based Context Switching ​               2158629.6 lps   (10.0 s, 7 samples)
 +Process Creation ​                             78972.4 lps   (30.0 s, 2 samples)
 +Shell Scripts (1 concurrent) ​                 37648.5 lpm   (60.0 s, 2 samples)
 +Shell Scripts (8 concurrent) ​                  ​4931.6 lpm   (60.0 s, 2 samples)
 +System Call Overhead ​                      ​13513932.8 lps   (10.0 s, 7 samples)
 +
 +System Benchmarks Index Values ​              ​BASELINE ​      ​RESULT ​   INDEX
 +Dhrystone 2 using register variables ​        ​116700.0 ​ 118476442.5 ​ 10152.2
 +Double-Precision Whetstone ​                      ​55.0 ​     22621.1 ​  ​4112.9
 +Execl Throughput ​                                ​43.0 ​     25881.9 ​  ​6019.0
 +File Copy 1024 bufsize 2000 maxblocks ​         3960.0 ​    ​770590.3 ​  ​1945.9
 +File Copy 256 bufsize 500 maxblocks ​           1655.0 ​    ​207984.5 ​  ​1256.7
 +File Copy 4096 bufsize 8000 maxblocks ​         5800.0 ​   1917802.5 ​  ​3306.6
 +Pipe Throughput ​                              ​12440.0 ​  ​10128644.1 ​  ​8142.0
 +Pipe-based Context Switching ​                  ​4000.0 ​   2158629.6 ​  ​5396.6
 +Process Creation ​                               126.0      78972.4 ​  ​6267.7
 +Shell Scripts (1 concurrent) ​                    ​42.4 ​     37648.5 ​  ​8879.4
 +Shell Scripts (8 concurrent) ​                     6.0       ​4931.6 ​  ​8219.3
 +System Call Overhead ​                         15000.0 ​  ​13513932.8 ​  ​9009.3
 +                                                                   ​========
 +System Benchmarks Index Score                                        5173.9
 +</​code>​
 +
 +=== VQ 19 ===
 +
 +<​code>​
 +========================================================================
 +   BYTE UNIX Benchmarks (Version 5.1.3)
 +
 +   ​System:​ catz: GNU/Linux
 +   OS: GNU/Linux -- 2.6.32-5-amd64 -- #1 SMP Tue Jun 14 09:42:28 UTC 2011
 +   ​Machine:​ x86_64 (unknown)
 +   ​Language:​ en_US.utf8 (charmap="​UTF-8",​ collate="​UTF-8"​)
 +   CPU 0: QEMU Virtual CPU version 0.12.3 (5614.1 bogomips)
 +          x86-64, MMX, Physical Address Ext, SYSENTER/​SYSEXIT,​ SYSCALL/​SYSRET
 +   ​12:​49:​25 up  9:35,  2 users, ​ load average: 0.00, 0.07, 0.63; runlevel
 +
 +------------------------------------------------------------------------
 +Benchmark Run: Sun Jul 24 2011 12:49:25 - 13:17:39
 +1 CPU in system; running 1 parallel copy of tests
 +
 +Dhrystone 2 using register variables ​      ​24018510.7 lps   (10.0 s, 7 samples)
 +Double-Precision Whetstone ​                    ​3249.5 MWIPS (9.6 s, 7 samples)
 +Execl Throughput ​                              ​3626.4 lps   (30.0 s, 2 samples)
 +File Copy 1024 bufsize 2000 maxblocks ​       869488.0 KBps  (30.0 s, 2 samples)
 +File Copy 256 bufsize 500 maxblocks ​         281563.1 KBps  (30.0 s, 2 samples)
 +File Copy 4096 bufsize 8000 maxblocks ​      ​1935461.3 KBps  (30.0 s, 2 samples)
 +Pipe Throughput ​                            ​2321830.6 lps   (10.0 s, 7 samples)
 +Pipe-based Context Switching ​                ​402036.6 lps   (10.0 s, 7 samples)
 +Process Creation ​                             14754.2 lps   (30.0 s, 2 samples)
 +Shell Scripts (1 concurrent) ​                  ​6023.6 lpm   (60.0 s, 2 samples)
 +Shell Scripts (8 concurrent) ​                   753.1 lpm   (60.0 s, 2 samples)
 +System Call Overhead ​                       3682241.3 lps   (10.0 s, 7 samples)
 +
 +System Benchmarks Index Values ​              ​BASELINE ​      ​RESULT ​   INDEX
 +Dhrystone 2 using register variables ​        ​116700.0 ​  ​24018510.7 ​  ​2058.1
 +Double-Precision Whetstone ​                      ​55.0 ​      ​3249.5 ​   590.8
 +Execl Throughput ​                                ​43.0 ​      ​3626.4 ​   843.3
 +File Copy 1024 bufsize 2000 maxblocks ​         3960.0 ​    ​869488.0 ​  ​2195.7
 +File Copy 256 bufsize 500 maxblocks ​           1655.0 ​    ​281563.1 ​  ​1701.3
 +File Copy 4096 bufsize 8000 maxblocks ​         5800.0 ​   1935461.3 ​  ​3337.0
 +Pipe Throughput ​                              ​12440.0 ​   2321830.6 ​  ​1866.4
 +Pipe-based Context Switching ​                  ​4000.0 ​    ​402036.6 ​  ​1005.1
 +Process Creation ​                               126.0      14754.2 ​  ​1171.0
 +Shell Scripts (1 concurrent) ​                    ​42.4 ​      ​6023.6 ​  ​1420.7
 +Shell Scripts (8 concurrent) ​                     6.0        753.1   ​1255.2
 +System Call Overhead ​                         15000.0 ​   3682241.3 ​  ​2454.8
 +                                                                   ​========
 +System Benchmarks Index Score                                        1493.3
 +</​code>​
 +
 +==== Web access ====
 +
 +Apache ab was used with a typical [[https://​catza.net/​|catza.net]] page that is of dynamic nature but due to multi-level caching is served from Memcached without any disk IO.
 +
 +With my application both servers scale very well. EQ 4's scalability seems astronomical. A scenario causing lots of disk IO (especially writes) would be interesting. It should widen the performance gap between EQ 4 and VQ 19 seen in these results.
 +  ​
 +=== EQ 4 ===
 +
 +From a remote host in Finland: ab -n 300 -c 10 ...
 +
 +<​code>​
 +Concurrency Level: ​     10
 +Time taken for tests: ​  ​18.275 seconds
 +Complete requests: ​     300
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     4450500 bytes
 +HTML transferred: ​      ​4350900 bytes
 +Requests per second: ​   16.42 [#/sec] (mean)
 +Time per request: ​      ​609.168 [ms] (mean)
 +Time per request: ​      ​60.917 [ms] (mean, across all concurrent requests)
 +Transfer rate:          237.82 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​      ​55 ​  ​60 ​  ​3.8 ​    ​59 ​     84
 +Processing: ​  ​178 ​ 536  49.7    541     581
 +Waiting: ​      ​60 ​ 292 130.7    296     562
 +Total: ​       240  596  49.6    601     642
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%    601
 +  66%    607
 +  75%    611
 +  80%    614
 +  90%    618
 +  95%    623
 +  98%    634
 +  99%    637
 + ​100% ​   642 (longest request)
 +</​code>​
 +
 +From another Hetzner server: ab -n 1000 -c 10 ...
 +
 +<​code>​
 +Concurrency Level: ​     10
 +Time taken for tests: ​  1.856 seconds
 +Complete requests: ​     1000
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     14786000 bytes
 +HTML transferred: ​      ​14454000 bytes
 +Requests per second: ​   538.73 [#/sec] (mean)
 +Time per request: ​      ​18.562 [ms] (mean)
 +Time per request: ​      1.856 [ms] (mean, across all concurrent requests)
 +Transfer rate:          7778.96 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    3   ​1.7 ​     3      20
 +Processing: ​    ​4 ​  ​15 ​  ​5.3 ​    ​16 ​     33
 +Waiting: ​       0   ​11 ​  ​5.0 ​    ​10 ​     31
 +Total: ​         5   ​18 ​  ​4.8 ​    ​18 ​     35
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%     18
 +  66%     20
 +  75%     22
 +  80%     22
 +  90%     24
 +  95%     26
 +  98%     28
 +  99%     30
 + ​100% ​    35 (longest request)
 +</​code>​
 +
 +From another Hetzner server: ab -n 2000 -c 20 ...
 +
 +<​code>​
 +Concurrency Level: ​     20
 +Time taken for tests: ​  3.187 seconds
 +Complete requests: ​     2000
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     29572000 bytes
 +HTML transferred: ​      ​28908000 bytes
 +Requests per second: ​   627.59 [#/sec] (mean)
 +Time per request: ​      ​31.868 [ms] (mean)
 +Time per request: ​      1.593 [ms] (mean, across all concurrent requests)
 +Transfer rate:          9062.01 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    6   ​3.9 ​     6      26
 +Processing: ​    ​6 ​  ​25 ​  ​9.6 ​    ​24 ​     72
 +Waiting: ​       2   ​16 ​  ​8.0 ​    ​14 ​     69
 +Total: ​        ​12 ​  ​31 ​  ​8.3 ​    ​31 ​     78
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%     31
 +  66%     34
 +  75%     36
 +  80%     37
 +  90%     40
 +  95%     43
 +  98%     48
 +  99%     73
 + ​100% ​    78 (longest request)
 +</​code>​
 +
 +From another Hetzner server: ab -n 2000 -c 100 ...
 +
 +<​code>​
 +Concurrency Level: ​     100
 +Time taken for tests: ​  3.135 seconds
 +Complete requests: ​     2000
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     29572000 bytes
 +HTML transferred: ​      ​28908000 bytes
 +Requests per second: ​   637.86 [#/sec] (mean)
 +Time per request: ​      ​156.773 [ms] (mean)
 +Time per request: ​      1.568 [ms] (mean, across all concurrent requests)
 +Transfer rate:          9210.42 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0   ​34 ​ 15.8     ​33 ​     87
 +Processing: ​   10   ​91 ​ 39.3     ​89 ​    341
 +Waiting: ​       7   ​51 ​ 26.6     ​48 ​    266
 +Total: ​        ​29 ​ 125  44.1    127     390
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%    127
 +  66%    141
 +  75%    150
 +  80%    154
 +  90%    168
 +  95%    179
 +  98%    216
 +  99%    301
 + ​100% ​   390 (longest request)
 +</​code>​
 +
 +From the same server: ab -n 2000 -c 100 ...
 +
 +<​code>​
 +Concurrency Level: ​     100
 +Time taken for tests: ​  1.242 seconds
 +Complete requests: ​     2000
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     29572000 bytes
 +HTML transferred: ​      ​28908000 bytes
 +Requests per second: ​   1609.87 [#/sec] (mean)
 +Time per request: ​      ​62.117 [ms] (mean)
 +Time per request: ​      0.621 [ms] (mean, across all concurrent requests)
 +Transfer rate:          23245.69 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    0   ​0.8 ​     0       6
 +Processing: ​    ​7 ​  ​60 ​  ​8.8 ​    ​61 ​     80
 +Waiting: ​       7   ​60 ​  ​8.8 ​    ​60 ​     80
 +Total: ​        ​12 ​  ​61 ​  ​8.2 ​    ​61 ​     80
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%     61
 +  66%     62
 +  75%     64
 +  80%     64
 +  90%     68
 +  95%     72
 +  98%     75
 +  99%     78
 + ​100% ​    80 (longest request)
 +</​code>​
 +
 +From the same server: ab -n 50000 -c 500 ...
 +
 +<​code>​
 +Concurrency Level: ​     500
 +Time taken for tests: ​  ​43.283 seconds
 +Complete requests: ​     50000
 +Failed requests: ​       793
 +   ​(Connect:​ 0, Receive: 0, Length: 793, Exceptions: 0)
 +Write errors: ​          0
 +Non-2xx responses: ​     793
 +Total transferred: ​     727832890 bytes
 +HTML transferred: ​      ​711377326 bytes
 +Requests per second: ​   1155.18 [#/sec] (mean)
 +Time per request: ​      ​432.835 [ms] (mean)
 +Time per request: ​      0.866 [ms] (mean, across all concurrent requests)
 +Transfer rate:          16421.37 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    0   ​1.2 ​     0      16
 +Processing: ​    ​9 ​ 316 1466.0 ​    ​80 ​  33017
 +Waiting: ​       9  316 1465.9 ​    ​80 ​  33017
 +Total: ​        ​25 ​ 317 1466.4 ​    ​80 ​  33027
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%     80
 +  66%     84
 +  75%     87
 +  80%     89
 +  90%    103
 +  95%    123
 +  98%   5000
 +  99%   5008
 + ​100% ​ 33027 (longest request)
 +
 +</​code>​
 +
 +=== VQ 19 ===
 +
 +From a remote host in Finland: ab -n 300 -c 10 ... 
 +
 +<​code>​
 +Concurrency Level: ​     10
 +Time taken for tests: ​  ​19.739 seconds
 +Complete requests: ​     300
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     4450500 bytes
 +HTML transferred: ​      ​4350900 bytes
 +Requests per second: ​   15.20 [#/sec] (mean)
 +Time per request: ​      ​657.971 [ms] (mean)
 +Time per request: ​      ​65.797 [ms] (mean, across all concurrent requests)
 +Transfer rate:          220.18 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​      ​56 ​  ​65 ​ 13.3     ​61 ​    161
 +Processing: ​  ​176 ​ 579  93.3    562     975
 +Waiting: ​      ​61 ​ 326 153.6    310     909
 +Total: ​       235  643  99.5    626    1036
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%    626
 +  66%    645
 +  75%    654
 +  80%    657
 +  90%    693
 +  95%    860
 +  98%    975
 +  99%   1026
 + ​100% ​  1036 (longest request)
 +</​code>​
 +
 +From another Hetzner server: ab -n 1000 -c 10 ...
 +
 +<​code>​
 +Concurrency Level: ​     10
 +Time taken for tests: ​  ​19.916 seconds
 +Complete requests: ​     1000
 +Failed requests: ​       4
 +   ​(Connect:​ 0, Receive: 0, Length: 4, Exceptions: 0)
 +Write errors: ​          0
 +Non-2xx responses: ​     1
 +Total transferred: ​     14773515 bytes
 +HTML transferred: ​      ​14441702 bytes
 +Requests per second: ​   50.21 [#/sec] (mean)
 +Time per request: ​      ​199.161 [ms] (mean)
 +Time per request: ​      ​19.916 [ms] (mean, across all concurrent requests)
 +Transfer rate:          724.40 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    1   ​0.6 ​     0       9
 +Processing: ​    ​4 ​ 199 1408.9 ​    ​45 ​  14391
 +Waiting: ​       3  188 1408.7 ​    ​35 ​  14389
 +Total: ​         5  199 1408.9 ​    ​46 ​  14391
 +WARNING: The median and mean for the initial connection time are not within a normal deviation
 +        These results are probably not that reliable.
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%     46
 +  66%     60
 +  75%     71
 +  80%     81
 +  90%    111
 +  95%    140
 +  98%    248
 +  99%  13440
 + ​100% ​ 14391 (longest request)
 +</​code>​
 +
 +From another Hetzner server: ab -n 2000 -c 20 ...
 +
 +<​code>​
 +Concurrency Level: ​     20
 +Time taken for tests: ​  9.023 seconds
 +Complete requests: ​     2000
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     29576000 bytes
 +HTML transferred: ​      ​28912000 bytes
 +Requests per second: ​   221.66 [#/sec] (mean)
 +Time per request: ​      ​90.227 [ms] (mean)
 +Time per request: ​      4.511 [ms] (mean, across all concurrent requests)
 +Transfer rate:          3201.12 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    1   ​0.5 ​     0      19
 +Processing: ​    ​4 ​  ​89 ​ 48.6     ​85 ​    262
 +Waiting: ​       3   ​67 ​ 38.4     ​62 ​    227
 +Total: ​         5   ​90 ​ 48.7     ​86 ​    262
 +WARNING: The median and mean for the initial connection time are not within a normal deviation
 +        These results are probably not that reliable.
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%     86
 +  66%    106
 +  75%    121
 +  80%    131
 +  90%    157
 +  95%    180
 +  98%    203
 +  99%    218
 + ​100% ​   262 (longest request)
 +</​code>​
 +
 +From another Hetzner server: ab -n 2000 -c 100 ...
 +
 +<​code>​
 +Concurrency Level: ​     100
 +Time taken for tests: ​  9.621 seconds
 +Complete requests: ​     2000
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     29576000 bytes
 +HTML transferred: ​      ​28912000 bytes
 +Requests per second: ​   207.87 [#/sec] (mean)
 +Time per request: ​      ​481.065 [ms] (mean)
 +Time per request: ​      4.811 [ms] (mean, across all concurrent requests)
 +Transfer rate:          3001.97 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0   55 399.0      0    3004
 +Processing: ​   20  422 224.3    374    1386
 +Waiting: ​      ​12 ​ 315 165.0    276    1120
 +Total: ​        ​20 ​ 477 524.8    376    4389
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%    376
 +  66%    458
 +  75%    526
 +  80%    600
 +  90%    726
 +  95%    830
 +  98%   1263
 +  99%   3994
 + ​100% ​  4389 (longest request)
 +</​code>​
 +
 +From the same server: ab -n 2000 -c 100 ...
 +
 +<​code>​
 +Concurrency Level: ​     100
 +Time taken for tests: ​  9.145 seconds
 +Complete requests: ​     2000
 +Failed requests: ​       0
 +Write errors: ​          0
 +Total transferred: ​     29576000 bytes
 +HTML transferred: ​      ​28912000 bytes
 +Requests per second: ​   218.70 [#/sec] (mean)
 +Time per request: ​      ​457.243 [ms] (mean)
 +Time per request: ​      4.572 [ms] (mean, across all concurrent requests)
 +Transfer rate:          3158.37 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    3  13.6      0     339
 +Processing: ​   18  447 283.2    344    1494
 +Waiting: ​       3  444 283.0    341    1494
 +Total: ​        ​55 ​ 451 281.3    345    1494
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%    345
 +  66%    378
 +  75%    468
 +  80%    548
 +  90%    827
 +  95%   1356
 +  98%   1434
 +  99%   1441
 + ​100% ​  1494 (longest request)
 +</​code>​
 +
 +From the same server: ab -n 50000 -c 500 ...
 +
 +<​code>​
 +Concurrency Level: ​     500
 +Time taken for tests: ​  ​154.968 seconds
 +Complete requests: ​     50000
 +Failed requests: ​       3040
 +   ​(Connect:​ 0, Receive: 0, Length: 3040, Exceptions: 0)
 +Write errors: ​          0
 +Non-2xx responses: ​     3040
 +Total transferred: ​     695434200 bytes
 +HTML transferred: ​      ​679387920 bytes
 +Requests per second: ​   322.65 [#/sec] (mean)
 +Time per request: ​      ​1549.676 [ms] (mean)
 +Time per request: ​      3.099 [ms] (mean, across all concurrent requests)
 +Transfer rate:          4382.43 [Kbytes/​sec] received
 +
 +Connection Times (ms)
 +              min  mean[+/-sd] median ​  max
 +Connect: ​       0    1   ​9.3 ​     0     120
 +Processing: ​    0 1482 2226.2 ​   439   33053
 +Waiting: ​       0 1479 2225.5 ​   436   33053
 +Total: ​         0 1483 2229.7 ​   439   33157
 +
 +Percentage of the requests served within a certain time (ms)
 +  50%    439
 +  66%    537
 +  75%   3362
 +  80%   3406
 +  90%   3575
 +  95%   5002
 +  98%   6579
 +  99%   9209
 + ​100% ​ 33157 (longest request)
 +</​code>​
 +
 +===== The decision ====
 +
 +VQ 19 appears to be very suitable to run [[https://​catza.net/​|catza.net]] without performance issues. I would save 30 euros per month if switching to it. Still I decided to keep EQ 4 and let VQ 19 go for several reasons:
 +   * VQ 19 is a single core server. While the core performs excellent the single core solution has its potential to become a bottleneck. When I run unit tests the CPU is fully consumed. When I check database integrity the CPU is fully consumed. When I make a backup the CPU is fully consumed (encryption,​ compression). If a Linux process hangs the CPU is fully consumed. These situations have an immediate effect on the application performance. With EQ 4 I can run my tasks, have a hung process and there are still two cores left to serve the web users. I sleep my nights better with multiple cores. I wonder if Hetzner could update the VQ's to have one quaranteed core, four burstable cores? ​
 +   * Since the application is lightweight VQ 19 could handle all the load [[https://​catza.net/​|catza.net]] is due to face. But EQ 4 offers more headroom for unforeseen situations, extreme peak times and future expansion. I serve photos and the photos get [[https://​en.wikipedia.org/​wiki/​Inline_linking|inline linked]] around the web. I don't mind since I have plenty of headroom for that.
 +   * VQ 19 has no backup space. EQ 4 has and it works fine (have tried both making backups and restoring them). External backup space adds to VQ 19's price.
 +   * For a casual web service admin VQ 19 is a Mercedes Benz. EQ 4 is a Rolls-Royce.
 +
 +{{tag>IT 2012 Catz catza.net Hetzner server dedicated_server virtual_server benchmark server_benchmark}}