Hei,

I did some tests with the tool. Always nice to see someone digging into 
benchmarks.

First of all, I can confirm that the --noreuse option makes things very slow. 
But, as I found out, it means you use a new connection for each request. This 
*should* be very slow as compared to reusing the connection. Setting up a new 
connection is not only work for the TCP stack, but the server needs to allocate 
and initialize new resources as well.

Servers are optimized for handling many requests on one connection. And HTTP/2 
is optimized for handling many in parallel. Which is quite visible in:

./ahsbt --tcpnagle --connections=1 --threads=1 --requests=N --http=2 
http://test.example.org:12345/index.html

ahsbt, HTTP/1.1
N       Measured total time
10000:  1.14 sec
15000:  1.76 sec
20000:  2.27 sec 
30000:  3.49 sec
40000:  4.53 sec
50000:  5.71 sec

ahsbt, HTTP/2
N       Measured total time
10000:   1.70 sec - 2.14 sec
15000:   4.55 sec                       
20000:   8.44 sec
30000:  12.78 sec - 22.02 sec
40000:  22.32 sec
50000:  28.68 sec - 28.95 sec

This makes the HTTP/2 implementation look really slow. However, what ahsbt 
seems to do is to only every have a single request outstanding. In h2load there 
is parameter -m for the number of concurrent requests. This defaults to 1 and 
indeed, this gives similar (and worse) numbers:

The HTTP/2 numbers are 

h2load -m 1, HTTP/2
10000:  2.11 sec
15000:  4.30 sec
20000:  8.17 sec
30000:  9.96 sec - 21.52 sec
40000: 42.05 - 42,16 sec
50000: 68.95 sec

(So, I should probably have a look at this.) However, when you increase this, 
you see the power of parallel requests:

h2load -m 100, HTTP/2
10000:  0.37 sec
15000:  0.61 sec
20000:  0.79 sec
30000:  1.10 sec
40000:  1.48 sec
50000:  1.85 sec

Hope this helps. If I can test particular variations for you, please let me 
know.

Cheers, Stefan



> Am 27.02.2019 um 12:50 schrieb Aleksandar Lazic via curl-library 
> <[email protected]>:
> 
> Hi Andrew.
> 
> Am 27.02.2019 um 08:17 schrieb Andrew Kurushin via curl-library:
>> Hello All
>> 
>> 
>> I have made small http server benchmark tool base on libcurl library
>> (https://github.com/ajax16384/ahsbt).
>> 
>> There are plenty number of  tools with same functionality but they have some
>> disadvantages:
>> 
>>      - ab (https://httpd.apache.org/docs/2.4/programs/ab.html) and wrk
>> (https://github.com/wg/wrk) lack http2 support
>> 
>>      - h2load (https://nghttp2.org/documentation/h2load.1.html) has no non 
>> keep
>> alive mode
>> 
>>      - go based tools
>> (https://github.com/rakyll/hey, https://github.com/tsenart/vegeta) has non 
>> user
>> land friendly thread-process usage
> 
> What do you mean whit this statement?
> 
> [snipp]
> 
>> Issue can be observed without real network (http://localhost
>> <http://localhost/> tests)                                                   
>>                                                   
>> 
>> It would be great if You help to resolve this issue or even if You have any 
>> idea
>> why libcurl socket serial re-connection are so slow compared to apache "ab" 
>> ( it
>> may be my ignorense in libcurl api usage etc or it's a libcurl bug) .
>> 
>> Thanks
>> 
>> Andrei
>> 
>> 
>> -------------------------------------------------------------------
>> Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
>> Etiquette:   https://curl.haxx.se/mail/etiquette.html
>> 
> 
> 
> -------------------------------------------------------------------
> Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
> Etiquette:   https://curl.haxx.se/mail/etiquette.html


-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.haxx.se/mail/etiquette.html

Reply via email to