These results are invalid. Some of the server implementations don't parse correctly and rust-tokio/ponylang-tcp don't seem to parse at all. See here for better benchmarks: https://gist.github.com/kprotty/5a41e9612657de00788478a7dde43d78
====
wrk -t4 -c128 -d10 --latency http://localhost:12345
-
Machine:
- Intel Core i7-6700k (4 cores, 8 threads, 4.2ghz)
- 16GB DDR4 2400mhz RAM
- Arch Linux, Kernel 5.2.8
-
C non-blocking (https://pastebin.com/VHMmjFhy)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 6.03us 66.97us 6.76ms 99.96%
Req/Sec 456.66k 49.47k 705.49k 88.00%
Latency Distribution
50% 5.00us
75% 5.00us
90% 6.00us
99% 9.00us
4533700 requests in 10.06s, 216.18MB read
Requests/sec: 450520.28
Transfer/sec: 21.48MB
- C multi-threaded (https://pastebin.com/B6LGaTRq)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 71.70ms 53.40ms 320.61ms 62.03%
Req/Sec 794.31k 172.83k 1.93M 76.13%
Latency Distribution
50% 63.31ms
75% 109.61ms
90% 151.26ms
99% 196.52ms
31478929 requests in 10.07s, 1.47GB read
Requests/sec: 3126434.62
Transfer/sec: 149.08MB
- C non-blocking multi-threaded (EPOLLET) (https://pastebin.com/N55mku4G)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.77ms 20.30ms 384.52ms 98.24%
Req/Sec 0.99M 726.03k 4.18M 84.12%
Latency Distribution
50% 36.00us
75% 4.38ms
90% 12.04ms
99% 39.34ms
29999649 requests in 10.09s, 1.40GB read
Socket errors: connect 0, read 0, write 2, timeout 3
Requests/sec: 2971965.71
Transfer/sec: 141.71MB
- C non-blocking multi-threaded (EPOLLONESHOT) (https://pastebin.com/3jDZp8DC)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 14.63ms 102.86ms 1.38s 98.44%
Req/Sec 0.93M 418.25k 3.91M 82.83%
Latency Distribution
50% 22.00us
75% 3.73ms
90% 12.33ms
99% 567.99ms
28006935 requests in 10.09s, 1.30GB read
Socket errors: connect 0, read 4, write 2, timeout 4
Requests/sec: 2775978.13
Transfer/sec: 132.37MB
- Rust actix (https://pastebin.com/yTN4mp5c)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 719.41us 181.72us 9.35ms 94.70%
Req/Sec 44.72k 4.73k 58.48k 68.75%
Latency Distribution
50% 684.00us
75% 792.00us
90% 825.00us
99% 1.35ms
1779562 requests in 10.05s, 84.86MB read
Requests/sec: 177030.63
Transfer/sec: 8.44MB
- Rust actix-web (https://pastebin.com/p4GxGkJJ)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.09ms 2.58ms 30.16ms 91.00%
Req/Sec 118.84k 15.96k 140.87k 68.75%
Latency Distribution
50% 141.00us
75% 596.00us
90% 3.19ms
99% 13.36ms
4730269 requests in 10.04s, 577.43MB read
Requests/sec: 471160.26
Transfer/sec: 57.51MB
- Rust tokio (https://pastebin.com/byUBd8Wy)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 78.26ms 54.56ms 297.56ms 66.19%
Req/Sec 7.90M 219.58k 8.25M 90.77%
Latency Distribution
50% 70.14ms
75% 112.62ms
90% 156.40ms
99% 232.40ms
316801024 requests in 10.19s, 14.75GB read
Requests/sec: 31080970.08
Transfer/sec: 1.45GB
- Golang evio (https://pastebin.com/P04PEwYR)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.44ms 3.45ms 48.21ms 90.34%
Req/Sec 135.90k 5.86k 147.08k 77.00%
Latency Distribution
50% 159.00us
75% 557.00us
90% 4.72ms
99% 16.72ms
5408490 requests in 10.03s, 257.90MB read
Requests/sec: 538966.01
Transfer/sec: 25.70MB
- Elixir TCP (https://pastebin.com/eWSqBM5a)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 19.98ms 134.24ms 1.65s 97.35%
Req/Sec 146.14k 38.66k 243.66k 61.75%
Latency Distribution
50% 263.00us
75% 399.00us
90% 1.91ms
99% 779.09ms
5823156 requests in 10.06s, 277.67MB read
Socket errors: connect 0, read 0, write 0, timeout 12
Requests/sec: 579064.50
Transfer/sec: 27.61MB
- Ponylang TCP (https://pastebin.com/YCYQKtPM)
Running 10s test @ http://localhost:12345
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 40.45ms 28.17ms 165.03ms 65.67%
Req/Sec 7.78M 186.71k 8.19M 89.64%
Latency Distribution
50% 36.16ms
75% 58.49ms
90% 81.68ms
99% 118.68ms
309517082 requests in 10.07s, 14.41GB read
Requests/sec: 30732328.55
Transfer/sec: 1.43GB
If one library is dropping requests at random due to implementation bugs, they're no longer doing the same thing and comparing superficially still isn't useful as the wrk results would just show undefined variance in throughput, depending on which requests were dropped during that run.