Jump to content
Sign in to follow this  
RDP1974

Did a real case Benchmark with Windows 2016 and Linux

Recommended Posts

hello,

 

I did a good benchmark to test the Delphi Linux compiler.

 

Resuming:

- server I9 8core with Debian 10 and MySQL8

- server I9 8core with ClearLinux and Apache

- server I9 8core with Windows 2016 and IIS10

- I7 client with apachebench

 

The webbroker app from Windows or ClearLinux connect using pooled firedac connections to the Debian MySQL server.

 

I don't want to bench different RDPMS, but only the layer IIS-ISAPI_webbroker and Apache-mod_webbroker.

 

Multiple queries are done against a set returning thousand of lines x ten columns; then the dataset is serialized to REST string using DMVC serializers.

 

The results are, using apachebench ab -n 1000 -c 10 -k -r

Default Delphi 64bit IIS 10:  143 reqs/sec

Default Delphi 64bit Linux Apache: 554 reqs/sec

Delphi 64bit IIS 10 with RDP Intel TBB and Intel IPP libs: 567 reqs/sec

(In my site you can download those libs)

 

With a small text output instead of DB both Windows and Linux sustains 10000 reqs/sec

 

So the Linux compiler is great performing and it's very reliable.

 

Under apache I had errors raising the number of concurrent users, this need a manual tuning in apache config files (IIS is autotuning).

 

Congratulations Emba!

 

-------
WINDOWS IIS ISAPI Default

Server Software:        Microsoft-IIS/10.0
Server Hostname:        /
Server Port:            80

Document Path:          /
Document Length:        162716 bytes

Concurrency Level:      100
Time taken for tests:   6.974 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    1000
Total transferred:      162952000 bytes
HTML transferred:       162716000 bytes
Requests per second:    143.38 [#/sec] (mean)
Time per request:       697.430 [ms] (mean)
Time per request:       6.974 [ms] (mean, across all concurrent requests)
Transfer rate:          22817.02 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0      12
Processing:    47  657 330.7    511    2396
Waiting:        8  655 331.0    508    2396
Total:         47  657 330.7    511    2396

Percentage of the requests served within a certain time (ms)
  50%    511
  66%    578
  75%    825
  80%    969
  90%   1203
  95%   1291
  98%   1500
  99%   1732
 100%   2396 (longest request)

-------
WINDOWS IIS ISAPI with Intel TBB IPP

Server Software:        Microsoft-IIS/10.0
Server Hostname:        /
Server Port:            80

Document Path:          /
Document Length:        162716 bytes

Concurrency Level:      100
Time taken for tests:   1.762 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    1000
Total transferred:      162952000 bytes
HTML transferred:       162716000 bytes
Requests per second:    567.56 [#/sec] (mean)
Time per request:       176.192 [ms] (mean)
Time per request:       1.762 [ms] (mean, across all concurrent requests)
Transfer rate:          90317.94 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.8      0       8
Processing:    23  159  64.5    148     387
Waiting:        8  157  64.7    145     383
Total:         23  159  64.3    148     387

Percentage of the requests served within a certain time (ms)
  50%    148
  66%    153
  75%    160
  80%    160
  90%    266
  95%    312
  98%    355
  99%    363
 100%    387 (longest request)

------
APACHE MOD CLEARLINUX

Server Software:        Apache/2.4.41
Server Hostname:        /
Server Port:            80

Document Path:          /
Document Length:        162778 bytes

Concurrency Level:      10
Time taken for tests:   1.804 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    996
Total transferred:      162992068 bytes
HTML transferred:       162778000 bytes
Requests per second:    554.27 [#/sec] (mean)
Time per request:       18.042 [ms] (mean)
Time per request:       1.804 [ms] (mean, across all concurrent requests)
Transfer rate:          88224.32 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:    11   18   3.0     17      35
Waiting:        9   16   2.9     16      33
Total:         11   18   3.0     17      35

Percentage of the requests served within a certain time (ms)
  50%     17
  66%     19
  75%     20
  80%     20
  90%     22
  95%     24
  98%     26
  99%     27
 100%     35 (longest request)

 

Edited by RDP1974
  • Thanks 2

Share this post


Link to post

:classic_smile:

ok, I was unable to tune apache for massive load testing, also changing the settings in conf files.

Seems that a limit of 150 concurrent users is set somewhere (or a syn flood protection probably).

Anyway the performance until limit reach is great.

 

We need that Embarcadero should add FAST-CGI to webbroker, so to bind Nginx, Lighttpd and other modern httpd non-blocking-IO (and largely scalable).

 

I ask this to quality central.

 

Let'see.

 

Kind regards.

  • Like 1

Share this post


Link to post

ab -n 1000 -c 10 -k -r

IIS Isapi + Intel TBB IPP = 496 r/s

ClearlLinux Apache = 552 r/s

But if I raise concurrent users, IIS 0 troubles, Apache start to produce some failed requests then stop with a not enough space.

(Need to be tuned)

I have not tested zlib, Windows users can use the Intel version, Linux users can use the Cloudflare fork.

OpenSSL easNI should be similar to Windows Crypto API, but again, I don't want test different OS, but only delphi code.

 

Lets' go with FastCGI support in webbroker!

Share this post


Link to post

later I'll publish a blog full of tips how to create highly scalable Indy, WebBroker, Soap, Firedac, Windows, Linux servers. A lot of utilities with Webbroker CRUD/REST helpers.

 

  • Like 3

Share this post


Link to post

btw. did also a benchmark of Indy based custom Httpd (Soap, Webbroker) and Linux version is 3x more performant (ClearLinux) than Windows patched with Intel Performance Libraries.

  • Like 1

Share this post


Link to post

ab failed requests over apache seems related to the use of it inside a virtual machine, on real hardware the problem doesn't exist

Share this post


Link to post

When you have DoS/DDoS protection in apache, for example with the usage of the qos_module, you will see that there will be a lot of failed requests in the output of the command. This happens, because the protection is indeed working and as mentioned, the ab tool basically floods your server with requests, so a lot of requests with the same IP will automatically be blocked by the apache module.

 

Indeed I see that the performance of Delphi apache module or Indy web application, with Firedac and data middleware manipulation, under Linux is brilliant. I wait for the compiler optimization to redo a benchmark.

Edited by RDP1974
  • Like 1

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×