FROM https://gist.github.com/jamwt/2992f25fc45791337267
# New rust http stack
jamwt@tango ~
$ wrk -t12 -c400 -d30s http://127.0.0.1:8000/index.html
Running 30s test @ http://127.0.0.1:8000/index.html
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 15.68ms 31.18ms 473.37ms 99.35%
Req/Sec 2.67k 693.06 9.40k 80.67%
916396 requests in 29.99s, 45.45MB read
Socket errors: connect 0, read 0, write 0, timeout 10
Requests/sec: 30553.62
Transfer/sec: 1.52MB
# golang
jamwt@tango ~
$ wrk -t12 -c400 -d30s http://127.0.0.1:8000/index.html
Running 30s test @ http://127.0.0.1:8000/index.html
12 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 5.00s 511.85ms 5.11s 98.99%
Req/Sec 1.21k 5.95k 37.00k 96.07%
921409 requests in 30.57s, 113.36MB read
Socket errors: connect 0, read 0, write 0, timeout 1690
Requests/sec: 30140.64
Transfer/sec: 3.71MB
# move down to 100 concurrency, 4 threads
# rust
jamwt@tango ~
$ wrk -t4 -c100 -d30s http://127.0.0.1:8000/index.html
Running 30s test @ http://127.0.0.1:8000/index.html
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 3.26ms 657.06us 8.69ms 76.20%
Req/Sec 8.33k 1.71k 16.89k 76.32%
946929 requests in 30.00s, 46.96MB read
Requests/sec: 31564.67
Transfer/sec: 1.57MB
# golang
jamwt@tango ~
$ wrk -t4 -c100 -d30s http://127.0.0.1:8000/index.html
Running 30s test @ http://127.0.0.1:8000/index.html
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.06s 756.20ms 1.63s 66.35%
Req/Sec 7.81k 12.64k 37.10k 79.03%
885504 requests in 29.99s, 108.94MB read
Requests/sec: 29523.09
Transfer/sec: 3.63MB
## Detailed stats - 2k requests per second over 100 connections
# rust
jamwt@tango ~
$ wrk -R 2000 --latency -t4 -c100 -d30s http://127.0.0.1:8000/
Running 30s test @ http://127.0.0.1:8000/
4 threads and 100 connections
Thread calibration: mean lat.: 1.246ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.241ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.107ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.097ms, rate sampling interval: 10ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.16ms 466.47us 4.25ms 65.61%
Req/Sec 526.30 122.61 1.00k 55.74%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 1.15ms
75.000% 1.48ms
90.000% 1.77ms
99.000% 2.27ms
99.900% 2.68ms
99.990% 3.84ms
99.999% 4.25ms
100.000% 4.25ms
# golang
jamwt@tango ~
$ wrk -R 2000 --latency -t4 -c100 -d30s http://127.0.0.1:8000/
Running 30s test @ http://127.0.0.1:8000/
4 threads and 100 connections
Thread calibration: mean lat.: 1.184ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.150ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.165ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.116ms, rate sampling interval: 10ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.08ms 432.17us 4.68ms 67.08%
Req/Sec 526.40 119.56 1.00k 55.87%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 1.06ms
75.000% 1.36ms
90.000% 1.64ms
99.000% 2.16ms
99.900% 2.59ms
99.990% 3.22ms
99.999% 4.68ms
100.000% 4.68ms
## Detailed stats - 10k requests per second over 500 connections
# rust
Latency:
jamwt@tango ~
$ wrk -R 10000 --latency -t4 -c500 -d30s http://127.0.0.1:8000/
Running 30s test @ http://127.0.0.1:8000/
4 threads and 500 connections
Thread calibration: mean lat.: 1.414ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.524ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.501ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.392ms, rate sampling interval: 10ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.39ms 648.71us 6.98ms 69.91%
Req/Sec 2.63k 380.99 4.33k 79.45%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 1.33ms
75.000% 1.78ms
90.000% 2.19ms
99.000% 3.26ms
99.900% 5.21ms
99.990% 6.17ms
99.999% 6.83ms
100.000% 6.98ms
Process Stats:
Command being timed: "./target/release/dbxhttp"
User time (seconds): 0.72
System time (seconds): 10.45
Percent of CPU this job got: 31%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:35.54
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 4524
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 107869
Voluntary context switches: 326352
Involuntary context switches: 294597
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
# golang
Latency:
jamwt@tango ~
$ wrk -R 10000 --latency -t4 -c500 -d30s http://127.0.0.1:8000/
Running 30s test @ http://127.0.0.1:8000/
4 threads and 500 connections
Thread calibration: mean lat.: 1.218ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.257ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.282ms, rate sampling interval: 10ms
Thread calibration: mean lat.: 1.239ms, rate sampling interval: 10ms
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.23ms 627.27us 11.60ms 71.97%
Req/Sec 2.63k 385.46 5.11k 79.98%
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 1.18ms
75.000% 1.60ms
90.000% 1.95ms
99.000% 2.98ms
99.900% 5.53ms
99.990% 8.54ms
99.999% 10.99ms
100.000% 11.61ms
Process Stats:
Command being timed: "./bench_go"
User time (seconds): 2.08
System time (seconds): 11.13
Percent of CPU this job got: 37%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:35.03
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 15776
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 4012
Voluntary context switches: 149301
Involuntary context switches: 55634
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 2