Differences

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


Next revision
en:information_technology:dedicated_or_virtual_server [2020-05-09 13:13] – external edit 127.0.0.1
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:       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:       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:       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:      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:      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:       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}}