nom 0.3.9

A byte oriented, zero copy, parser combinators library
Documentation
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