smol vs tokio with hyper benchmarks

Debug VS Release

Single-threaded VS Multi-threaded

$ npm i autocannon -g

smol

Listening on http://127.0.0.1:8000

single-threaded

  1. Debug

$ cargo run --bin hello-smol-single

$ autocannon 127.0.0.1:8000
Running 10s test @ http://127.0.0.1:8000
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬──────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max      │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼──────────┤
│ Latency │ 0 ms │ 3 ms │ 3 ms  │ 4 ms │ 2.71 ms │ 0.96 ms │ 10.02 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴──────────┘
┌───────────┬────────┬────────┬────────┬────────┬─────────┬───────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%    │ 97.5%  │ Avg     │ Stdev │ Min    │
├───────────┼────────┼────────┼────────┼────────┼─────────┼───────┼────────┤
│ Req/Sec   │ 2839   │ 2839   │ 2855   │ 2865   │ 2855.37 │ 7.08  │ 2839   │
├───────────┼────────┼────────┼────────┼────────┼─────────┼───────┼────────┤
│ Bytes/Sec │ 250 kB │ 250 kB │ 251 kB │ 252 kB │ 251 kB  │ 625 B │ 250 kB │
└───────────┴────────┴────────┴────────┴────────┴─────────┴───────┴────────┘

Req/Bytes counts sampled once per second.

31k requests in 11.03s, 2.76 MB read
  1. Release

$ cargo run --bin hello-smol-single --release

$ autocannon 127.0.0.1:8000
Running 10s test @ http://127.0.0.1:8000
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬─────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max     │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼─────────┤
│ Latency │ 0 ms │ 0 ms │ 0 ms  │ 0 ms │ 0.01 ms │ 0.04 ms │ 6.01 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴─────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 67775   │ 67775   │ 76607   │ 77055   │ 75086.55 │ 2842.08 │ 67746   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 5.96 MB │ 5.96 MB │ 6.74 MB │ 6.78 MB │ 6.61 MB  │ 250 kB  │ 5.96 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.

826k requests in 11.05s, 72.7 MB read

multi-threaded

  1. Debug

cargo run --bin hello-smol-multi

$ autocannon 127.0.0.1:8000
Running 10s test @ http://127.0.0.1:8000
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬──────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max      │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼──────────┤
│ Latency │ 0 ms │ 0 ms │ 1 ms  │ 1 ms │ 0.26 ms │ 0.49 ms │ 10.86 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴──────────┘
┌───────────┬────────┬────────┬─────────┬─────────┬──────────┬────────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%     │ 97.5%   │ Avg      │ Stdev  │ Min    │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼────────┼────────┤
│ Req/Sec   │ 10607  │ 10607  │ 11559   │ 11607   │ 11367.64 │ 293.48 │ 10600  │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼────────┼────────┤
│ Bytes/Sec │ 933 kB │ 933 kB │ 1.02 MB │ 1.02 MB │ 1 MB     │ 26 kB  │ 933 kB │
└───────────┴────────┴────────┴─────────┴─────────┴──────────┴────────┴────────┘

Req/Bytes counts sampled once per second.

125k requests in 11.03s, 11 MB read
  1. Release

$ cargo run --bin hello-smol-multi --release

$ autocannon 127.0.0.1:8000
Running 10s test @ http://127.0.0.1:8000
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬─────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max     │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼─────────┤
│ Latency │ 0 ms │ 0 ms │ 0 ms  │ 0 ms │ 0.01 ms │ 0.04 ms │ 6.08 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴─────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 58719   │ 58719   │ 69951   │ 71167   │ 68538.19 │ 4019.21 │ 58703   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 5.17 MB │ 5.17 MB │ 6.16 MB │ 6.26 MB │ 6.03 MB  │ 353 kB  │ 5.17 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.

754k requests in 11.04s, 66.3 MB read

tokio

Listening on http://127.0.0.1:8001

single-threaded

  1. Debug

$ cargo run --bin hello-tokio-single

$ autocannon 127.0.0.1:8001
Running 10s test @ http://127.0.0.1:8001
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬─────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max     │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼─────────┤
│ Latency │ 0 ms │ 0 ms │ 0 ms  │ 0 ms │ 0.01 ms │ 0.06 ms │ 6.01 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴─────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 18911   │ 18911   │ 19391   │ 19519   │ 19301.1 │ 187.69  │ 18906   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 1.66 MB │ 1.66 MB │ 1.71 MB │ 1.72 MB │ 1.7 MB  │ 16.4 kB │ 1.66 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.

212k requests in 11.04s, 18.7 MB read
  1. Release

$ cargo run --bin hello-tokio-single --release

$ autocannon 127.0.0.1:8001
Running 10s test @ http://127.0.0.1:8001
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬─────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max     │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼─────────┤
│ Latency │ 0 ms │ 0 ms │ 0 ms  │ 0 ms │ 0.01 ms │ 0.03 ms │ 6.06 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴─────────┘
┌───────────┬────────┬────────┬─────────┬─────────┬──────────┬─────────┬────────┐
│ Stat      │ 1%     │ 2.5%   │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min    │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼─────────┼────────┤
│ Req/Sec   │ 69375  │ 69375  │ 75839   │ 77183   │ 75290.19 │ 2152.17 │ 69322  │
├───────────┼────────┼────────┼─────────┼─────────┼──────────┼─────────┼────────┤
│ Bytes/Sec │ 6.1 MB │ 6.1 MB │ 6.67 MB │ 6.79 MB │ 6.63 MB  │ 190 kB  │ 6.1 MB │
└───────────┴────────┴────────┴─────────┴─────────┴──────────┴─────────┴────────┘

Req/Bytes counts sampled once per second.

828k requests in 11.04s, 72.9 MB read

multi-threaded

  1. Debug

$ cargo run --bin hello-tokio-multi

$ autocannon 127.0.0.1:8001
Running 10s test @ http://127.0.0.1:8001
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬─────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max     │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼─────────┤
│ Latency │ 0 ms │ 0 ms │ 0 ms  │ 0 ms │ 0.01 ms │ 0.04 ms │ 6.14 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴─────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg      │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec   │ 40319   │ 40319   │ 43519   │ 44607   │ 43346.91 │ 1227.17 │ 40306   │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 3.55 MB │ 3.55 MB │ 3.83 MB │ 3.93 MB │ 3.81 MB  │ 108 kB  │ 3.55 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.

477k requests in 11.04s, 42 MB read
  1. Release

$ cargo run --bin hello-tokio-multi --release

$ autocannon 127.0.0.1:8001
Running 10s test @ http://127.0.0.1:8001
10 connections

┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬─────────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max     │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼─────────┤
│ Latency │ 0 ms │ 0 ms │ 0 ms  │ 0 ms │ 0.01 ms │ 0.04 ms │ 6.13 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴─────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 66943   │ 66943   │ 74687   │ 74879   │ 73661.1 │ 2243.64 │ 66932   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 5.89 MB │ 5.89 MB │ 6.57 MB │ 6.59 MB │ 6.48 MB │ 198 kB  │ 5.89 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.

810k requests in 11.05s, 71.3 MB read