├── .DS_Store ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Rocket.toml ├── perf ├── .DS_Store ├── actix │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── astra │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── axum │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── gotham │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── hyper │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── may-minihttp │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── nickel │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── ntex │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── poem │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── roa │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── rocket │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── salvo │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── thruster │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── tide │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── tokio-minihttp │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── viz │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt └── warp │ ├── 1024.txt │ ├── 128.txt │ ├── 16.txt │ ├── 2048.txt │ ├── 256.txt │ ├── 32.txt │ ├── 512.txt │ └── 64.txt ├── readme.dev.md ├── readme.md ├── results ├── concurrency-10.md ├── concurrency-100.md ├── concurrency-1024.md ├── concurrency-128.md ├── concurrency-16.md ├── concurrency-2048.md ├── concurrency-250.md ├── concurrency-256.md ├── concurrency-32.md ├── concurrency-50.md ├── concurrency-500.md ├── concurrency-512.md ├── concurrency-64.md ├── concurrency-700.md └── concurrency-8.md └── src ├── .DS_Store ├── bin ├── actix.rs ├── astra.rs ├── axum.rs ├── gotham.rs ├── hyper.rs ├── may-minihttp.rs ├── nickel.rs ├── ntex.rs ├── poem.rs ├── roa.rs ├── rocket.rs ├── salvo.rs ├── thruster.rs ├── tide.rs ├── tokio-minihttp.rs ├── viz.rs └── warp.rs ├── helpers └── mod.rs ├── main.rs └── utils ├── config.dev.json ├── config.json ├── example-output.json ├── header.txt ├── markdown-header.md ├── readme_block.md └── table-separator.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishtms/rust-framework-bench/92f26d074a64cf1382402480ded52922f2e33f83/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rust-framework-benchmarks" 3 | version = "0.1.0" 4 | edition = "2021" 5 | authors = ["Ishtmeet Singh "] 6 | repository = "https://github.com/ishtmeet-singh/rust-framework-benchmarks" 7 | 8 | [[bin]] 9 | name = "main" 10 | path = "src/main.rs" 11 | 12 | [[bin]] 13 | name = "actix" 14 | path = "src/bin/actix.rs" 15 | 16 | [[bin]] 17 | name = "axum" 18 | path = "src/bin/axum.rs" 19 | 20 | [[bin]] 21 | name = "hyper" 22 | path = "src/bin/hyper.rs" 23 | 24 | [[bin]] 25 | name = "ntex" 26 | path = "src/bin/ntex.rs" 27 | 28 | [[bin]] 29 | name = "tide" 30 | path = "src/bin/tide.rs" 31 | 32 | [[bin]] 33 | name = "warp" 34 | path = "src/bin/warp.rs" 35 | 36 | [[bin]] 37 | name = "rocket" 38 | path = "src/bin/rocket.rs" 39 | 40 | [[bin]] 41 | name = "viz" 42 | path = "src/bin/viz.rs" 43 | 44 | [dependencies] 45 | tokio = { version = "1", features = ["full"] } 46 | warp = "0.3.3" 47 | axum = "0.6.18" 48 | hyper = "0.14.27" 49 | ntex = { version = "0.7.2", features = ["tokio"] } 50 | actix-web = "4" 51 | tide = "0.16.0" 52 | async-std = { version = "1.8.0", features = ["attributes"] } 53 | rocket = "0.5.0-rc.2" 54 | viz = "0.4.10" 55 | serde_json = "1.0" 56 | serde = "1.0.140" 57 | regex = "1.6.0" 58 | lazy_static = "1.4.0" 59 | num-format = "0.4.0" 60 | astra = "0.2.0" 61 | indicatif = "0.16.2" 62 | colored = "2.0.0" 63 | poem = "1.3.56" 64 | salvo = "0.46.0" 65 | thruster = "1.3.5" 66 | may_minihttp = { git = "https://github.com/Xudong-Huang/may_minihttp.git" } 67 | gotham = "0.7.1" 68 | nickel = "0.11.0" 69 | nickel_macros = "0.1.0" 70 | roa = "0.6" 71 | anyhow = "1.0.58" 72 | futures = "0.1.11" 73 | tokio-minihttp = { git = "https://github.com/tokio-rs/tokio-minihttp" } 74 | tokio-proto = "0.1" 75 | tokio-service = "0.1" 76 | crossterm = "0.26.0" 77 | chrono = "0.4.19" 78 | 79 | [profile.release] 80 | opt-level = 3 81 | debug = false 82 | lto = true 83 | debug-assertions = false 84 | codegen-units = 1 85 | -------------------------------------------------------------------------------- /Rocket.toml: -------------------------------------------------------------------------------- 1 | [release] 2 | address = "0.0.0.0" 3 | port = 3000 4 | -------------------------------------------------------------------------------- /perf/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishtms/rust-framework-bench/92f26d074a64cf1382402480ded52922f2e33f83/perf/.DS_Store -------------------------------------------------------------------------------- /perf/actix/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.64ms 13.70ms 0.04ms 125.40ms 6 | Requests: 7 | Total: 3078271 Req/Sec: 153939.31 8 | Transfer: 9 | Total: 381.24 MB Transfer Rate: 19.07 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 98.93ms | 14 | | 99% | 76.83ms | 15 | | 95% | 55.59ms | 16 | | 90% | 43.28ms | 17 | | 75% | 22.20ms | 18 | | 50% | 12.16ms | 19 | + --------------- + --------------- + 20 | 21 | 3173 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/actix/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.78ms 0.31ms 0.02ms 14.92ms 6 | Requests: 7 | Total: 3291837 Req/Sec: 164666.16 8 | Transfer: 9 | Total: 408.11 MB Transfer Rate: 20.41 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.88ms | 14 | | 99% | 1.85ms | 15 | | 95% | 1.50ms | 16 | | 90% | 1.38ms | 17 | | 75% | 1.18ms | 18 | | 50% | 1.00ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/actix/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.10ms 0.05ms 0.01ms 6.06ms 6 | Requests: 7 | Total: 3326160 Req/Sec: 166331.13 8 | Transfer: 9 | Total: 412.37 MB Transfer Rate: 20.62 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.03ms | 14 | | 99% | 0.36ms | 15 | | 95% | 0.22ms | 16 | | 90% | 0.19ms | 17 | | 75% | 0.15ms | 18 | | 50% | 0.12ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/actix/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 12.85ms 23.28ms 0.03ms 644.49ms 6 | Requests: 7 | Total: 7166628 Req/Sec: 159270.22 8 | Transfer: 9 | Total: 886.09 MB Transfer Rate: 19.69 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 256.44ms | 14 | | 99% | 125.19ms | 15 | | 95% | 83.90ms | 16 | | 90% | 67.37ms | 17 | | 75% | 43.75ms | 18 | | 50% | 24.86ms | 19 | + --------------- + --------------- + 20 | 21 | 19422 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/actix/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.58ms 0.63ms 0.02ms 22.93ms 6 | Requests: 7 | Total: 3231910 Req/Sec: 161680.56 8 | Transfer: 9 | Total: 400.67 MB Transfer Rate: 20.04 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.52ms | 14 | | 99% | 3.72ms | 15 | | 95% | 2.98ms | 16 | | 90% | 2.76ms | 17 | | 75% | 2.38ms | 18 | | 50% | 2.05ms | 19 | + --------------- + --------------- + 20 | 21 | 80 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/actix/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.19ms 0.08ms 0.02ms 7.62ms 6 | Requests: 7 | Total: 3421376 Req/Sec: 171106.26 8 | Transfer: 9 | Total: 424.17 MB Transfer Rate: 21.21 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.32ms | 14 | | 99% | 0.54ms | 15 | | 95% | 0.39ms | 16 | | 90% | 0.34ms | 17 | | 75% | 0.28ms | 18 | | 50% | 0.24ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/actix/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.23ms 4.94ms 0.03ms 122.56ms 6 | Requests: 7 | Total: 3170232 Req/Sec: 158601.44 8 | Transfer: 9 | Total: 392.97 MB Transfer Rate: 19.66 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 47.45ms | 14 | | 99% | 34.07ms | 15 | | 95% | 21.25ms | 16 | | 90% | 15.40ms | 17 | | 75% | 8.56ms | 18 | | 50% | 5.32ms | 19 | + --------------- + --------------- + 20 | 21 | 520 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/actix/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.40ms 0.23ms 0.02ms 74.22ms 6 | Requests: 7 | Total: 3224367 Req/Sec: 161267.33 8 | Transfer: 9 | Total: 399.75 MB Transfer Rate: 19.99 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.56ms | 14 | | 99% | 1.22ms | 15 | | 95% | 0.84ms | 16 | | 90% | 0.75ms | 17 | | 75% | 0.62ms | 18 | | 50% | 0.51ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/astra/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.96ms 0.97ms 0.02ms 120.20ms 6 | Requests: 7 | Total: 3059441 Req/Sec: 153192.19 8 | Transfer: 9 | Total: 308.97 MB Transfer Rate: 15.47 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 26.56ms | 14 | | 99% | 5.44ms | 15 | | 95% | 2.46ms | 16 | | 90% | 1.94ms | 17 | | 75% | 1.47ms | 18 | | 50% | 1.21ms | 19 | + --------------- + --------------- + 20 | 21 | 3191 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/astra/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.81ms 0.32ms 0.02ms 10.35ms 6 | Requests: 7 | Total: 3058406 Req/Sec: 153002.25 8 | Transfer: 9 | Total: 309.18 MB Transfer Rate: 15.47 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 5.27ms | 14 | | 99% | 2.46ms | 15 | | 95% | 1.69ms | 16 | | 90% | 1.48ms | 17 | | 75% | 1.20ms | 18 | | 50% | 1.00ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/astra/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.08ms 0.04ms 0.02ms 3.84ms 6 | Requests: 7 | Total: 3221679 Req/Sec: 161134.88 8 | Transfer: 9 | Total: 325.68 MB Transfer Rate: 16.29 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.74ms | 14 | | 99% | 0.26ms | 15 | | 95% | 0.17ms | 16 | | 90% | 0.14ms | 17 | | 75% | 0.12ms | 18 | | 50% | 0.10ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/astra/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.04ms 4.47ms 0.02ms 741.47ms 6 | Requests: 7 | Total: 7413815 Req/Sec: 164781.10 8 | Transfer: 9 | Total: 754.47 MB Transfer Rate: 16.77 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 85.75ms | 14 | | 99% | 19.32ms | 15 | | 95% | 5.18ms | 16 | | 90% | 3.23ms | 17 | | 75% | 1.91ms | 18 | | 50% | 1.41ms | 19 | + --------------- + --------------- + 20 | 21 | 20165 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/astra/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.92ms 0.35ms 0.02ms 23.10ms 6 | Requests: 7 | Total: 3095003 Req/Sec: 154864.72 8 | Transfer: 9 | Total: 312.88 MB Transfer Rate: 15.66 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 5.21ms | 14 | | 99% | 2.61ms | 15 | | 95% | 1.87ms | 16 | | 90% | 1.64ms | 17 | | 75% | 1.33ms | 18 | | 50% | 1.13ms | 19 | + --------------- + --------------- + 20 | 21 | 110 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/astra/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.19ms 0.08ms 0.02ms 9.38ms 6 | Requests: 7 | Total: 3275694 Req/Sec: 163832.27 8 | Transfer: 9 | Total: 331.14 MB Transfer Rate: 16.56 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.41ms | 14 | | 99% | 0.55ms | 15 | | 95% | 0.38ms | 16 | | 90% | 0.33ms | 17 | | 75% | 0.27ms | 18 | | 50% | 0.23ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/astra/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.00ms 0.50ms 0.02ms 116.35ms 6 | Requests: 7 | Total: 2956257 Req/Sec: 147862.35 8 | Transfer: 9 | Total: 298.80 MB Transfer Rate: 14.95 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 9.41ms | 14 | | 99% | 3.29ms | 15 | | 95% | 2.15ms | 16 | | 90% | 1.86ms | 17 | | 75% | 1.53ms | 18 | | 50% | 1.27ms | 19 | + --------------- + --------------- + 20 | 21 | 601 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/astra/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.38ms 0.16ms 0.02ms 13.32ms 6 | Requests: 7 | Total: 3272396 Req/Sec: 163679.64 8 | Transfer: 9 | Total: 330.81 MB Transfer Rate: 16.55 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.19ms | 14 | | 99% | 1.12ms | 15 | | 95% | 0.78ms | 16 | | 90% | 0.69ms | 17 | | 75% | 0.56ms | 18 | | 50% | 0.48ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/axum/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.55ms 13.74ms 0.03ms 125.25ms 6 | Requests: 7 | Total: 3118167 Req/Sec: 156053.33 8 | Transfer: 9 | Total: 383.30 MB Transfer Rate: 19.18 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 89.47ms | 14 | | 99% | 71.86ms | 15 | | 95% | 53.96ms | 16 | | 90% | 44.28ms | 17 | | 75% | 21.95ms | 18 | | 50% | 11.99ms | 19 | + --------------- + --------------- + 20 | 21 | 2547 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/axum/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.73ms 0.30ms 0.02ms 9.16ms 6 | Requests: 7 | Total: 3512451 Req/Sec: 175712.45 8 | Transfer: 9 | Total: 432.12 MB Transfer Rate: 21.62 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.89ms | 14 | | 99% | 1.89ms | 15 | | 95% | 1.49ms | 16 | | 90% | 1.35ms | 17 | | 75% | 1.12ms | 18 | | 50% | 0.94ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/axum/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.04ms 0.01ms 5.09ms 6 | Requests: 7 | Total: 3642048 Req/Sec: 182147.09 8 | Transfer: 9 | Total: 448.06 MB Transfer Rate: 22.41 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.73ms | 14 | | 99% | 0.27ms | 15 | | 95% | 0.18ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.13ms | 18 | | 50% | 0.11ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/axum/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 24.81ms 59.96ms 0.04ms 663.70ms 6 | Requests: 7 | Total: 3711724 Req/Sec: 82492.48 8 | Transfer: 9 | Total: 453.98 MB Transfer Rate: 10.09 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 407.63ms | 14 | | 99% | 252.25ms | 15 | | 95% | 215.18ms | 16 | | 90% | 195.75ms | 17 | | 75% | 90.73ms | 18 | | 50% | 47.39ms | 19 | + --------------- + --------------- + 20 | 21 | 21543 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/axum/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.52ms 0.63ms 0.02ms 18.24ms 6 | Requests: 7 | Total: 3357211 Req/Sec: 167980.37 8 | Transfer: 9 | Total: 413.01 MB Transfer Rate: 20.67 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.03ms | 14 | | 99% | 3.66ms | 15 | | 95% | 2.99ms | 16 | | 90% | 2.75ms | 17 | | 75% | 2.34ms | 18 | | 50% | 1.99ms | 19 | + --------------- + --------------- + 20 | 21 | 47 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/axum/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.08ms 0.01ms 9.98ms 6 | Requests: 7 | Total: 3695085 Req/Sec: 184814.12 8 | Transfer: 9 | Total: 454.58 MB Transfer Rate: 22.74 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.23ms | 14 | | 99% | 0.52ms | 15 | | 95% | 0.36ms | 16 | | 90% | 0.31ms | 17 | | 75% | 0.26ms | 18 | | 50% | 0.22ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/axum/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.24ms 4.92ms 0.03ms 120.70ms 6 | Requests: 7 | Total: 3150744 Req/Sec: 157622.96 8 | Transfer: 9 | Total: 387.53 MB Transfer Rate: 19.39 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 45.96ms | 14 | | 99% | 32.04ms | 15 | | 95% | 21.00ms | 16 | | 90% | 15.93ms | 17 | | 75% | 8.66ms | 18 | | 50% | 5.36ms | 19 | + --------------- + --------------- + 20 | 21 | 696 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/axum/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.35ms 0.15ms 0.02ms 12.73ms 6 | Requests: 7 | Total: 3654826 Req/Sec: 182786.36 8 | Transfer: 9 | Total: 449.63 MB Transfer Rate: 22.49 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.25ms | 14 | | 99% | 1.02ms | 15 | | 95% | 0.75ms | 16 | | 90% | 0.65ms | 17 | | 75% | 0.52ms | 18 | | 50% | 0.45ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/gotham/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/gotham/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.72ms 0.30ms 0.02ms 16.15ms 6 | Requests: 7 | Total: 3534689 Req/Sec: 176835.21 8 | Transfer: 9 | Total: 562.95 MB Transfer Rate: 28.16 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 4.29ms | 14 | | 99% | 1.94ms | 15 | | 95% | 1.48ms | 16 | | 90% | 1.33ms | 17 | | 75% | 1.09ms | 18 | | 50% | 0.93ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/gotham/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.05ms 0.02ms 14.68ms 6 | Requests: 7 | Total: 3591288 Req/Sec: 179680.61 8 | Transfer: 9 | Total: 571.96 MB Transfer Rate: 28.62 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.75ms | 14 | | 99% | 0.28ms | 15 | | 95% | 0.18ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.13ms | 18 | | 50% | 0.11ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/gotham/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 24.88ms 61.93ms 0.04ms 787.57ms 6 | Requests: 7 | Total: 3700358 Req/Sec: 82224.80 8 | Transfer: 9 | Total: 586.44 MB Transfer Rate: 13.03 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 504.31ms | 14 | | 99% | 265.97ms | 15 | | 95% | 221.81ms | 16 | | 90% | 201.54ms | 17 | | 75% | 91.14ms | 18 | | 50% | 47.58ms | 19 | + --------------- + --------------- + 20 | 21 | 18167 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/gotham/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.62ms 0.64ms 0.02ms 18.27ms 6 | Requests: 7 | Total: 3160314 Req/Sec: 158082.50 8 | Transfer: 9 | Total: 503.31 MB Transfer Rate: 25.18 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.90ms | 14 | | 99% | 3.91ms | 15 | | 95% | 3.06ms | 16 | | 90% | 2.82ms | 17 | | 75% | 2.46ms | 18 | | 50% | 2.10ms | 19 | + --------------- + --------------- + 20 | 21 | 52 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/gotham/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.08ms 0.02ms 10.68ms 6 | Requests: 7 | Total: 3654263 Req/Sec: 182769.69 8 | Transfer: 9 | Total: 581.99 MB Transfer Rate: 29.11 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.29ms | 14 | | 99% | 0.53ms | 15 | | 95% | 0.36ms | 16 | | 90% | 0.31ms | 17 | | 75% | 0.26ms | 18 | | 50% | 0.22ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/gotham/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.32ms 5.37ms 0.04ms 65.51ms 6 | Requests: 7 | Total: 3083266 Req/Sec: 154265.83 8 | Transfer: 9 | Total: 490.99 MB Transfer Rate: 24.57 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 51.79ms | 14 | | 99% | 36.42ms | 15 | | 95% | 23.12ms | 16 | | 90% | 16.99ms | 17 | | 75% | 8.78ms | 18 | | 50% | 5.43ms | 19 | + --------------- + --------------- + 20 | 21 | 420 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/gotham/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.36ms 0.15ms 0.02ms 9.18ms 6 | Requests: 7 | Total: 3595901 Req/Sec: 179835.80 8 | Transfer: 9 | Total: 572.70 MB Transfer Rate: 28.64 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.13ms | 14 | | 99% | 1.01ms | 15 | | 95% | 0.74ms | 16 | | 90% | 0.64ms | 17 | | 75% | 0.53ms | 18 | | 50% | 0.45ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/hyper/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.37ms 13.04ms 0.03ms 128.50ms 6 | Requests: 7 | Total: 3209247 Req/Sec: 160575.68 8 | Transfer: 9 | Total: 269.10 MB Transfer Rate: 13.46 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 78.24ms | 14 | | 99% | 65.11ms | 15 | | 95% | 50.05ms | 16 | | 90% | 42.10ms | 17 | | 75% | 21.52ms | 18 | | 50% | 11.73ms | 19 | + --------------- + --------------- + 20 | 21 | 2757 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/hyper/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.70ms 0.29ms 0.02ms 10.91ms 6 | Requests: 7 | Total: 3674274 Req/Sec: 183792.87 8 | Transfer: 9 | Total: 308.36 MB Transfer Rate: 15.42 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.86ms | 14 | | 99% | 1.84ms | 15 | | 95% | 1.45ms | 16 | | 90% | 1.30ms | 17 | | 75% | 1.06ms | 18 | | 50% | 0.90ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/hyper/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.04ms 0.01ms 5.88ms 6 | Requests: 7 | Total: 3718786 Req/Sec: 185987.35 8 | Transfer: 9 | Total: 312.09 MB Transfer Rate: 15.61 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.73ms | 14 | | 99% | 0.27ms | 15 | | 95% | 0.18ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.13ms | 18 | | 50% | 0.11ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/hyper/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 21.04ms 49.61ms 0.03ms 491.06ms 6 | Requests: 7 | Total: 4376703 Req/Sec: 97258.79 8 | Transfer: 9 | Total: 365.84 MB Transfer Rate: 8.13 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 333.20ms | 14 | | 99% | 217.13ms | 15 | | 95% | 185.13ms | 16 | | 90% | 162.55ms | 17 | | 75% | 77.17ms | 18 | | 50% | 40.45ms | 19 | + --------------- + --------------- + 20 | 21 | 17546 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/hyper/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.49ms 0.62ms 0.01ms 19.19ms 6 | Requests: 7 | Total: 3424658 Req/Sec: 171299.25 8 | Transfer: 9 | Total: 287.40 MB Transfer Rate: 14.38 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 6.78ms | 14 | | 99% | 3.55ms | 15 | | 95% | 2.92ms | 16 | | 90% | 2.70ms | 17 | | 75% | 2.30ms | 18 | | 50% | 1.95ms | 19 | + --------------- + --------------- + 20 | 21 | 79 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/hyper/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.08ms 0.01ms 8.02ms 6 | Requests: 7 | Total: 3772489 Req/Sec: 188731.00 8 | Transfer: 9 | Total: 316.60 MB Transfer Rate: 15.84 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.36ms | 14 | | 99% | 0.53ms | 15 | | 95% | 0.36ms | 16 | | 90% | 0.30ms | 17 | | 75% | 0.25ms | 18 | | 50% | 0.22ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/hyper/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.14ms 4.69ms 0.03ms 63.05ms 6 | Requests: 7 | Total: 3252534 Req/Sec: 162757.72 8 | Transfer: 9 | Total: 272.93 MB Transfer Rate: 13.66 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 42.64ms | 14 | | 99% | 29.63ms | 15 | | 95% | 19.81ms | 16 | | 90% | 15.30ms | 17 | | 75% | 8.52ms | 18 | | 50% | 5.24ms | 19 | + --------------- + --------------- + 20 | 21 | 414 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/hyper/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.33ms 0.14ms 0.01ms 10.13ms 6 | Requests: 7 | Total: 3817057 Req/Sec: 190918.45 8 | Transfer: 9 | Total: 320.34 MB Transfer Rate: 16.02 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.07ms | 14 | | 99% | 0.96ms | 15 | | 95% | 0.71ms | 16 | | 90% | 0.60ms | 17 | | 75% | 0.50ms | 18 | | 50% | 0.43ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/may-minihttp/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 5.68ms 11.33ms 0.03ms 125.85ms 6 | Requests: 7 | Total: 3597285 Req/Sec: 179952.49 8 | Transfer: 9 | Total: 342.75 MB Transfer Rate: 17.15 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 79.94ms | 14 | | 99% | 60.35ms | 15 | | 95% | 44.73ms | 16 | | 90% | 35.77ms | 17 | | 75% | 19.41ms | 18 | | 50% | 10.55ms | 19 | + --------------- + --------------- + 20 | 21 | 3297 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/may-minihttp/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.68ms 0.29ms 0.01ms 11.48ms 6 | Requests: 7 | Total: 3743108 Req/Sec: 187239.68 8 | Transfer: 9 | Total: 356.97 MB Transfer Rate: 17.86 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.82ms | 14 | | 99% | 1.83ms | 15 | | 95% | 1.42ms | 16 | | 90% | 1.26ms | 17 | | 75% | 1.02ms | 18 | | 50% | 0.87ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/may-minihttp/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.08ms 0.03ms 0.01ms 9.63ms 6 | Requests: 7 | Total: 3919895 Req/Sec: 196058.35 8 | Transfer: 9 | Total: 373.83 MB Transfer Rate: 18.70 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.51ms | 14 | | 99% | 0.22ms | 15 | | 95% | 0.15ms | 16 | | 90% | 0.13ms | 17 | | 75% | 0.12ms | 18 | | 50% | 0.10ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/may-minihttp/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 10.38ms 21.12ms 0.03ms 487.23ms 6 | Requests: 7 | Total: 8868256 Req/Sec: 197089.12 8 | Transfer: 9 | Total: 860.34 MB Transfer Rate: 19.12 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 241.47ms | 14 | | 99% | 110.21ms | 15 | | 95% | 74.53ms | 16 | | 90% | 60.86ms | 17 | | 75% | 38.83ms | 18 | | 50% | 20.14ms | 19 | + --------------- + --------------- + 20 | 21 | 23831 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/may-minihttp/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.37ms 0.56ms 0.01ms 20.77ms 6 | Requests: 7 | Total: 3729479 Req/Sec: 186610.72 8 | Transfer: 9 | Total: 355.67 MB Transfer Rate: 17.80 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 6.89ms | 14 | | 99% | 3.50ms | 15 | | 95% | 2.79ms | 16 | | 90% | 2.47ms | 17 | | 75% | 2.05ms | 18 | | 50% | 1.77ms | 19 | + --------------- + --------------- + 20 | 21 | 52 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/may-minihttp/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.18ms 0.09ms 0.01ms 11.56ms 6 | Requests: 7 | Total: 3641328 Req/Sec: 182092.46 8 | Transfer: 9 | Total: 347.26 MB Transfer Rate: 17.37 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.56ms | 14 | | 99% | 0.59ms | 15 | | 95% | 0.40ms | 16 | | 90% | 0.34ms | 17 | | 75% | 0.27ms | 18 | | 50% | 0.23ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/may-minihttp/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 2.79ms 3.80ms 0.02ms 115.48ms 6 | Requests: 7 | Total: 3668690 Req/Sec: 183629.78 8 | Transfer: 9 | Total: 349.83 MB Transfer Rate: 17.51 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 37.56ms | 14 | | 99% | 25.70ms | 15 | | 95% | 15.68ms | 16 | | 90% | 11.91ms | 17 | | 75% | 7.53ms | 18 | | 50% | 4.66ms | 19 | + --------------- + --------------- + 20 | 21 | 443 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/may-minihttp/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.35ms 0.15ms 0.01ms 7.68ms 6 | Requests: 7 | Total: 3631909 Req/Sec: 181688.09 8 | Transfer: 9 | Total: 346.37 MB Transfer Rate: 17.33 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.93ms | 14 | | 99% | 0.97ms | 15 | | 95% | 0.75ms | 16 | | 90% | 0.66ms | 17 | | 75% | 0.53ms | 18 | | 50% | 0.45ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/nickel/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.76ms 8.89ms 0.02ms 635.32ms 6 | Requests: 7 | Total: 2747419 Req/Sec: 137511.89 8 | Transfer: 9 | Total: 385.07 MB Transfer Rate: 19.27 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 218.01ms | 14 | | 99% | 53.17ms | 15 | | 95% | 13.68ms | 16 | | 90% | 6.91ms | 17 | | 75% | 2.83ms | 18 | | 50% | 1.46ms | 19 | + --------------- + --------------- + 20 | 21 | 74310 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/nickel/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.08ms 0.04ms 0.02ms 9.51ms 6 | Requests: 7 | Total: 3151260 Req/Sec: 157611.85 8 | Transfer: 9 | Total: 453.80 MB Transfer Rate: 22.70 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.68ms | 14 | | 99% | 0.24ms | 15 | | 95% | 0.15ms | 16 | | 90% | 0.13ms | 17 | | 75% | 0.11ms | 18 | | 50% | 0.10ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/nickel/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/nickel/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 96.23ms 147.12ms 14.54ms 1340.39ms 6 | Requests: 7 | Total: 905718 Req/Sec: 20128.13 8 | Transfer: 9 | Total: 1.73 MB Transfer Rate: 39.36 KB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1061.11ms | 14 | | 99% | 945.37ms | 15 | | 95% | 701.37ms | 16 | | 90% | 447.60ms | 17 | | 75% | 217.73ms | 18 | | 50% | 137.97ms | 19 | + --------------- + --------------- + 20 | 21 | 894756 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 1 Errors: connection error: Connection reset by peer (os error 54) 23 | 24 | -------------------------------------------------------------------------------- /perf/nickel/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.08ms 0.11ms 0.02ms 19.85ms 6 | Requests: 7 | Total: 3078213 Req/Sec: 153965.36 8 | Transfer: 9 | Total: 443.26 MB Transfer Rate: 22.17 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.41ms | 14 | | 99% | 0.32ms | 15 | | 95% | 0.18ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.12ms | 18 | | 50% | 0.10ms | 19 | + --------------- + --------------- + 20 | 21 | 283 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/nickel/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.08ms 0.04ms 0.02ms 7.42ms 6 | Requests: 7 | Total: 3120998 Req/Sec: 156104.98 8 | Transfer: 9 | Total: 449.44 MB Transfer Rate: 22.48 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.81ms | 14 | | 99% | 0.26ms | 15 | | 95% | 0.16ms | 16 | | 90% | 0.14ms | 17 | | 75% | 0.11ms | 18 | | 50% | 0.10ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/nickel/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.29ms 0.02ms 116.77ms 6 | Requests: 7 | Total: 2898859 Req/Sec: 145019.40 8 | Transfer: 9 | Total: 416.94 MB Transfer Rate: 20.86 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.87ms | 14 | | 99% | 1.14ms | 15 | | 95% | 0.36ms | 16 | | 90% | 0.24ms | 17 | | 75% | 0.16ms | 18 | | 50% | 0.12ms | 19 | + --------------- + --------------- + 20 | 21 | 1 Errors: connection closed 22 | 3923 Errors: error shutting down connection: Socket is not connected (os error 57) 23 | 24 | -------------------------------------------------------------------------------- /perf/nickel/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.08ms 0.04ms 0.02ms 9.25ms 6 | Requests: 7 | Total: 3119802 Req/Sec: 156044.79 8 | Transfer: 9 | Total: 449.27 MB Transfer Rate: 22.47 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.76ms | 14 | | 99% | 0.25ms | 15 | | 95% | 0.16ms | 16 | | 90% | 0.14ms | 17 | | 75% | 0.11ms | 18 | | 50% | 0.10ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/ntex/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.89ms 15.24ms 0.05ms 128.54ms 6 | Requests: 7 | Total: 2963304 Req/Sec: 148314.88 8 | Transfer: 9 | Total: 364.19 MB Transfer Rate: 18.23 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 107.35ms | 14 | | 99% | 85.73ms | 15 | | 95% | 63.00ms | 16 | | 90% | 48.37ms | 17 | | 75% | 22.82ms | 18 | | 50% | 12.50ms | 19 | + --------------- + --------------- + 20 | 21 | 2949 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/ntex/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.81ms 0.34ms 0.02ms 26.16ms 6 | Requests: 7 | Total: 3159623 Req/Sec: 158018.69 8 | Transfer: 9 | Total: 388.71 MB Transfer Rate: 19.44 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 4.88ms | 14 | | 99% | 1.99ms | 15 | | 95% | 1.55ms | 16 | | 90% | 1.42ms | 17 | | 75% | 1.23ms | 18 | | 50% | 1.04ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/ntex/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.10ms 0.08ms 0.02ms 41.72ms 6 | Requests: 7 | Total: 3191402 Req/Sec: 159619.23 8 | Transfer: 9 | Total: 392.62 MB Transfer Rate: 19.64 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.06ms | 14 | | 99% | 0.33ms | 15 | | 95% | 0.21ms | 16 | | 90% | 0.18ms | 17 | | 75% | 0.15ms | 18 | | 50% | 0.13ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/ntex/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 11.64ms 22.47ms 0.03ms 696.45ms 6 | Requests: 7 | Total: 7906865 Req/Sec: 175725.99 8 | Transfer: 9 | Total: 970.32 MB Transfer Rate: 21.56 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 246.00ms | 14 | | 99% | 114.72ms | 15 | | 95% | 75.31ms | 16 | | 90% | 63.26ms | 17 | | 75% | 43.00ms | 18 | | 50% | 22.44ms | 19 | + --------------- + --------------- + 20 | 21 | 19633 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/ntex/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.70ms 0.76ms 0.02ms 114.13ms 6 | Requests: 7 | Total: 3010390 Req/Sec: 150558.45 8 | Transfer: 9 | Total: 370.34 MB Transfer Rate: 18.52 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 9.53ms | 14 | | 99% | 3.92ms | 15 | | 95% | 3.08ms | 16 | | 90% | 2.86ms | 17 | | 75% | 2.53ms | 18 | | 50% | 2.19ms | 19 | + --------------- + --------------- + 20 | 21 | 115 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/ntex/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.19ms 0.13ms 0.02ms 57.92ms 6 | Requests: 7 | Total: 3342806 Req/Sec: 167185.81 8 | Transfer: 9 | Total: 411.25 MB Transfer Rate: 20.57 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.74ms | 14 | | 99% | 0.58ms | 15 | | 95% | 0.40ms | 16 | | 90% | 0.35ms | 17 | | 75% | 0.28ms | 18 | | 50% | 0.24ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/ntex/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.47ms 5.67ms 0.04ms 111.74ms 6 | Requests: 7 | Total: 2946083 Req/Sec: 147421.38 8 | Transfer: 9 | Total: 362.38 MB Transfer Rate: 18.13 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 53.43ms | 14 | | 99% | 38.37ms | 15 | | 95% | 24.91ms | 16 | | 90% | 17.67ms | 17 | | 75% | 9.08ms | 18 | | 50% | 5.64ms | 19 | + --------------- + --------------- + 20 | 21 | 440 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/ntex/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.40ms 0.33ms 0.02ms 111.84ms 6 | Requests: 7 | Total: 3204283 Req/Sec: 160296.77 8 | Transfer: 9 | Total: 394.20 MB Transfer Rate: 19.72 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.63ms | 14 | | 99% | 1.16ms | 15 | | 95% | 0.82ms | 16 | | 90% | 0.73ms | 17 | | 75% | 0.61ms | 18 | | 50% | 0.51ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/poem/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.67ms 14.46ms 0.03ms 125.03ms 6 | Requests: 7 | Total: 3063010 Req/Sec: 153259.28 8 | Transfer: 9 | Total: 379.35 MB Transfer Rate: 18.98 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 94.48ms | 14 | | 99% | 76.16ms | 15 | | 95% | 57.65ms | 16 | | 90% | 46.89ms | 17 | | 75% | 22.26ms | 18 | | 50% | 12.17ms | 19 | + --------------- + --------------- + 20 | 21 | 3166 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/poem/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.71ms 0.28ms 0.02ms 7.59ms 6 | Requests: 7 | Total: 3579673 Req/Sec: 179017.90 8 | Transfer: 9 | Total: 443.80 MB Transfer Rate: 22.19 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.89ms | 14 | | 99% | 1.70ms | 15 | | 95% | 1.43ms | 16 | | 90% | 1.30ms | 17 | | 75% | 1.08ms | 18 | | 50% | 0.92ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/poem/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.03ms 0.02ms 4.73ms 6 | Requests: 7 | Total: 3605724 Req/Sec: 180297.80 8 | Transfer: 9 | Total: 447.03 MB Transfer Rate: 22.35 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.36ms | 14 | | 99% | 0.22ms | 15 | | 95% | 0.17ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.13ms | 18 | | 50% | 0.11ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/poem/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 24.46ms 59.97ms 0.03ms 553.29ms 6 | Requests: 7 | Total: 3765257 Req/Sec: 83673.54 8 | Transfer: 9 | Total: 464.45 MB Transfer Rate: 10.32 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 349.51ms | 14 | | 99% | 251.65ms | 15 | | 95% | 217.75ms | 16 | | 90% | 197.79ms | 17 | | 75% | 89.57ms | 18 | | 50% | 46.77ms | 19 | + --------------- + --------------- + 20 | 21 | 19011 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/poem/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.60ms 0.65ms 0.02ms 22.80ms 6 | Requests: 7 | Total: 3198241 Req/Sec: 159960.78 8 | Transfer: 9 | Total: 396.50 MB Transfer Rate: 19.83 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 8.02ms | 14 | | 99% | 3.76ms | 15 | | 95% | 3.03ms | 16 | | 90% | 2.80ms | 17 | | 75% | 2.43ms | 18 | | 50% | 2.08ms | 19 | + --------------- + --------------- + 20 | 21 | 116 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/poem/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.07ms 0.02ms 5.24ms 6 | Requests: 7 | Total: 3680634 Req/Sec: 184060.96 8 | Transfer: 9 | Total: 456.32 MB Transfer Rate: 22.82 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.66ms | 14 | | 99% | 0.43ms | 15 | | 95% | 0.34ms | 16 | | 90% | 0.30ms | 17 | | 75% | 0.25ms | 18 | | 50% | 0.22ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/poem/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.38ms 5.57ms 0.04ms 77.54ms 6 | Requests: 7 | Total: 3021602 Req/Sec: 151142.33 8 | Transfer: 9 | Total: 374.53 MB Transfer Rate: 18.73 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 53.14ms | 14 | | 99% | 38.04ms | 15 | | 95% | 24.11ms | 16 | | 90% | 17.48ms | 17 | | 75% | 8.91ms | 18 | | 50% | 5.52ms | 19 | + --------------- + --------------- + 20 | 21 | 633 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/poem/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.35ms 0.13ms 0.02ms 4.07ms 6 | Requests: 7 | Total: 3700404 Req/Sec: 185047.98 8 | Transfer: 9 | Total: 458.77 MB Transfer Rate: 22.94 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.14ms | 14 | | 99% | 0.83ms | 15 | | 95% | 0.70ms | 16 | | 90% | 0.61ms | 17 | | 75% | 0.51ms | 18 | | 50% | 0.44ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/roa/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 5.99ms 12.50ms 0.04ms 131.05ms 6 | Requests: 7 | Total: 3412299 Req/Sec: 170804.70 8 | Transfer: 9 | Total: 286.08 MB Transfer Rate: 14.32 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 77.52ms | 14 | | 99% | 60.27ms | 15 | | 95% | 47.73ms | 16 | | 90% | 40.69ms | 17 | | 75% | 20.37ms | 18 | | 50% | 11.07ms | 19 | + --------------- + --------------- + 20 | 21 | 3480 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/roa/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.74ms 0.33ms 0.02ms 10.77ms 6 | Requests: 7 | Total: 3467218 Req/Sec: 173465.85 8 | Transfer: 9 | Total: 290.98 MB Transfer Rate: 14.56 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 4.61ms | 14 | | 99% | 2.05ms | 15 | | 95% | 1.55ms | 16 | | 90% | 1.40ms | 17 | | 75% | 1.16ms | 18 | | 50% | 0.96ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/roa/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/roa/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 21.14ms 48.48ms 0.03ms 692.47ms 6 | Requests: 7 | Total: 4355959 Req/Sec: 96809.89 8 | Transfer: 9 | Total: 363.97 MB Transfer Rate: 8.09 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 392.67ms | 14 | | 99% | 223.20ms | 15 | | 95% | 184.92ms | 16 | | 90% | 155.98ms | 17 | | 75% | 77.37ms | 18 | | 50% | 40.65ms | 19 | + --------------- + --------------- + 20 | 21 | 18992 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/roa/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.39ms 0.57ms 0.01ms 18.41ms 6 | Requests: 7 | Total: 3685447 Req/Sec: 184422.46 8 | Transfer: 9 | Total: 309.29 MB Transfer Rate: 15.48 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 6.52ms | 14 | | 99% | 3.43ms | 15 | | 95% | 2.79ms | 16 | | 90% | 2.52ms | 17 | | 75% | 2.10ms | 18 | | 50% | 1.80ms | 19 | + --------------- + --------------- + 20 | 21 | 7 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/roa/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.07ms 0.01ms 4.88ms 6 | Requests: 7 | Total: 3853159 Req/Sec: 192720.82 8 | Transfer: 9 | Total: 323.37 MB Transfer Rate: 16.17 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.19ms | 14 | | 99% | 0.51ms | 15 | | 95% | 0.34ms | 16 | | 90% | 0.29ms | 17 | | 75% | 0.24ms | 18 | | 50% | 0.21ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/roa/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 2.99ms 4.44ms 0.03ms 116.08ms 6 | Requests: 7 | Total: 3418592 Req/Sec: 170993.94 8 | Transfer: 9 | Total: 286.84 MB Transfer Rate: 14.35 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 39.60ms | 14 | | 99% | 28.15ms | 15 | | 95% | 18.73ms | 16 | | 90% | 14.41ms | 17 | | 75% | 8.15ms | 18 | | 50% | 5.00ms | 19 | + --------------- + --------------- + 20 | 21 | 667 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/roa/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.33ms 0.14ms 0.01ms 9.77ms 6 | Requests: 7 | Total: 3886353 Req/Sec: 194383.61 8 | Transfer: 9 | Total: 326.16 MB Transfer Rate: 16.31 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.26ms | 14 | | 99% | 0.97ms | 15 | | 95% | 0.68ms | 16 | | 90% | 0.58ms | 17 | | 75% | 0.48ms | 18 | | 50% | 0.42ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/rocket/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 7.90ms 17.73ms 0.05ms 131.00ms 6 | Requests: 7 | Total: 2586775 Req/Sec: 129422.44 8 | Transfer: 9 | Total: 608.53 MB Transfer Rate: 30.45 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 118.28ms | 14 | | 99% | 93.78ms | 15 | | 95% | 71.93ms | 16 | | 90% | 58.01ms | 17 | | 75% | 25.89ms | 18 | | 50% | 14.19ms | 19 | + --------------- + --------------- + 20 | 21 | 3398 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/rocket/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.00ms 0.33ms 0.02ms 13.10ms 6 | Requests: 7 | Total: 2553577 Req/Sec: 127738.41 8 | Transfer: 9 | Total: 601.51 MB Transfer Rate: 30.09 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 4.66ms | 14 | | 99% | 2.24ms | 15 | | 95% | 1.69ms | 16 | | 90% | 1.56ms | 17 | | 75% | 1.41ms | 18 | | 50% | 1.25ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/rocket/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.11ms 0.06ms 0.02ms 7.60ms 6 | Requests: 7 | Total: 2950284 Req/Sec: 147545.82 8 | Transfer: 9 | Total: 694.96 MB Transfer Rate: 34.76 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.23ms | 14 | | 99% | 0.37ms | 15 | | 95% | 0.23ms | 16 | | 90% | 0.20ms | 17 | | 75% | 0.16ms | 18 | | 50% | 0.14ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/rocket/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 27.06ms 65.54ms 0.07ms 687.93ms 6 | Requests: 7 | Total: 3402200 Req/Sec: 75606.47 8 | Transfer: 9 | Total: 797.00 MB Transfer Rate: 17.71 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 444.10ms | 14 | | 99% | 270.97ms | 15 | | 95% | 232.99ms | 16 | | 90% | 212.95ms | 17 | | 75% | 98.95ms | 18 | | 50% | 51.61ms | 19 | + --------------- + --------------- + 20 | 21 | 18734 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/rocket/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.96ms 0.61ms 0.03ms 18.71ms 6 | Requests: 7 | Total: 2613376 Req/Sec: 130740.92 8 | Transfer: 9 | Total: 615.59 MB Transfer Rate: 30.80 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.79ms | 14 | | 99% | 4.08ms | 15 | | 95% | 3.19ms | 16 | | 90% | 2.97ms | 17 | | 75% | 2.70ms | 18 | | 50% | 2.43ms | 19 | + --------------- + --------------- + 20 | 21 | 47 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/rocket/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.22ms 0.11ms 0.02ms 10.35ms 6 | Requests: 7 | Total: 2889513 Req/Sec: 144510.43 8 | Transfer: 9 | Total: 680.65 MB Transfer Rate: 34.04 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.87ms | 14 | | 99% | 0.65ms | 15 | | 95% | 0.45ms | 16 | | 90% | 0.40ms | 17 | | 75% | 0.33ms | 18 | | 50% | 0.28ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/rocket/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.90ms 6.87ms 0.06ms 81.84ms 6 | Requests: 7 | Total: 2619054 Req/Sec: 131030.24 8 | Transfer: 9 | Total: 616.84 MB Transfer Rate: 30.86 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 63.45ms | 14 | | 99% | 45.93ms | 15 | | 95% | 30.82ms | 16 | | 90% | 20.37ms | 17 | | 75% | 10.00ms | 18 | | 50% | 6.21ms | 19 | + --------------- + --------------- + 20 | 21 | 433 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/rocket/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.48ms 0.19ms 0.02ms 10.19ms 6 | Requests: 7 | Total: 2638656 Req/Sec: 131955.66 8 | Transfer: 9 | Total: 621.56 MB Transfer Rate: 31.08 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.72ms | 14 | | 99% | 1.16ms | 15 | | 95% | 0.88ms | 16 | | 90% | 0.81ms | 17 | | 75% | 0.71ms | 18 | | 50% | 0.62ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/salvo/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.30ms 12.80ms 0.03ms 122.10ms 6 | Requests: 7 | Total: 3245955 Req/Sec: 162416.75 8 | Transfer: 9 | Total: 402.06 MB Transfer Rate: 20.12 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 89.38ms | 14 | | 99% | 64.96ms | 15 | | 95% | 49.21ms | 16 | | 90% | 41.04ms | 17 | | 75% | 21.22ms | 18 | | 50% | 11.57ms | 19 | + --------------- + --------------- + 20 | 21 | 2980 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/salvo/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.69ms 0.28ms 0.02ms 10.70ms 6 | Requests: 7 | Total: 3728894 Req/Sec: 186513.81 8 | Transfer: 9 | Total: 462.30 MB Transfer Rate: 23.12 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.97ms | 14 | | 99% | 1.84ms | 15 | | 95% | 1.42ms | 16 | | 90% | 1.26ms | 17 | | 75% | 1.03ms | 18 | | 50% | 0.88ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/salvo/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.04ms 0.01ms 8.82ms 6 | Requests: 7 | Total: 3713855 Req/Sec: 185723.57 8 | Transfer: 9 | Total: 460.44 MB Transfer Rate: 23.03 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.72ms | 14 | | 99% | 0.27ms | 15 | | 95% | 0.17ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.13ms | 18 | | 50% | 0.11ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/salvo/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 23.94ms 58.23ms 0.03ms 448.08ms 6 | Requests: 7 | Total: 3846352 Req/Sec: 85473.21 8 | Transfer: 9 | Total: 474.51 MB Transfer Rate: 10.54 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 336.10ms | 14 | | 99% | 243.69ms | 15 | | 95% | 213.09ms | 16 | | 90% | 192.57ms | 17 | | 75% | 87.70ms | 18 | | 50% | 45.82ms | 19 | + --------------- + --------------- + 20 | 21 | 19001 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/salvo/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.47ms 0.60ms 0.02ms 21.19ms 6 | Requests: 7 | Total: 3474653 Req/Sec: 173848.40 8 | Transfer: 9 | Total: 430.78 MB Transfer Rate: 21.55 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.24ms | 14 | | 99% | 3.60ms | 15 | | 95% | 2.91ms | 16 | | 90% | 2.66ms | 17 | | 75% | 2.25ms | 18 | | 50% | 1.92ms | 19 | + --------------- + --------------- + 20 | 21 | 8 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/salvo/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.08ms 0.02ms 7.09ms 6 | Requests: 7 | Total: 3776379 Req/Sec: 188869.98 8 | Transfer: 9 | Total: 468.19 MB Transfer Rate: 23.42 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.35ms | 14 | | 99% | 0.53ms | 15 | | 95% | 0.35ms | 16 | | 90% | 0.30ms | 17 | | 75% | 0.25ms | 18 | | 50% | 0.21ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/salvo/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.08ms 4.71ms 0.03ms 111.42ms 6 | Requests: 7 | Total: 3324851 Req/Sec: 166343.68 8 | Transfer: 9 | Total: 412.16 MB Transfer Rate: 20.62 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 49.29ms | 14 | | 99% | 31.43ms | 15 | | 95% | 19.85ms | 16 | | 90% | 15.01ms | 17 | | 75% | 8.24ms | 18 | | 50% | 5.09ms | 19 | + --------------- + --------------- + 20 | 21 | 395 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/salvo/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.34ms 0.14ms 0.02ms 6.80ms 6 | Requests: 7 | Total: 3765776 Req/Sec: 188333.08 8 | Transfer: 9 | Total: 466.87 MB Transfer Rate: 23.35 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.15ms | 14 | | 99% | 0.99ms | 15 | | 95% | 0.71ms | 16 | | 90% | 0.60ms | 17 | | 75% | 0.50ms | 18 | | 50% | 0.43ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/thruster/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/thruster/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 40.61ms 547.16ms 0.35ms 13118.36ms 6 | Requests: 7 | Total: 16335 Req/Sec: 816.78 8 | Transfer: 9 | Total: 0.00 B Transfer Rate: 0.00 B/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 12315.34ms | 14 | | 99% | 3513.26ms | 15 | | 95% | 712.63ms | 16 | | 90% | 361.54ms | 17 | | 75% | 149.48ms | 18 | | 50% | 77.69ms | 19 | + --------------- + --------------- + 20 | 21 | 16463 Errors: connection closed 22 | 23 | -------------------------------------------------------------------------------- /perf/thruster/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 4.86ms 149.78ms 0.16ms 6722.89ms 6 | Requests: 7 | Total: 16373 Req/Sec: 818.67 8 | Transfer: 9 | Total: 0.00 B Transfer Rate: 0.00 B/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3679.56ms | 14 | | 99% | 400.19ms | 15 | | 95% | 83.46ms | 16 | | 90% | 42.97ms | 17 | | 75% | 17.88ms | 18 | | 50% | 9.26ms | 19 | + --------------- + --------------- + 20 | 21 | 16389 Errors: connection closed 22 | 23 | -------------------------------------------------------------------------------- /perf/thruster/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 20.29ms 49.03ms 0.03ms 672.74ms 6 | Requests: 7 | Total: 4539076 Req/Sec: 100857.60 8 | Transfer: 9 | Total: 439.93 MB Transfer Rate: 9.78 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 399.76ms | 14 | | 99% | 216.57ms | 15 | | 95% | 178.37ms | 16 | | 90% | 158.07ms | 17 | | 75% | 74.55ms | 18 | | 50% | 39.00ms | 19 | + --------------- + --------------- + 20 | 21 | 16504 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/thruster/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 95.68ms 906.53ms 0.12ms 13137.94ms 6 | Requests: 7 | Total: 16259 Req/Sec: 813.25 8 | Transfer: 9 | Total: 0.00 B Transfer Rate: 0.00 B/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 13113.14ms | 14 | | 99% | 8488.05ms | 15 | | 95% | 1789.49ms | 16 | | 90% | 901.40ms | 17 | | 75% | 366.41ms | 18 | | 50% | 187.02ms | 19 | + --------------- + --------------- + 20 | 21 | 753 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 15762 Errors: connection closed 23 | 24 | -------------------------------------------------------------------------------- /perf/thruster/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 10.07ms 290.42ms 0.12ms 13529.24ms 6 | Requests: 7 | Total: 16345 Req/Sec: 817.47 8 | Transfer: 9 | Total: 0.00 B Transfer Rate: 0.00 B/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 8002.73ms | 14 | | 99% | 956.58ms | 15 | | 95% | 193.34ms | 16 | | 90% | 97.19ms | 17 | | 75% | 39.22ms | 18 | | 50% | 19.82ms | 19 | + --------------- + --------------- + 20 | 21 | 16377 Errors: connection closed 22 | 23 | -------------------------------------------------------------------------------- /perf/thruster/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3051.28ms 3340.39ms 0.26ms 6737.91ms 6 | Requests: 7 | Total: 267 Req/Sec: 13.36 8 | Transfer: 9 | Total: 0.00 B Transfer Rate: 0.00 B/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 6737.91ms | 14 | | 99% | 6736.49ms | 15 | | 95% | 6733.14ms | 16 | | 90% | 6731.54ms | 17 | | 75% | 6727.61ms | 18 | | 50% | 6116.69ms | 19 | + --------------- + --------------- + 20 | 21 | 548 Errors: connection closed 22 | 23 | -------------------------------------------------------------------------------- /perf/thruster/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3099.55ms 3345.02ms 0.73ms 6714.79ms 6 | Requests: 7 | Total: 26 Req/Sec: 1.30 8 | Transfer: 9 | Total: 0.00 B Transfer Rate: 0.00 B/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 6714.79ms | 14 | | 99% | 6714.79ms | 15 | | 95% | 6714.79ms | 16 | | 90% | 6714.78ms | 17 | | 75% | 6714.61ms | 18 | | 50% | 6196.54ms | 19 | + --------------- + --------------- + 20 | 21 | 61 Errors: connection closed 22 | 23 | -------------------------------------------------------------------------------- /perf/tide/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 11.13ms 11.82ms 0.12ms 124.16ms 6 | Requests: 7 | Total: 1837182 Req/Sec: 91921.80 8 | Transfer: 9 | Total: 225.70 MB Transfer Rate: 11.29 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 71.16ms | 14 | | 99% | 57.28ms | 15 | | 95% | 43.35ms | 16 | | 90% | 37.39ms | 17 | | 75% | 29.48ms | 18 | | 50% | 18.81ms | 19 | + --------------- + --------------- + 20 | 21 | 2680 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/tide/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.43ms 0.39ms 0.05ms 15.75ms 6 | Requests: 7 | Total: 1793237 Req/Sec: 89692.57 8 | Transfer: 9 | Total: 220.62 MB Transfer Rate: 11.03 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.14ms | 14 | | 99% | 3.10ms | 15 | | 95% | 2.24ms | 16 | | 90% | 2.06ms | 17 | | 75% | 1.85ms | 18 | | 50% | 1.69ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/tide/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/tide/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 31.73ms 35.47ms 0.10ms 548.58ms 6 | Requests: 7 | Total: 2902094 Req/Sec: 64492.53 8 | Transfer: 9 | Total: 354.67 MB Transfer Rate: 7.88 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 378.25ms | 14 | | 99% | 186.47ms | 15 | | 95% | 123.31ms | 16 | | 90% | 108.51ms | 17 | | 75% | 82.52ms | 18 | | 50% | 56.59ms | 19 | + --------------- + --------------- + 20 | 21 | 19228 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/tide/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 2.79ms 0.61ms 0.05ms 18.14ms 6 | Requests: 7 | Total: 1830549 Req/Sec: 91571.55 8 | Transfer: 9 | Total: 225.22 MB Transfer Rate: 11.27 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 11.45ms | 14 | | 99% | 5.36ms | 15 | | 95% | 4.13ms | 16 | | 90% | 3.84ms | 17 | | 75% | 3.49ms | 18 | | 50% | 3.21ms | 19 | + --------------- + --------------- + 20 | 21 | 50 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/tide/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.32ms 0.12ms 0.03ms 6.30ms 6 | Requests: 7 | Total: 1992672 Req/Sec: 99647.95 8 | Transfer: 9 | Total: 245.15 MB Transfer Rate: 12.26 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.89ms | 14 | | 99% | 0.84ms | 15 | | 95% | 0.60ms | 16 | | 90% | 0.54ms | 17 | | 75% | 0.47ms | 18 | | 50% | 0.41ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/tide/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 5.51ms 3.55ms 0.09ms 110.18ms 6 | Requests: 7 | Total: 1854294 Req/Sec: 92786.89 8 | Transfer: 9 | Total: 228.06 MB Transfer Rate: 11.41 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 29.32ms | 14 | | 99% | 21.66ms | 15 | | 95% | 16.59ms | 16 | | 90% | 14.21ms | 17 | | 75% | 10.41ms | 18 | | 50% | 7.71ms | 19 | + --------------- + --------------- + 20 | 21 | 477 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/tide/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.72ms 0.21ms 0.04ms 6.13ms 6 | Requests: 7 | Total: 1786699 Req/Sec: 89351.81 8 | Transfer: 9 | Total: 219.81 MB Transfer Rate: 10.99 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.87ms | 14 | | 99% | 1.57ms | 15 | | 95% | 1.17ms | 16 | | 90% | 1.07ms | 17 | | 75% | 0.96ms | 18 | | 50% | 0.87ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | No requests completed successfully 4 | 5 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 9.75ms 6.03ms 3.80ms 478.75ms 6 | Requests: 7 | Total: 9443464 Req/Sec: 209885.15 8 | Transfer: 9 | Total: 925.78 MB Transfer Rate: 20.58 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 149.64ms | 14 | | 99% | 35.43ms | 15 | | 95% | 16.92ms | 16 | | 90% | 13.64ms | 17 | | 75% | 11.15ms | 18 | | 50% | 10.25ms | 19 | + --------------- + --------------- + 20 | 21 | 18691 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/tokio-minihttp/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | -------------------------------------------------------------------------------- /perf/viz/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.24ms 12.72ms 0.03ms 123.27ms 6 | Requests: 7 | Total: 3277666 Req/Sec: 164009.03 8 | Transfer: 9 | Total: 406.01 MB Transfer Rate: 20.32 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 81.06ms | 14 | | 99% | 64.98ms | 15 | | 95% | 49.01ms | 16 | | 90% | 40.86ms | 17 | | 75% | 21.01ms | 18 | | 50% | 11.46ms | 19 | + --------------- + --------------- + 20 | 21 | 2775 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/viz/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.69ms 0.29ms 0.02ms 12.22ms 6 | Requests: 7 | Total: 3723062 Req/Sec: 186289.11 8 | Transfer: 9 | Total: 461.58 MB Transfer Rate: 23.10 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 4.16ms | 14 | | 99% | 1.89ms | 15 | | 95% | 1.44ms | 16 | | 90% | 1.26ms | 17 | | 75% | 1.03ms | 18 | | 50% | 0.88ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/viz/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.05ms 0.01ms 7.62ms 6 | Requests: 7 | Total: 3677482 Req/Sec: 183957.82 8 | Transfer: 9 | Total: 455.93 MB Transfer Rate: 22.81 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.81ms | 14 | | 99% | 0.29ms | 15 | | 95% | 0.18ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.13ms | 18 | | 50% | 0.11ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/viz/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 24.08ms 59.59ms 0.03ms 769.64ms 6 | Requests: 7 | Total: 3823637 Req/Sec: 84979.11 8 | Transfer: 9 | Total: 471.69 MB Transfer Rate: 10.48 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 516.41ms | 14 | | 99% | 261.12ms | 15 | | 95% | 214.27ms | 16 | | 90% | 192.73ms | 17 | | 75% | 88.15ms | 18 | | 50% | 46.06ms | 19 | + --------------- + --------------- + 20 | 21 | 18986 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/viz/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.47ms 0.62ms 0.02ms 18.73ms 6 | Requests: 7 | Total: 3476747 Req/Sec: 173950.96 8 | Transfer: 9 | Total: 431.04 MB Transfer Rate: 21.57 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 7.97ms | 14 | | 99% | 3.74ms | 15 | | 95% | 2.94ms | 16 | | 90% | 2.68ms | 17 | | 75% | 2.25ms | 18 | | 50% | 1.92ms | 19 | + --------------- + --------------- + 20 | 21 | 8 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/viz/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.08ms 0.01ms 6.86ms 6 | Requests: 7 | Total: 3752403 Req/Sec: 187664.10 8 | Transfer: 9 | Total: 465.21 MB Transfer Rate: 23.27 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.22ms | 14 | | 99% | 0.51ms | 15 | | 95% | 0.35ms | 16 | | 90% | 0.30ms | 17 | | 75% | 0.25ms | 18 | | 50% | 0.22ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/viz/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.04ms 4.62ms 0.03ms 107.31ms 6 | Requests: 7 | Total: 3366015 Req/Sec: 168417.21 8 | Transfer: 9 | Total: 417.26 MB Transfer Rate: 20.88 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 45.05ms | 14 | | 99% | 30.59ms | 15 | | 95% | 19.55ms | 16 | | 90% | 14.85ms | 17 | | 75% | 8.15ms | 18 | | 50% | 5.03ms | 19 | + --------------- + --------------- + 20 | 21 | 398 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/viz/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.34ms 0.15ms 0.02ms 8.79ms 6 | Requests: 7 | Total: 3744126 Req/Sec: 187274.25 8 | Transfer: 9 | Total: 464.19 MB Transfer Rate: 23.22 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.54ms | 14 | | 99% | 1.03ms | 15 | | 95% | 0.72ms | 16 | | 90% | 0.61ms | 17 | | 75% | 0.50ms | 18 | | 50% | 0.43ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/warp/1024.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 1024 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 6.32ms 12.90ms 0.03ms 148.36ms 6 | Requests: 7 | Total: 3234786 Req/Sec: 161833.84 8 | Transfer: 9 | Total: 397.53 MB Transfer Rate: 19.89 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 80.68ms | 14 | | 99% | 62.99ms | 15 | | 95% | 49.17ms | 16 | | 90% | 41.63ms | 17 | | 75% | 21.42ms | 18 | | 50% | 11.66ms | 19 | + --------------- + --------------- + 20 | 21 | 3438 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/warp/128.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 128 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.71ms 0.29ms 0.02ms 11.55ms 6 | Requests: 7 | Total: 3618805 Req/Sec: 181017.61 8 | Transfer: 9 | Total: 445.20 MB Transfer Rate: 22.27 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 3.76ms | 14 | | 99% | 1.84ms | 15 | | 95% | 1.46ms | 16 | | 90% | 1.32ms | 17 | | 75% | 1.08ms | 18 | | 50% | 0.91ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/warp/16.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 16 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.09ms 0.04ms 0.01ms 8.17ms 6 | Requests: 7 | Total: 3718101 Req/Sec: 185944.37 8 | Transfer: 9 | Total: 457.42 MB Transfer Rate: 22.88 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 0.73ms | 14 | | 99% | 0.28ms | 15 | | 95% | 0.18ms | 16 | | 90% | 0.15ms | 17 | | 75% | 0.13ms | 18 | | 50% | 0.11ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/warp/2048.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 2048 connections @ http://localhost:3000 for 45 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 22.19ms 52.96ms 0.03ms 614.50ms 6 | Requests: 7 | Total: 4149240 Req/Sec: 92201.87 8 | Transfer: 9 | Total: 508.23 MB Transfer Rate: 11.29 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 397.28ms | 14 | | 99% | 235.68ms | 15 | | 95% | 198.97ms | 16 | | 90% | 172.59ms | 17 | | 75% | 81.26ms | 18 | | 50% | 42.59ms | 19 | + --------------- + --------------- + 20 | 21 | 18101 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/warp/256.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 256 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 1.50ms 0.62ms 0.02ms 19.74ms 6 | Requests: 7 | Total: 3418322 Req/Sec: 171048.52 8 | Transfer: 9 | Total: 420.53 MB Transfer Rate: 21.04 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 6.95ms | 14 | | 99% | 3.57ms | 15 | | 95% | 2.94ms | 16 | | 90% | 2.71ms | 17 | | 75% | 2.30ms | 18 | | 50% | 1.95ms | 19 | + --------------- + --------------- + 20 | 21 | 66 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/warp/32.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 32 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.17ms 0.08ms 0.01ms 7.73ms 6 | Requests: 7 | Total: 3770117 Req/Sec: 188557.07 8 | Transfer: 9 | Total: 463.81 MB Transfer Rate: 23.20 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 1.22ms | 14 | | 99% | 0.52ms | 15 | | 95% | 0.36ms | 16 | | 90% | 0.30ms | 17 | | 75% | 0.25ms | 18 | | 50% | 0.22ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /perf/warp/512.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 512 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 3.10ms 4.62ms 0.03ms 108.67ms 6 | Requests: 7 | Total: 3291918 Req/Sec: 164739.91 8 | Transfer: 9 | Total: 404.92 MB Transfer Rate: 20.26 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 43.28ms | 14 | | 99% | 29.39ms | 15 | | 95% | 19.54ms | 16 | | 90% | 14.98ms | 17 | | 75% | 8.42ms | 18 | | 50% | 5.18ms | 19 | + --------------- + --------------- + 20 | 21 | 522 Errors: error shutting down connection: Socket is not connected (os error 57) 22 | 23 | -------------------------------------------------------------------------------- /perf/warp/64.txt: -------------------------------------------------------------------------------- 1 | Beginning round 1... 2 | Benchmarking 64 connections @ http://localhost:3000 for 20 second(s) 3 | Latencies: 4 | Avg Stdev Min Max 5 | 0.35ms 0.15ms 0.02ms 8.61ms 6 | Requests: 7 | Total: 3683484 Req/Sec: 184210.01 8 | Transfer: 9 | Total: 453.16 MB Transfer Rate: 22.66 MB/Sec 10 | + --------------- + --------------- + 11 | | Percentile | Avg Latency | 12 | + --------------- + --------------- + 13 | | 99.9% | 2.15ms | 14 | | 99% | 1.01ms | 15 | | 95% | 0.75ms | 16 | | 90% | 0.65ms | 17 | | 75% | 0.52ms | 18 | | 50% | 0.44ms | 19 | + --------------- + --------------- + 20 | 21 | -------------------------------------------------------------------------------- /readme.dev.md: -------------------------------------------------------------------------------- 1 | # Rust framework benchmarks 2 | 3 | Benchmarking utility to test the performance of all the rust web frameworks. Built with [rust](https://rust-lang.org) 🚀. 4 | 5 | # Demo 6 | ![Demo](https://s4.gifyu.com/images/outputf55c6e3d5b6a1f8e.gif) 7 | 8 | 9 | 10 | ### **(Last updated: Wed Jul 27 2022 02:59:45)** 11 | 12 | ## Frameworks included 13 | **[Nickel](https://github.com/nickel-org/nickel.rs)** - An expressjs inspired framework for rust
14 | # Results 15 | | Concurrency: 2048 | Duration: 45 secs | Threads: 2 | 16 | |:-------------------:|:---------------------:|:--------------:| 17 | 18 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 19 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 20 | |**Nickel** |20,128|96.23ms|14.54ms|1340.39ms|147.12ms|701.37ms|945.37ms|1061.11ms|905,718|39.36KB/Sec|894756| 21 | 22 | 23 | 24 | 25 | 26 | 27 | ## Benchmarking tool 28 | The benchmarks have been performed using [rewrk](https://github.com/ChillFish8/rewrk), locally. 29 | 30 | Check the raw output from rewrk [here](https://github.com/Ishtmeet-Singh/rust-framework-benchmarks/tree/master/perf). 31 | 32 | 33 | ## Try it yourself 34 | Everything is automated, including adding a framework, generating `md` file output, and running the tests without having to start all the servers at once! 35 | 36 | Pleas make sure you do not have capped soft limit or hard limit for file descriptors, this may cause benchmarks with high concurrency (-c) fail with OS error 54, 37 | to fix that - 38 | 39 | ## Linux 40 | 1. Open `/etc/sysctl.conf` 41 | 2. Add `fs.file-max = 65536` 42 | 3. Reboot your pc and verify it after rebooting with `sysctl -p` 43 | 44 | ## Mac 45 | 1. Check your current limit - `launchctl limit maxfiles` 46 | 2. The first entry is the soft limit, and the second entry is hard limit. In most cases the hard limit is unlimited, it's the soft limit that we need to change 47 | 3. Update the hard limit `sudo launchctl limit maxfiles 65536 200000` 48 | 4. Reboot. 49 | 50 | Alternatively, if you wish to change the soft limit to only run the benchmark one time, you can change it for your current terminal session by 51 | `ulimit -n 65536`. 52 | This doesn't require boot, and will reset back to the default (usually 2560) after restarting the terminal. 53 | 54 | To run the tests locally, please follow the steps - 55 | 56 | 1. Download the repository as a zip, or clone/fork it. 57 | 2. `cd rust-framework-benchmarks` 58 | 3. `cargo build --release --bins` 59 | 4. Run the main script and you're good to go.. 60 | `./target/release/main` or `cargo run --release --bin main` 61 | 62 | All the output will be stored in `perf/{name}/{concurrency}.txt*` 63 | 64 | ## Machine used 65 | M1 Max MacBook Pro 2021 - 64GB ram, 10 CPU cores and 32 GPU cores 66 | 67 | ## Suggestions and changes 68 | All the suggestions, code changes or additions of another web framework is appreciated. I'd like to keep the code as close as a real world scenario, instead of optimising it to the metal. 69 | 70 | To add a new library/framework, please make sure to use the `PORT` provided through the benchmark dynamically. Default is `3000` for all. You can change it in `config.json`. 71 | 72 | Also, to add a framework, add an entry inside `config.json` for the benchmarks to detect it. 73 | 74 | ```json 75 | [ 76 | { 77 | // Name of your framework. Displayed in the readme and during logs 78 | "name": "Axum", 79 | // Default for all the frameworks 80 | "port": 3000, 81 | // the name of the file that your framework is located 82 | "binary": "axum", 83 | // Github or Crates.io or Website 84 | "url": "https://github.com/tokio-rs/axum" 85 | } 86 | ] 87 | ``` 88 | 89 | ```rs 90 | fn get_port_number() -> String { 91 | std::env::args().collect::>()[1].clone() 92 | } 93 | Server::build().bind("hello-world", format!("127.0.0.1:{}", port_number)) 94 | ``` 95 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Rust framework benchmarks 2 | 3 | Benchmarking utility to test the performance of any backend/server side frameworks. Built with [rust](https://rust-lang.org) 🚀. (currently only rust/golang based frameworks supported) 4 | 5 | # Demo 6 | 7 | ![Demo](https://s4.gifyu.com/images/outputf55c6e3d5b6a1f8e.gif) 8 | 9 | ### **(Last updated: Fri Jul 14 2023 11:49:45)** 10 | 11 | ## Try it yourself 12 | 13 | Everything is automated, including adding a framework, generating `md` file output, and running the tests without having to start all the servers at once! 14 | 15 | Pleas make sure you do not have capped soft limit or hard limit for file descriptors, this may cause benchmarks with high concurrency (-c) fail with OS error 54, 16 | to fix that - 17 | 18 | ## Linux 19 | 20 | 1. Open `/etc/sysctl.conf` 21 | 2. Add `fs.file-max = 65536` 22 | 3. Reboot your pc and verify it after rebooting with `sysctl -p` 23 | 24 | ## Mac 25 | 26 | 1. Check your current limit - `launchctl limit maxfiles` 27 | 2. The first entry is the soft limit, and the second entry is hard limit. In most cases the hard limit is unlimited, it's the soft limit that we need to change 28 | 3. Update the hard limit `sudo launchctl limit maxfiles 65536 200000` 29 | 4. Reboot. 30 | 31 | Alternatively, if you wish to change the soft limit to only run the benchmark one time, you can change it for your current terminal session by 32 | `ulimit -n 65536`. 33 | This doesn't require boot, and will reset back to the default (usually 2560) after restarting the terminal. 34 | 35 | To run the tests locally, please follow the steps - 36 | 37 | 1. Download the repository as a zip, or clone/fork it. 38 | 2. `cd rust-framework-benchmarks` 39 | 3. `cargo build --release --bins` 40 | 4. Run the main script and you're good to go.. 41 | `./target/release/main` or `cargo run --release --bin main` 42 | 43 | All the output will be stored in `perf/{name}/{concurrency}.txt*` 44 | 45 | ## Machine used 46 | 47 | M1 Max MacBook Pro 2021 - 64GB ram, 10 CPU cores and 32 GPU cores 48 | 49 | ## Suggestions and changes 50 | 51 | All the suggestions, code changes or additions of another web framework is appreciated. I'd like to keep the code as close as a real world scenario, instead of optimising it to the metal. 52 | 53 | To add a new library/framework, please make sure to use the `PORT` provided through the benchmark dynamically. Default is `3000` for all. You can change it in `config.json`. 54 | 55 | Also, to add a framework, add an entry inside `config.json` for the benchmarks to detect it. 56 | 57 | ```json 58 | [ 59 | { 60 | // Name of your framework. Displayed in the readme and during logs 61 | "name": "Axum", 62 | // Default for all the frameworks 63 | "port": 3000, 64 | // the name of the file that your framework is located 65 | "binary": "axum", 66 | // Github or Crates.io or Website 67 | "url": "https://github.com/tokio-rs/axum" 68 | } 69 | ] 70 | ``` 71 | 72 | ```rs 73 | fn get_port_number() -> String { 74 | std::env::args().collect::>()[1].clone() 75 | } 76 | Server::build().bind("hello-world", format!("127.0.0.1:{}", port_number)) 77 | ``` 78 | 79 | ## Frameworks included 80 | 81 | **[Actix Web](https://actix.rs)** - A powerful, pragmatic, and extremely fast web framework for Rust
82 | **[Hyper](https://hyper.rs)** - Fast and safe HTTP for the Rust language
83 | **[Axum](https://github.com/tokio-rs/axum)** - Web application framework that focuses on ergonomics and modularity
84 | **[Warp](https://github.com/seanmonstar/warp)** - A super-easy, composable, web server framework for warp speeds
85 | **[Ntex](https://github.com/ntex-rs/ntex)** - Framework for composable network services
86 | **[Rocket](https://rocket.rs)** - Write fast, secure web applications without sacrificing flexibility, usability, or type safety
87 | **[Tide](https://github.com/http-rs/tide)** - Minimal and pragmatic Rust web application framework built for rapid development
88 | **[May-MiniHttp](https://github.com/Xudong-Huang/may_minihttp)** - Mini http server that implemented on top of may
89 | **[Viz](https://github.com/viz-rs/viz)** - Fast, robust, flexible, lightweight web framework for Rust
90 | **[Tokio-minihttp](https://github.com/tokio-rs/tokio-minihttp)** - Proof-of-concept implementation of a simple HTTP/1.1 server using Tokio.
91 | **[Thruster](https://github.com/thruster-rs/Thruster)** - A fast and intuitive rust web framework
92 | **[Salvo](https://github.com/salvo-rs/salvo)** - Simple and powerful Rust web backend framework
93 | **[Poem](https://github.com/poem-web/poem)** - A full-featured and easy-to-use web framework
94 | **[Gotham](https://github.com/gotham-rs/gotham)** - A flexible web framework that promotes stability, safety, security and speed.
95 | **[Astra](https://github.com/ibraheemdev/astra)** - Synchronous HTTP server built on top of hyper
96 | **[Nickel](https://github.com/nickel-org/nickel.rs)** - An expressjs inspired framework for rust
97 | **[Roa](https://github.com/Hexilee/roa)** - Roa is an async web framework inspired by koajs, lightweight but powerful.
98 | 99 | # Results 100 | 101 | | Concurrency: 16 | Duration: 20 secs | Threads: 2 | 102 | | :-------------: | :---------------: | :--------: | 103 | 104 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 105 | | :-----------------------: | :-----: | :---------: | :---------: | :---------: | :------: | :-----: | :------: | :-------: | :--------: | :-----------: | :------: | 106 | | **May-MiniHttp** | 196,058 | 0.08ms | 0.01ms | 9.63ms | 0.03ms | 0.15ms | 0.22ms | 0.51ms | 3,919,895 | 18.70MB/Sec | 0 | 107 | | **Hyper** | 185,987 | 0.09ms | 0.01ms | 5.88ms | 0.04ms | 0.18ms | 0.27ms | 0.73ms | 3,718,786 | 15.61MB/Sec | 0 | 108 | | **Warp** | 185,944 | 0.09ms | 0.01ms | 8.17ms | 0.04ms | 0.18ms | 0.28ms | 0.73ms | 3,718,101 | 22.88MB/Sec | 0 | 109 | | **Salvo** | 185,723 | 0.09ms | 0.01ms | 8.82ms | 0.04ms | 0.17ms | 0.27ms | 0.72ms | 3,713,855 | 23.03MB/Sec | 0 | 110 | | **Viz** | 183,957 | 0.09ms | 0.01ms | 7.62ms | 0.05ms | 0.18ms | 0.29ms | 0.81ms | 3,677,482 | 22.81MB/Sec | 0 | 111 | | **Axum** | 182,147 | 0.09ms | 0.01ms | 5.09ms | 0.04ms | 0.18ms | 0.27ms | 0.73ms | 3,642,048 | 22.41MB/Sec | 0 | 112 | | **Poem** | 180,297 | 0.09ms | 0.02ms | 4.73ms | 0.03ms | 0.17ms | 0.22ms | 0.36ms | 3,605,724 | 22.35MB/Sec | 0 | 113 | | **Gotham** | 179,680 | 0.09ms | 0.02ms | 14.68ms | 0.05ms | 0.18ms | 0.28ms | 0.75ms | 3,591,288 | 28.62MB/Sec | 0 | 114 | | **Actix Web** | 166,331 | 0.10ms | 0.01ms | 6.06ms | 0.05ms | 0.22ms | 0.36ms | 1.03ms | 3,326,160 | 20.62MB/Sec | 0 | 115 | | **Astra** | 161,134 | 0.08ms | 0.02ms | 3.84ms | 0.04ms | 0.17ms | 0.26ms | 0.74ms | 3,221,679 | 16.29MB/Sec | 0 | 116 | | **Ntex** | 159,619 | 0.10ms | 0.02ms | 41.72ms | 0.08ms | 0.21ms | 0.33ms | 1.06ms | 3,191,402 | 19.64MB/Sec | 0 | 117 | | **Rocket** | 147,545 | 0.11ms | 0.02ms | 7.60ms | 0.06ms | 0.23ms | 0.37ms | 1.23ms | 2,950,284 | 34.76MB/Sec | 0 | 118 | | **Thruster** | 818 | 4.86ms | 0.16ms | 6722.89ms | 149.78ms | 83.46ms | 400.19ms | 3679.56ms | 16,373 | 0.00B/Sec | 16389 | 119 | | **Tide** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 120 | | **Tokio-minihttp** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 121 | | **Nickel** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 122 | | **Roa** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 123 | 124 | | Concurrency: 32 | Duration: 20 secs | Threads: 2 | 125 | | :-------------: | :---------------: | :--------: | 126 | 127 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 128 | | :-----------------------: | :-----: | :---------: | :---------: | :---------: | :------: | :------: | :------: | :-------: | :--------: | :-----------: | :------: | 129 | | **Roa** | 192,720 | 0.17ms | 0.01ms | 4.88ms | 0.07ms | 0.34ms | 0.51ms | 1.19ms | 3,853,159 | 16.17MB/Sec | 0 | 130 | | **Salvo** | 188,869 | 0.17ms | 0.02ms | 7.09ms | 0.08ms | 0.35ms | 0.53ms | 1.35ms | 3,776,379 | 23.42MB/Sec | 0 | 131 | | **Hyper** | 188,731 | 0.17ms | 0.01ms | 8.02ms | 0.08ms | 0.36ms | 0.53ms | 1.36ms | 3,772,489 | 15.84MB/Sec | 0 | 132 | | **Warp** | 188,557 | 0.17ms | 0.01ms | 7.73ms | 0.08ms | 0.36ms | 0.52ms | 1.22ms | 3,770,117 | 23.20MB/Sec | 0 | 133 | | **Viz** | 187,664 | 0.17ms | 0.01ms | 6.86ms | 0.08ms | 0.35ms | 0.51ms | 1.22ms | 3,752,403 | 23.27MB/Sec | 0 | 134 | | **Axum** | 184,814 | 0.17ms | 0.01ms | 9.98ms | 0.08ms | 0.36ms | 0.52ms | 1.23ms | 3,695,085 | 22.74MB/Sec | 0 | 135 | | **Poem** | 184,060 | 0.17ms | 0.02ms | 5.24ms | 0.07ms | 0.34ms | 0.43ms | 0.66ms | 3,680,634 | 22.82MB/Sec | 0 | 136 | | **Gotham** | 182,769 | 0.17ms | 0.02ms | 10.68ms | 0.08ms | 0.36ms | 0.53ms | 1.29ms | 3,654,263 | 29.11MB/Sec | 0 | 137 | | **May-MiniHttp** | 182,092 | 0.18ms | 0.01ms | 11.56ms | 0.09ms | 0.40ms | 0.59ms | 1.56ms | 3,641,328 | 17.37MB/Sec | 0 | 138 | | **Actix Web** | 171,106 | 0.19ms | 0.02ms | 7.62ms | 0.08ms | 0.39ms | 0.54ms | 1.32ms | 3,421,376 | 21.21MB/Sec | 0 | 139 | | **Ntex** | 167,185 | 0.19ms | 0.02ms | 57.92ms | 0.13ms | 0.40ms | 0.58ms | 1.74ms | 3,342,806 | 20.57MB/Sec | 0 | 140 | | **Astra** | 163,832 | 0.19ms | 0.02ms | 9.38ms | 0.08ms | 0.38ms | 0.55ms | 1.41ms | 3,275,694 | 16.56MB/Sec | 0 | 141 | | **Nickel** | 156,104 | 0.08ms | 0.02ms | 7.42ms | 0.04ms | 0.16ms | 0.26ms | 0.81ms | 3,120,998 | 22.48MB/Sec | 0 | 142 | | **Rocket** | 144,510 | 0.22ms | 0.02ms | 10.35ms | 0.11ms | 0.45ms | 0.65ms | 1.87ms | 2,889,513 | 34.04MB/Sec | 0 | 143 | | **Tide** | 99,647 | 0.32ms | 0.03ms | 6.30ms | 0.12ms | 0.60ms | 0.84ms | 1.89ms | 1,992,672 | 12.26MB/Sec | 0 | 144 | | **Thruster** | 817 | 10.07ms | 0.12ms | 13529.24ms | 290.42ms | 193.34ms | 956.58ms | 8002.73ms | 16,345 | 0.00B/Sec | 16377 | 145 | | **Tokio-minihttp** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 146 | 147 | | Concurrency: 64 | Duration: 20 secs | Threads: 2 | 148 | | :-------------: | :---------------: | :--------: | 149 | 150 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 151 | | :-----------------------: | :-----: | :---------: | :---------: | :---------: | :-------: | :-------: | :-------: | :-------: | :--------: | :-----------: | :------: | 152 | | **Roa** | 194,383 | 0.33ms | 0.01ms | 9.77ms | 0.14ms | 0.68ms | 0.97ms | 2.26ms | 3,886,353 | 16.31MB/Sec | 0 | 153 | | **Hyper** | 190,918 | 0.33ms | 0.01ms | 10.13ms | 0.14ms | 0.71ms | 0.96ms | 2.07ms | 3,817,057 | 16.02MB/Sec | 0 | 154 | | **Salvo** | 188,333 | 0.34ms | 0.02ms | 6.80ms | 0.14ms | 0.71ms | 0.99ms | 2.15ms | 3,765,776 | 23.35MB/Sec | 0 | 155 | | **Viz** | 187,274 | 0.34ms | 0.02ms | 8.79ms | 0.15ms | 0.72ms | 1.03ms | 2.54ms | 3,744,126 | 23.22MB/Sec | 0 | 156 | | **Poem** | 185,047 | 0.35ms | 0.02ms | 4.07ms | 0.13ms | 0.70ms | 0.83ms | 1.14ms | 3,700,404 | 22.94MB/Sec | 0 | 157 | | **Warp** | 184,210 | 0.35ms | 0.02ms | 8.61ms | 0.15ms | 0.75ms | 1.01ms | 2.15ms | 3,683,484 | 22.66MB/Sec | 0 | 158 | | **Axum** | 182,786 | 0.35ms | 0.02ms | 12.73ms | 0.15ms | 0.75ms | 1.02ms | 2.25ms | 3,654,826 | 22.49MB/Sec | 0 | 159 | | **May-MiniHttp** | 181,688 | 0.35ms | 0.01ms | 7.68ms | 0.15ms | 0.75ms | 0.97ms | 1.93ms | 3,631,909 | 17.33MB/Sec | 0 | 160 | | **Gotham** | 179,835 | 0.36ms | 0.02ms | 9.18ms | 0.15ms | 0.74ms | 1.01ms | 2.13ms | 3,595,901 | 28.64MB/Sec | 0 | 161 | | **Astra** | 163,679 | 0.38ms | 0.02ms | 13.32ms | 0.16ms | 0.78ms | 1.12ms | 3.19ms | 3,272,396 | 16.55MB/Sec | 0 | 162 | | **Actix Web** | 161,267 | 0.40ms | 0.02ms | 74.22ms | 0.23ms | 0.84ms | 1.22ms | 3.56ms | 3,224,367 | 19.99MB/Sec | 0 | 163 | | **Ntex** | 160,296 | 0.40ms | 0.02ms | 111.84ms | 0.33ms | 0.82ms | 1.16ms | 3.63ms | 3,204,283 | 19.72MB/Sec | 0 | 164 | | **Nickel** | 156,044 | 0.08ms | 0.02ms | 9.25ms | 0.04ms | 0.16ms | 0.25ms | 0.76ms | 3,119,802 | 22.47MB/Sec | 0 | 165 | | **Rocket** | 131,955 | 0.48ms | 0.02ms | 10.19ms | 0.19ms | 0.88ms | 1.16ms | 2.72ms | 2,638,656 | 31.08MB/Sec | 0 | 166 | | **Tide** | 89,351 | 0.72ms | 0.04ms | 6.13ms | 0.21ms | 1.17ms | 1.57ms | 2.87ms | 1,786,699 | 10.99MB/Sec | 0 | 167 | | **Tokio-minihttp** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 168 | | **Thruster** | 0 | 3099.55ms | 0.73ms | 6714.79ms | 3345.02ms | 6714.79ms | 6714.79ms | 6714.79ms | 26 | 0.00B/Sec | 61 | 169 | 170 | | Concurrency: 128 | Duration: 20 secs | Threads: 2 | 171 | | :--------------: | :---------------: | :--------: | 172 | 173 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 174 | | :-----------------------: | :-----: | :---------: | :---------: | :---------: | :------: | :------: | :-------: | :--------: | :--------: | :-----------: | :------: | 175 | | **May-MiniHttp** | 187,239 | 0.68ms | 0.01ms | 11.48ms | 0.29ms | 1.42ms | 1.83ms | 3.82ms | 3,743,108 | 17.86MB/Sec | 0 | 176 | | **Salvo** | 186,513 | 0.69ms | 0.02ms | 10.70ms | 0.28ms | 1.42ms | 1.84ms | 3.97ms | 3,728,894 | 23.12MB/Sec | 0 | 177 | | **Viz** | 186,289 | 0.69ms | 0.02ms | 12.22ms | 0.29ms | 1.44ms | 1.89ms | 4.16ms | 3,723,062 | 23.10MB/Sec | 0 | 178 | | **Hyper** | 183,792 | 0.70ms | 0.02ms | 10.91ms | 0.29ms | 1.45ms | 1.84ms | 3.86ms | 3,674,274 | 15.42MB/Sec | 0 | 179 | | **Warp** | 181,017 | 0.71ms | 0.02ms | 11.55ms | 0.29ms | 1.46ms | 1.84ms | 3.76ms | 3,618,805 | 22.27MB/Sec | 0 | 180 | | **Poem** | 179,017 | 0.71ms | 0.02ms | 7.59ms | 0.28ms | 1.43ms | 1.70ms | 2.89ms | 3,579,673 | 22.19MB/Sec | 0 | 181 | | **Gotham** | 176,835 | 0.72ms | 0.02ms | 16.15ms | 0.30ms | 1.48ms | 1.94ms | 4.29ms | 3,534,689 | 28.16MB/Sec | 0 | 182 | | **Axum** | 175,712 | 0.73ms | 0.02ms | 9.16ms | 0.30ms | 1.49ms | 1.89ms | 3.89ms | 3,512,451 | 21.62MB/Sec | 0 | 183 | | **Roa** | 173,465 | 0.74ms | 0.02ms | 10.77ms | 0.33ms | 1.55ms | 2.05ms | 4.61ms | 3,467,218 | 14.56MB/Sec | 0 | 184 | | **Actix Web** | 164,666 | 0.78ms | 0.02ms | 14.92ms | 0.31ms | 1.50ms | 1.85ms | 3.88ms | 3,291,837 | 20.41MB/Sec | 0 | 185 | | **Ntex** | 158,018 | 0.81ms | 0.02ms | 26.16ms | 0.34ms | 1.55ms | 1.99ms | 4.88ms | 3,159,623 | 19.44MB/Sec | 0 | 186 | | **Nickel** | 157,611 | 0.08ms | 0.02ms | 9.51ms | 0.04ms | 0.15ms | 0.24ms | 0.68ms | 3,151,260 | 22.70MB/Sec | 0 | 187 | | **Astra** | 153,002 | 0.81ms | 0.02ms | 10.35ms | 0.32ms | 1.69ms | 2.46ms | 5.27ms | 3,058,406 | 15.47MB/Sec | 0 | 188 | | **Rocket** | 127,738 | 1.00ms | 0.02ms | 13.10ms | 0.33ms | 1.69ms | 2.24ms | 4.66ms | 2,553,577 | 30.09MB/Sec | 0 | 189 | | **Tide** | 89,692 | 1.43ms | 0.05ms | 15.75ms | 0.39ms | 2.24ms | 3.10ms | 7.14ms | 1,793,237 | 11.03MB/Sec | 0 | 190 | | **Thruster** | 816 | 40.61ms | 0.35ms | 13118.36ms | 547.16ms | 712.63ms | 3513.26ms | 12315.34ms | 16,335 | 0.00B/Sec | 16463 | 191 | | **Tokio-minihttp** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 192 | 193 | | Concurrency: 256 | Duration: 20 secs | Threads: 2 | 194 | | :--------------: | :---------------: | :--------: | 195 | 196 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 197 | | :-----------------------: | :-----: | :---------: | :---------: | :---------: | :------: | :-------: | :-------: | :--------: | :--------: | :-----------: | :------: | 198 | | **May-MiniHttp** | 186,610 | 1.37ms | 0.01ms | 20.77ms | 0.56ms | 2.79ms | 3.50ms | 6.89ms | 3,729,479 | 17.80MB/Sec | 52 | 199 | | **Roa** | 184,422 | 1.39ms | 0.01ms | 18.41ms | 0.57ms | 2.79ms | 3.43ms | 6.52ms | 3,685,447 | 15.48MB/Sec | 7 | 200 | | **Viz** | 173,950 | 1.47ms | 0.02ms | 18.73ms | 0.62ms | 2.94ms | 3.74ms | 7.97ms | 3,476,747 | 21.57MB/Sec | 8 | 201 | | **Salvo** | 173,848 | 1.47ms | 0.02ms | 21.19ms | 0.60ms | 2.91ms | 3.60ms | 7.24ms | 3,474,653 | 21.55MB/Sec | 8 | 202 | | **Hyper** | 171,299 | 1.49ms | 0.01ms | 19.19ms | 0.62ms | 2.92ms | 3.55ms | 6.78ms | 3,424,658 | 14.38MB/Sec | 79 | 203 | | **Warp** | 171,048 | 1.50ms | 0.02ms | 19.74ms | 0.62ms | 2.94ms | 3.57ms | 6.95ms | 3,418,322 | 21.04MB/Sec | 66 | 204 | | **Axum** | 167,980 | 1.52ms | 0.02ms | 18.24ms | 0.63ms | 2.99ms | 3.66ms | 7.03ms | 3,357,211 | 20.67MB/Sec | 47 | 205 | | **Actix Web** | 161,680 | 1.58ms | 0.02ms | 22.93ms | 0.63ms | 2.98ms | 3.72ms | 7.52ms | 3,231,910 | 20.04MB/Sec | 80 | 206 | | **Poem** | 159,960 | 1.60ms | 0.02ms | 22.80ms | 0.65ms | 3.03ms | 3.76ms | 8.02ms | 3,198,241 | 19.83MB/Sec | 116 | 207 | | **Gotham** | 158,082 | 1.62ms | 0.02ms | 18.27ms | 0.64ms | 3.06ms | 3.91ms | 7.90ms | 3,160,314 | 25.18MB/Sec | 52 | 208 | | **Astra** | 154,864 | 0.92ms | 0.02ms | 23.10ms | 0.35ms | 1.87ms | 2.61ms | 5.21ms | 3,095,003 | 15.66MB/Sec | 110 | 209 | | **Nickel** | 153,965 | 0.08ms | 0.02ms | 19.85ms | 0.11ms | 0.18ms | 0.32ms | 1.41ms | 3,078,213 | 22.17MB/Sec | 283 | 210 | | **Ntex** | 150,558 | 1.70ms | 0.02ms | 114.13ms | 0.76ms | 3.08ms | 3.92ms | 9.53ms | 3,010,390 | 18.52MB/Sec | 115 | 211 | | **Rocket** | 130,740 | 1.96ms | 0.03ms | 18.71ms | 0.61ms | 3.19ms | 4.08ms | 7.79ms | 2,613,376 | 30.80MB/Sec | 47 | 212 | | **Tide** | 91,571 | 2.79ms | 0.05ms | 18.14ms | 0.61ms | 4.13ms | 5.36ms | 11.45ms | 1,830,549 | 11.27MB/Sec | 50 | 213 | | **Thruster** | 813 | 95.68ms | 0.12ms | 13137.94ms | 906.53ms | 1789.49ms | 8488.05ms | 13113.14ms | 16,259 | 0.00B/Sec | 753 | 214 | | **Tokio-minihttp** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 215 | 216 | | Concurrency: 512 | Duration: 20 secs | Threads: 2 | 217 | | :--------------: | :---------------: | :--------: | 218 | 219 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 220 | | :-----------------------: | :-----: | :---------: | :---------: | :---------: | :-------: | :-------: | :-------: | :-------: | :--------: | :-----------: | :------: | 221 | | **May-MiniHttp** | 183,629 | 2.79ms | 0.02ms | 115.48ms | 3.80ms | 15.68ms | 25.70ms | 37.56ms | 3,668,690 | 17.51MB/Sec | 443 | 222 | | **Roa** | 170,993 | 2.99ms | 0.03ms | 116.08ms | 4.44ms | 18.73ms | 28.15ms | 39.60ms | 3,418,592 | 14.35MB/Sec | 667 | 223 | | **Viz** | 168,417 | 3.04ms | 0.03ms | 107.31ms | 4.62ms | 19.55ms | 30.59ms | 45.05ms | 3,366,015 | 20.88MB/Sec | 398 | 224 | | **Salvo** | 166,343 | 3.08ms | 0.03ms | 111.42ms | 4.71ms | 19.85ms | 31.43ms | 49.29ms | 3,324,851 | 20.62MB/Sec | 395 | 225 | | **Warp** | 164,739 | 3.10ms | 0.03ms | 108.67ms | 4.62ms | 19.54ms | 29.39ms | 43.28ms | 3,291,918 | 20.26MB/Sec | 522 | 226 | | **Hyper** | 162,757 | 3.14ms | 0.03ms | 63.05ms | 4.69ms | 19.81ms | 29.63ms | 42.64ms | 3,252,534 | 13.66MB/Sec | 414 | 227 | | **Actix Web** | 158,601 | 3.23ms | 0.03ms | 122.56ms | 4.94ms | 21.25ms | 34.07ms | 47.45ms | 3,170,232 | 19.66MB/Sec | 520 | 228 | | **Axum** | 157,622 | 3.24ms | 0.03ms | 120.70ms | 4.92ms | 21.00ms | 32.04ms | 45.96ms | 3,150,744 | 19.39MB/Sec | 696 | 229 | | **Gotham** | 154,265 | 3.32ms | 0.04ms | 65.51ms | 5.37ms | 23.12ms | 36.42ms | 51.79ms | 3,083,266 | 24.57MB/Sec | 420 | 230 | | **Poem** | 151,142 | 3.38ms | 0.04ms | 77.54ms | 5.57ms | 24.11ms | 38.04ms | 53.14ms | 3,021,602 | 18.73MB/Sec | 633 | 231 | | **Astra** | 147,862 | 1.00ms | 0.02ms | 116.35ms | 0.50ms | 2.15ms | 3.29ms | 9.41ms | 2,956,257 | 14.95MB/Sec | 601 | 232 | | **Ntex** | 147,421 | 3.47ms | 0.04ms | 111.74ms | 5.67ms | 24.91ms | 38.37ms | 53.43ms | 2,946,083 | 18.13MB/Sec | 440 | 233 | | **Nickel** | 145,019 | 0.09ms | 0.02ms | 116.77ms | 0.29ms | 0.36ms | 1.14ms | 7.87ms | 2,898,859 | 20.86MB/Sec | 1 | 234 | | **Rocket** | 131,030 | 3.90ms | 0.06ms | 81.84ms | 6.87ms | 30.82ms | 45.93ms | 63.45ms | 2,619,054 | 30.86MB/Sec | 433 | 235 | | **Tide** | 92,786 | 5.51ms | 0.09ms | 110.18ms | 3.55ms | 16.59ms | 21.66ms | 29.32ms | 1,854,294 | 11.41MB/Sec | 477 | 236 | | **Tokio-minihttp** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 237 | | **Thruster** | 0 | 3051.28ms | 0.26ms | 6737.91ms | 3340.39ms | 6733.14ms | 6736.49ms | 6737.91ms | 267 | 0.00B/Sec | 548 | 238 | 239 | | Concurrency: 1024 | Duration: 20 secs | Threads: 2 | 240 | | :---------------: | :---------------: | :--------: | 241 | 242 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 243 | | :-----------------------: | :-----: | :---------: | :---------: | :---------: | :-----: | :-----: | :-----: | :------: | :--------: | :-----------: | :------: | 244 | | **May-MiniHttp** | 179,952 | 5.68ms | 0.03ms | 125.85ms | 11.33ms | 44.73ms | 60.35ms | 79.94ms | 3,597,285 | 17.15MB/Sec | 3297 | 245 | | **Roa** | 170,804 | 5.99ms | 0.04ms | 131.05ms | 12.50ms | 47.73ms | 60.27ms | 77.52ms | 3,412,299 | 14.32MB/Sec | 3480 | 246 | | **Viz** | 164,009 | 6.24ms | 0.03ms | 123.27ms | 12.72ms | 49.01ms | 64.98ms | 81.06ms | 3,277,666 | 20.32MB/Sec | 2775 | 247 | | **Salvo** | 162,416 | 6.30ms | 0.03ms | 122.10ms | 12.80ms | 49.21ms | 64.96ms | 89.38ms | 3,245,955 | 20.12MB/Sec | 2980 | 248 | | **Warp** | 161,833 | 6.32ms | 0.03ms | 148.36ms | 12.90ms | 49.17ms | 62.99ms | 80.68ms | 3,234,786 | 19.89MB/Sec | 3438 | 249 | | **Hyper** | 160,575 | 6.37ms | 0.03ms | 128.50ms | 13.04ms | 50.05ms | 65.11ms | 78.24ms | 3,209,247 | 13.46MB/Sec | 2757 | 250 | | **Axum** | 156,053 | 6.55ms | 0.03ms | 125.25ms | 13.74ms | 53.96ms | 71.86ms | 89.47ms | 3,118,167 | 19.18MB/Sec | 2547 | 251 | | **Actix Web** | 153,939 | 6.64ms | 0.04ms | 125.40ms | 13.70ms | 55.59ms | 76.83ms | 98.93ms | 3,078,271 | 19.07MB/Sec | 3173 | 252 | | **Poem** | 153,259 | 6.67ms | 0.03ms | 125.03ms | 14.46ms | 57.65ms | 76.16ms | 94.48ms | 3,063,010 | 18.98MB/Sec | 3166 | 253 | | **Astra** | 153,192 | 0.96ms | 0.02ms | 120.20ms | 0.97ms | 2.46ms | 5.44ms | 26.56ms | 3,059,441 | 15.47MB/Sec | 3191 | 254 | | **Ntex** | 148,314 | 6.89ms | 0.05ms | 128.54ms | 15.24ms | 63.00ms | 85.73ms | 107.35ms | 2,963,304 | 18.23MB/Sec | 2949 | 255 | | **Nickel** | 137,511 | 0.76ms | 0.02ms | 635.32ms | 8.89ms | 13.68ms | 53.17ms | 218.01ms | 2,747,419 | 19.27MB/Sec | 74310 | 256 | | **Rocket** | 129,422 | 7.90ms | 0.05ms | 131.00ms | 17.73ms | 71.93ms | 93.78ms | 118.28ms | 2,586,775 | 30.45MB/Sec | 3398 | 257 | | **Tide** | 91,921 | 11.13ms | 0.12ms | 124.16ms | 11.82ms | 43.35ms | 57.28ms | 71.16ms | 1,837,182 | 11.29MB/Sec | 2680 | 258 | | **Tokio-minihttp** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 259 | | **Thruster** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 260 | | **Gotham** (FAIL) | 0 | FAIL | FAIL | FAIL | FAIL | N/A | N/A | N/A | 0 | N/A | 0 | 261 | 262 | ## Benchmarking tool 263 | 264 | The benchmarks have been performed using [rewrk](https://github.com/ChillFish8/rewrk), locally. 265 | 266 | Check the raw output from rewrk [here](https://github.com/Ishtmeet-Singh/rust-framework-benchmarks/tree/master/perf). 267 | -------------------------------------------------------------------------------- /results/concurrency-10.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Max Latency | # Requests | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:| 3 | |**Astra** |184,444|0.05ms|0.49ms|368,297| 4 | -------------------------------------------------------------------------------- /results/concurrency-100.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Max Latency | # Requests | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:| 3 | |**Astra** |165,684|0.59ms|17.68ms|827,959| 4 | -------------------------------------------------------------------------------- /results/concurrency-1024.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**May-MiniHttp** |179,952|5.68ms|0.03ms|125.85ms|11.33ms|44.73ms|60.35ms|79.94ms|3,597,285|17.15MB/Sec|3297| 4 | |**Roa** |170,804|5.99ms|0.04ms|131.05ms|12.50ms|47.73ms|60.27ms|77.52ms|3,412,299|14.32MB/Sec|3480| 5 | |**Viz** |164,009|6.24ms|0.03ms|123.27ms|12.72ms|49.01ms|64.98ms|81.06ms|3,277,666|20.32MB/Sec|2775| 6 | |**Salvo** |162,416|6.30ms|0.03ms|122.10ms|12.80ms|49.21ms|64.96ms|89.38ms|3,245,955|20.12MB/Sec|2980| 7 | |**Warp** |161,833|6.32ms|0.03ms|148.36ms|12.90ms|49.17ms|62.99ms|80.68ms|3,234,786|19.89MB/Sec|3438| 8 | |**Hyper** |160,575|6.37ms|0.03ms|128.50ms|13.04ms|50.05ms|65.11ms|78.24ms|3,209,247|13.46MB/Sec|2757| 9 | |**Axum** |156,053|6.55ms|0.03ms|125.25ms|13.74ms|53.96ms|71.86ms|89.47ms|3,118,167|19.18MB/Sec|2547| 10 | |**Actix-Web** |153,939|6.64ms|0.04ms|125.40ms|13.70ms|55.59ms|76.83ms|98.93ms|3,078,271|19.07MB/Sec|3173| 11 | |**Poem** |153,259|6.67ms|0.03ms|125.03ms|14.46ms|57.65ms|76.16ms|94.48ms|3,063,010|18.98MB/Sec|3166| 12 | |**Astra** |153,192|0.96ms|0.02ms|120.20ms|0.97ms|2.46ms|5.44ms|26.56ms|3,059,441|15.47MB/Sec|3191| 13 | |**Ntex** |148,314|6.89ms|0.05ms|128.54ms|15.24ms|63.00ms|85.73ms|107.35ms|2,963,304|18.23MB/Sec|2949| 14 | |**Nickel** |137,511|0.76ms|0.02ms|635.32ms|8.89ms|13.68ms|53.17ms|218.01ms|2,747,419|19.27MB/Sec|74310| 15 | |**Rocket** |129,422|7.90ms|0.05ms|131.00ms|17.73ms|71.93ms|93.78ms|118.28ms|2,586,775|30.45MB/Sec|3398| 16 | |**Tide** |91,921|11.13ms|0.12ms|124.16ms|11.82ms|43.35ms|57.28ms|71.16ms|1,837,182|11.29MB/Sec|2680| 17 | |**Tokio-minihttp** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 18 | |**Thruster** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 19 | |**Gotham** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 20 | -------------------------------------------------------------------------------- /results/concurrency-128.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**May-MiniHttp** |187,239|0.68ms|0.01ms|11.48ms|0.29ms|1.42ms|1.83ms|3.82ms|3,743,108|17.86MB/Sec|0| 4 | |**Salvo** |186,513|0.69ms|0.02ms|10.70ms|0.28ms|1.42ms|1.84ms|3.97ms|3,728,894|23.12MB/Sec|0| 5 | |**Viz** |186,289|0.69ms|0.02ms|12.22ms|0.29ms|1.44ms|1.89ms|4.16ms|3,723,062|23.10MB/Sec|0| 6 | |**Hyper** |183,792|0.70ms|0.02ms|10.91ms|0.29ms|1.45ms|1.84ms|3.86ms|3,674,274|15.42MB/Sec|0| 7 | |**Warp** |181,017|0.71ms|0.02ms|11.55ms|0.29ms|1.46ms|1.84ms|3.76ms|3,618,805|22.27MB/Sec|0| 8 | |**Poem** |179,017|0.71ms|0.02ms|7.59ms|0.28ms|1.43ms|1.70ms|2.89ms|3,579,673|22.19MB/Sec|0| 9 | |**Gotham** |176,835|0.72ms|0.02ms|16.15ms|0.30ms|1.48ms|1.94ms|4.29ms|3,534,689|28.16MB/Sec|0| 10 | |**Axum** |175,712|0.73ms|0.02ms|9.16ms|0.30ms|1.49ms|1.89ms|3.89ms|3,512,451|21.62MB/Sec|0| 11 | |**Roa** |173,465|0.74ms|0.02ms|10.77ms|0.33ms|1.55ms|2.05ms|4.61ms|3,467,218|14.56MB/Sec|0| 12 | |**Actix-Web** |164,666|0.78ms|0.02ms|14.92ms|0.31ms|1.50ms|1.85ms|3.88ms|3,291,837|20.41MB/Sec|0| 13 | |**Ntex** |158,018|0.81ms|0.02ms|26.16ms|0.34ms|1.55ms|1.99ms|4.88ms|3,159,623|19.44MB/Sec|0| 14 | |**Nickel** |157,611|0.08ms|0.02ms|9.51ms|0.04ms|0.15ms|0.24ms|0.68ms|3,151,260|22.70MB/Sec|0| 15 | |**Astra** |153,002|0.81ms|0.02ms|10.35ms|0.32ms|1.69ms|2.46ms|5.27ms|3,058,406|15.47MB/Sec|0| 16 | |**Rocket** |127,738|1.00ms|0.02ms|13.10ms|0.33ms|1.69ms|2.24ms|4.66ms|2,553,577|30.09MB/Sec|0| 17 | |**Tide** |89,692|1.43ms|0.05ms|15.75ms|0.39ms|2.24ms|3.10ms|7.14ms|1,793,237|11.03MB/Sec|0| 18 | |**Thruster** |816|40.61ms|0.35ms|13118.36ms|547.16ms|712.63ms|3513.26ms|12315.34ms|16,335|0.00B/Sec|16463| 19 | |**Tokio-minihttp** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 20 | -------------------------------------------------------------------------------- /results/concurrency-16.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**May-MiniHttp** |196,058|0.08ms|0.01ms|9.63ms|0.03ms|0.15ms|0.22ms|0.51ms|3,919,895|18.70MB/Sec|0| 4 | |**Hyper** |185,987|0.09ms|0.01ms|5.88ms|0.04ms|0.18ms|0.27ms|0.73ms|3,718,786|15.61MB/Sec|0| 5 | |**Warp** |185,944|0.09ms|0.01ms|8.17ms|0.04ms|0.18ms|0.28ms|0.73ms|3,718,101|22.88MB/Sec|0| 6 | |**Salvo** |185,723|0.09ms|0.01ms|8.82ms|0.04ms|0.17ms|0.27ms|0.72ms|3,713,855|23.03MB/Sec|0| 7 | |**Viz** |183,957|0.09ms|0.01ms|7.62ms|0.05ms|0.18ms|0.29ms|0.81ms|3,677,482|22.81MB/Sec|0| 8 | |**Axum** |182,147|0.09ms|0.01ms|5.09ms|0.04ms|0.18ms|0.27ms|0.73ms|3,642,048|22.41MB/Sec|0| 9 | |**Poem** |180,297|0.09ms|0.02ms|4.73ms|0.03ms|0.17ms|0.22ms|0.36ms|3,605,724|22.35MB/Sec|0| 10 | |**Gotham** |179,680|0.09ms|0.02ms|14.68ms|0.05ms|0.18ms|0.28ms|0.75ms|3,591,288|28.62MB/Sec|0| 11 | |**Actix-Web** |166,331|0.10ms|0.01ms|6.06ms|0.05ms|0.22ms|0.36ms|1.03ms|3,326,160|20.62MB/Sec|0| 12 | |**Astra** |161,134|0.08ms|0.02ms|3.84ms|0.04ms|0.17ms|0.26ms|0.74ms|3,221,679|16.29MB/Sec|0| 13 | |**Ntex** |159,619|0.10ms|0.02ms|41.72ms|0.08ms|0.21ms|0.33ms|1.06ms|3,191,402|19.64MB/Sec|0| 14 | |**Rocket** |147,545|0.11ms|0.02ms|7.60ms|0.06ms|0.23ms|0.37ms|1.23ms|2,950,284|34.76MB/Sec|0| 15 | |**Thruster** |818|4.86ms|0.16ms|6722.89ms|149.78ms|83.46ms|400.19ms|3679.56ms|16,373|0.00B/Sec|16389| 16 | |**Tide** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 17 | |**Tokio-minihttp** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 18 | |**Nickel** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 19 | |**Roa** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 20 | -------------------------------------------------------------------------------- /results/concurrency-2048.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**Nickel** |20,128|96.23ms|14.54ms|1340.39ms|147.12ms|701.37ms|945.37ms|1061.11ms|905,718|39.36KB/Sec|894756| 4 | -------------------------------------------------------------------------------- /results/concurrency-250.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Max Latency | # Requests | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:| 3 | |**Tokio-minihttp** |246,524|542.59us|11.42ms|6,165,677| 4 | |**Roa** |230,863|561.03us|10.30ms|5,774,358| 5 | |**Thruster** |229,312|562.71us|11.20ms|5,735,575| 6 | |**Hyper** |227,603|567.79us|11.37ms|5,693,512| 7 | |**Salvo** |225,378|574.50us|9.75ms|5,659,272| 8 | |**Poem** |224,342|578.87us|8.91ms|5,611,777| 9 | |**Axum** |224,282|576.80us|11.57ms|5,609,777| 10 | |**Viz** |223,658|578.69us|10.93ms|5,595,360| 11 | |**Gotham** |221,153|586.37us|10.52ms|5,531,353| 12 | |**Astra** |218,480|383.67us|11.14ms|5,464,477| 13 | |**Warp** |216,154|597.66us|11.04ms|5,407,171| 14 | |**Ntex** |202,407|640.25us|11.95ms|5,063,459| 15 | |**Nickel** |168,277|54.39us|11.79ms|4,225,405| 16 | |**Rocket** |157,985|0.91ms|11.13ms|3,955,296| 17 | |**Actix-Web** |146,162|0.89ms|14.80ms|3,657,475| 18 | |**May-MiniHttp** |133,933|0.96ms|11.25ms|3,352,477| 19 | |**Tide** |42,297|6.58ms|52.68ms|1,057,900| 20 | -------------------------------------------------------------------------------- /results/concurrency-256.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**May-MiniHttp** |186,610|1.37ms|0.01ms|20.77ms|0.56ms|2.79ms|3.50ms|6.89ms|3,729,479|17.80MB/Sec|52| 4 | |**Roa** |184,422|1.39ms|0.01ms|18.41ms|0.57ms|2.79ms|3.43ms|6.52ms|3,685,447|15.48MB/Sec|7| 5 | |**Viz** |173,950|1.47ms|0.02ms|18.73ms|0.62ms|2.94ms|3.74ms|7.97ms|3,476,747|21.57MB/Sec|8| 6 | |**Salvo** |173,848|1.47ms|0.02ms|21.19ms|0.60ms|2.91ms|3.60ms|7.24ms|3,474,653|21.55MB/Sec|8| 7 | |**Hyper** |171,299|1.49ms|0.01ms|19.19ms|0.62ms|2.92ms|3.55ms|6.78ms|3,424,658|14.38MB/Sec|79| 8 | |**Warp** |171,048|1.50ms|0.02ms|19.74ms|0.62ms|2.94ms|3.57ms|6.95ms|3,418,322|21.04MB/Sec|66| 9 | |**Axum** |167,980|1.52ms|0.02ms|18.24ms|0.63ms|2.99ms|3.66ms|7.03ms|3,357,211|20.67MB/Sec|47| 10 | |**Actix-Web** |161,680|1.58ms|0.02ms|22.93ms|0.63ms|2.98ms|3.72ms|7.52ms|3,231,910|20.04MB/Sec|80| 11 | |**Poem** |159,960|1.60ms|0.02ms|22.80ms|0.65ms|3.03ms|3.76ms|8.02ms|3,198,241|19.83MB/Sec|116| 12 | |**Gotham** |158,082|1.62ms|0.02ms|18.27ms|0.64ms|3.06ms|3.91ms|7.90ms|3,160,314|25.18MB/Sec|52| 13 | |**Astra** |154,864|0.92ms|0.02ms|23.10ms|0.35ms|1.87ms|2.61ms|5.21ms|3,095,003|15.66MB/Sec|110| 14 | |**Nickel** |153,965|0.08ms|0.02ms|19.85ms|0.11ms|0.18ms|0.32ms|1.41ms|3,078,213|22.17MB/Sec|283| 15 | |**Ntex** |150,558|1.70ms|0.02ms|114.13ms|0.76ms|3.08ms|3.92ms|9.53ms|3,010,390|18.52MB/Sec|115| 16 | |**Rocket** |130,740|1.96ms|0.03ms|18.71ms|0.61ms|3.19ms|4.08ms|7.79ms|2,613,376|30.80MB/Sec|47| 17 | |**Tide** |91,571|2.79ms|0.05ms|18.14ms|0.61ms|4.13ms|5.36ms|11.45ms|1,830,549|11.27MB/Sec|50| 18 | |**Thruster** |813|95.68ms|0.12ms|13137.94ms|906.53ms|1789.49ms|8488.05ms|13113.14ms|16,259|0.00B/Sec|753| 19 | |**Tokio-minihttp** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 20 | -------------------------------------------------------------------------------- /results/concurrency-32.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**Roa** |192,720|0.17ms|0.01ms|4.88ms|0.07ms|0.34ms|0.51ms|1.19ms|3,853,159|16.17MB/Sec|0| 4 | |**Salvo** |188,869|0.17ms|0.02ms|7.09ms|0.08ms|0.35ms|0.53ms|1.35ms|3,776,379|23.42MB/Sec|0| 5 | |**Hyper** |188,731|0.17ms|0.01ms|8.02ms|0.08ms|0.36ms|0.53ms|1.36ms|3,772,489|15.84MB/Sec|0| 6 | |**Warp** |188,557|0.17ms|0.01ms|7.73ms|0.08ms|0.36ms|0.52ms|1.22ms|3,770,117|23.20MB/Sec|0| 7 | |**Viz** |187,664|0.17ms|0.01ms|6.86ms|0.08ms|0.35ms|0.51ms|1.22ms|3,752,403|23.27MB/Sec|0| 8 | |**Axum** |184,814|0.17ms|0.01ms|9.98ms|0.08ms|0.36ms|0.52ms|1.23ms|3,695,085|22.74MB/Sec|0| 9 | |**Poem** |184,060|0.17ms|0.02ms|5.24ms|0.07ms|0.34ms|0.43ms|0.66ms|3,680,634|22.82MB/Sec|0| 10 | |**Gotham** |182,769|0.17ms|0.02ms|10.68ms|0.08ms|0.36ms|0.53ms|1.29ms|3,654,263|29.11MB/Sec|0| 11 | |**May-MiniHttp** |182,092|0.18ms|0.01ms|11.56ms|0.09ms|0.40ms|0.59ms|1.56ms|3,641,328|17.37MB/Sec|0| 12 | |**Actix-Web** |171,106|0.19ms|0.02ms|7.62ms|0.08ms|0.39ms|0.54ms|1.32ms|3,421,376|21.21MB/Sec|0| 13 | |**Ntex** |167,185|0.19ms|0.02ms|57.92ms|0.13ms|0.40ms|0.58ms|1.74ms|3,342,806|20.57MB/Sec|0| 14 | |**Astra** |163,832|0.19ms|0.02ms|9.38ms|0.08ms|0.38ms|0.55ms|1.41ms|3,275,694|16.56MB/Sec|0| 15 | |**Nickel** |156,104|0.08ms|0.02ms|7.42ms|0.04ms|0.16ms|0.26ms|0.81ms|3,120,998|22.48MB/Sec|0| 16 | |**Rocket** |144,510|0.22ms|0.02ms|10.35ms|0.11ms|0.45ms|0.65ms|1.87ms|2,889,513|34.04MB/Sec|0| 17 | |**Tide** |99,647|0.32ms|0.03ms|6.30ms|0.12ms|0.60ms|0.84ms|1.89ms|1,992,672|12.26MB/Sec|0| 18 | |**Thruster** |817|10.07ms|0.12ms|13529.24ms|290.42ms|193.34ms|956.58ms|8002.73ms|16,345|0.00B/Sec|16377| 19 | |**Tokio-minihttp** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 20 | -------------------------------------------------------------------------------- /results/concurrency-50.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Max Latency | # Requests | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:| 3 | |**Tokio-minihttp** |246,010|122.56us|3.26ms|4,945,307| 4 | |**Actix-Web** |240,409|116.24us|3.08ms|4,832,699| 5 | |**Hyper** |239,073|123.09us|10.19ms|4,781,888| 6 | |**Roa** |238,927|123.30us|10.08ms|4,778,874| 7 | |**Warp** |237,486|123.02us|3.28ms|4,774,028| 8 | |**Thruster** |235,972|124.39us|3.27ms|4,743,501| 9 | |**Ntex** |235,645|121.45us|3.54ms|4,736,764| 10 | |**Poem** |232,814|126.28us|2.26ms|4,680,059| 11 | |**Salvo** |232,419|126.10us|3.37ms|4,672,112| 12 | |**Viz** |232,290|125.97us|3.23ms|4,669,496| 13 | |**Axum** |232,063|126.49us|2.56ms|4,664,861| 14 | |**Astra** |229,805|125.07us|3.04ms|4,619,556| 15 | |**Gotham** |228,238|128.09us|2.86ms|4,565,259| 16 | |**Rocket** |187,055|186.74us|2.82ms|3,760,161| 17 | |**May-MiniHttp** |178,296|162.37us|3.20ms|3,584,132| 18 | |**Nickel** |170,152|53.56us|3.18ms|3,420,330| 19 | |**Tide** |126,717|312.00us|11.17ms|2,547,331| 20 | -------------------------------------------------------------------------------- /results/concurrency-500.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Max Latency | # Requests | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:| 3 | |**Hyper**|233,384|544.37us|10.12ms|10,506,177| 4 | |**Warp**|231,365|548.23us|11.35ms|10,414,831| 5 | |**Poem**|231,365|548.23us|11.35ms|10,414,831| 6 | |**Astra**|231,365|548.23us|11.35ms|10,414,831| 7 | |**Axum**|226,180|562.19us|11.05ms|10,180,997| 8 | |**Salvo**|225,676|563.49us|10.46ms|10,158,000| 9 | |**Viz**|225,447|565.57us|10.31ms|10,148,821| 10 | |**Ntex**|213,931|495.19us|11.32ms|9,629,432| 11 | |**Thruster**|204,331|6.55ms|688.82ms|9,203,770| 12 | |**Actix-Web**|183,286|577.29us|12.30ms|8,250,370| 13 | |**Rocket**|152,404|0.92ms|10.41ms|6,866,194| 14 | |**Tide**|41,598|6.05ms|70.86ms|1,872,586| 15 | -------------------------------------------------------------------------------- /results/concurrency-512.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**May-MiniHttp** |183,629|2.79ms|0.02ms|115.48ms|3.80ms|15.68ms|25.70ms|37.56ms|3,668,690|17.51MB/Sec|443| 4 | |**Roa** |170,993|2.99ms|0.03ms|116.08ms|4.44ms|18.73ms|28.15ms|39.60ms|3,418,592|14.35MB/Sec|667| 5 | |**Viz** |168,417|3.04ms|0.03ms|107.31ms|4.62ms|19.55ms|30.59ms|45.05ms|3,366,015|20.88MB/Sec|398| 6 | |**Salvo** |166,343|3.08ms|0.03ms|111.42ms|4.71ms|19.85ms|31.43ms|49.29ms|3,324,851|20.62MB/Sec|395| 7 | |**Warp** |164,739|3.10ms|0.03ms|108.67ms|4.62ms|19.54ms|29.39ms|43.28ms|3,291,918|20.26MB/Sec|522| 8 | |**Hyper** |162,757|3.14ms|0.03ms|63.05ms|4.69ms|19.81ms|29.63ms|42.64ms|3,252,534|13.66MB/Sec|414| 9 | |**Actix-Web** |158,601|3.23ms|0.03ms|122.56ms|4.94ms|21.25ms|34.07ms|47.45ms|3,170,232|19.66MB/Sec|520| 10 | |**Axum** |157,622|3.24ms|0.03ms|120.70ms|4.92ms|21.00ms|32.04ms|45.96ms|3,150,744|19.39MB/Sec|696| 11 | |**Gotham** |154,265|3.32ms|0.04ms|65.51ms|5.37ms|23.12ms|36.42ms|51.79ms|3,083,266|24.57MB/Sec|420| 12 | |**Poem** |151,142|3.38ms|0.04ms|77.54ms|5.57ms|24.11ms|38.04ms|53.14ms|3,021,602|18.73MB/Sec|633| 13 | |**Astra** |147,862|1.00ms|0.02ms|116.35ms|0.50ms|2.15ms|3.29ms|9.41ms|2,956,257|14.95MB/Sec|601| 14 | |**Ntex** |147,421|3.47ms|0.04ms|111.74ms|5.67ms|24.91ms|38.37ms|53.43ms|2,946,083|18.13MB/Sec|440| 15 | |**Nickel** |145,019|0.09ms|0.02ms|116.77ms|0.29ms|0.36ms|1.14ms|7.87ms|2,898,859|20.86MB/Sec|1| 16 | |**Rocket** |131,030|3.90ms|0.06ms|81.84ms|6.87ms|30.82ms|45.93ms|63.45ms|2,619,054|30.86MB/Sec|433| 17 | |**Tide** |92,786|5.51ms|0.09ms|110.18ms|3.55ms|16.59ms|21.66ms|29.32ms|1,854,294|11.41MB/Sec|477| 18 | |**Tokio-minihttp** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 19 | |**Thruster** |0|3051.28ms|0.26ms|6737.91ms|3340.39ms|6733.14ms|6736.49ms|6737.91ms|267|0.00B/Sec|548| 20 | -------------------------------------------------------------------------------- /results/concurrency-64.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| 3 | |**Roa** |194,383|0.33ms|0.01ms|9.77ms|0.14ms|0.68ms|0.97ms|2.26ms|3,886,353|16.31MB/Sec|0| 4 | |**Hyper** |190,918|0.33ms|0.01ms|10.13ms|0.14ms|0.71ms|0.96ms|2.07ms|3,817,057|16.02MB/Sec|0| 5 | |**Salvo** |188,333|0.34ms|0.02ms|6.80ms|0.14ms|0.71ms|0.99ms|2.15ms|3,765,776|23.35MB/Sec|0| 6 | |**Viz** |187,274|0.34ms|0.02ms|8.79ms|0.15ms|0.72ms|1.03ms|2.54ms|3,744,126|23.22MB/Sec|0| 7 | |**Poem** |185,047|0.35ms|0.02ms|4.07ms|0.13ms|0.70ms|0.83ms|1.14ms|3,700,404|22.94MB/Sec|0| 8 | |**Warp** |184,210|0.35ms|0.02ms|8.61ms|0.15ms|0.75ms|1.01ms|2.15ms|3,683,484|22.66MB/Sec|0| 9 | |**Axum** |182,786|0.35ms|0.02ms|12.73ms|0.15ms|0.75ms|1.02ms|2.25ms|3,654,826|22.49MB/Sec|0| 10 | |**May-MiniHttp** |181,688|0.35ms|0.01ms|7.68ms|0.15ms|0.75ms|0.97ms|1.93ms|3,631,909|17.33MB/Sec|0| 11 | |**Gotham** |179,835|0.36ms|0.02ms|9.18ms|0.15ms|0.74ms|1.01ms|2.13ms|3,595,901|28.64MB/Sec|0| 12 | |**Astra** |163,679|0.38ms|0.02ms|13.32ms|0.16ms|0.78ms|1.12ms|3.19ms|3,272,396|16.55MB/Sec|0| 13 | |**Actix-Web** |161,267|0.40ms|0.02ms|74.22ms|0.23ms|0.84ms|1.22ms|3.56ms|3,224,367|19.99MB/Sec|0| 14 | |**Ntex** |160,296|0.40ms|0.02ms|111.84ms|0.33ms|0.82ms|1.16ms|3.63ms|3,204,283|19.72MB/Sec|0| 15 | |**Nickel** |156,044|0.08ms|0.02ms|9.25ms|0.04ms|0.16ms|0.25ms|0.76ms|3,119,802|22.47MB/Sec|0| 16 | |**Rocket** |131,955|0.48ms|0.02ms|10.19ms|0.19ms|0.88ms|1.16ms|2.72ms|2,638,656|31.08MB/Sec|0| 17 | |**Tide** |89,351|0.72ms|0.04ms|6.13ms|0.21ms|1.17ms|1.57ms|2.87ms|1,786,699|10.99MB/Sec|0| 18 | |**Tokio-minihttp** (FAIL)|0|FAIL|FAIL|FAIL|FAIL|N/A|N/A|N/A|0|N/A|0| 19 | |**Thruster** |0|3099.55ms|0.73ms|6714.79ms|3345.02ms|6714.79ms|6714.79ms|6714.79ms|26|0.00B/Sec|61| 20 | -------------------------------------------------------------------------------- /results/concurrency-700.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Max Latency | # Requests | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:| 3 | |**Tokio-minihttp** |236,782|1.54ms|12.84ms|5,925,632| 4 | |**Astra** |215,419|391.42us|12.79ms|5,391,856| 5 | |**Nickel** |163,328|66.66us|174.30ms|4,088,206| 6 | |**Hyper** |158,300|2.24ms|23.25ms|3,960,196| 7 | |**Roa** |157,051|2.26ms|21.07ms|3,929,140| 8 | |**Thruster** |156,376|2.27ms|19.37ms|3,910,608| 9 | |**Warp** |154,759|2.29ms|20.95ms|3,873,414| 10 | |**Viz** |154,001|2.30ms|14.58ms|3,852,010| 11 | |**Axum** |152,893|2.32ms|18.86ms|3,827,680| 12 | |**Salvo** |151,746|2.33ms|21.53ms|3,807,425| 13 | |**Poem** |149,537|2.37ms|17.77ms|3,741,057| 14 | |**Gotham** |148,215|2.40ms|19.91ms|3,710,441| 15 | |**Rocket** |131,263|2.74ms|17.71ms|3,289,927| 16 | |**Ntex** |128,846|2.75ms|17.73ms|3,228,909| 17 | |**Actix-Web** |127,935|2.77ms|16.29ms|3,208,440| 18 | |**May-MiniHttp** |127,003|2.78ms|19.85ms|3,180,523| 19 | |**Tide** |42,284|18.42ms|130.13ms|1,058,387| 20 | -------------------------------------------------------------------------------- /results/concurrency-8.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Max Latency | # Requests | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:| 3 | |**Astra** (FAIL)|0|FAIL|FAIL|0| 4 | -------------------------------------------------------------------------------- /src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ishtms/rust-framework-bench/92f26d074a64cf1382402480ded52922f2e33f83/src/.DS_Store -------------------------------------------------------------------------------- /src/bin/actix.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{web, App, HttpServer}; 2 | 3 | #[actix_web::main] 4 | async fn main() -> std::io::Result<()> { 5 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 6 | 7 | HttpServer::new(|| App::new().service(web::resource("/").to(index))) 8 | .bind(format!("127.0.0.1:{}", port_number))? 9 | .run() 10 | .await 11 | } 12 | 13 | async fn index() -> &'static str { 14 | "Hello, World!" 15 | } 16 | /// retrieve port number from the `main.rs` script 17 | /// that is assigned in `config.json` 18 | fn get_port_number() -> String { 19 | std::env::args().collect::>()[1].clone() 20 | } 21 | -------------------------------------------------------------------------------- /src/bin/astra.rs: -------------------------------------------------------------------------------- 1 | use astra::{Body, Response, Server}; 2 | 3 | fn main() { 4 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 5 | Server::bind(format!("127.0.0.1:{}", port_number)) 6 | .serve(|_req, _info| Response::new(Body::new("Hello World!"))) 7 | .expect("serve failed"); 8 | } 9 | 10 | /// retrieve port number from the `main.rs` script 11 | /// that is assigned in `config.json` 12 | fn get_port_number() -> String { 13 | std::env::args().collect::>()[1].clone() 14 | } 15 | -------------------------------------------------------------------------------- /src/bin/axum.rs: -------------------------------------------------------------------------------- 1 | use axum::{routing::get, Router}; 2 | use std::net::SocketAddr; 3 | 4 | #[tokio::main] 5 | async fn main() { 6 | let app = Router::new().route("/", get(|| async { "Hello world!" })); 7 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 8 | 9 | let addr = SocketAddr::from(([127, 0, 0, 1], port_number)); 10 | axum::Server::bind(&addr) 11 | .serve(app.into_make_service()) 12 | .await 13 | .unwrap(); 14 | } 15 | 16 | fn get_port_number() -> String { 17 | std::env::args().collect::>()[1].clone() 18 | } 19 | -------------------------------------------------------------------------------- /src/bin/gotham.rs: -------------------------------------------------------------------------------- 1 | use gotham::state::State; 2 | 3 | /// Create a `Handler` which is invoked when responding to a `Request`. 4 | /// 5 | /// How does a function become a `Handler`?. 6 | /// We've simply implemented the `Handler` trait, for functions that match the signature used here, 7 | /// within Gotham itself. 8 | pub fn say_hello(state: State) -> (State, &'static str) { 9 | (state, "Hello, world!") 10 | } 11 | 12 | /// Start a server and call the `Handler` we've defined above for each `Request` we receive. 13 | pub fn main() { 14 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 15 | 16 | let addr = format!("127.0.0.1:{}", port_number); 17 | gotham::start(addr, || Ok(say_hello)).unwrap(); 18 | } 19 | 20 | /// retrieve port number from the `main.rs` script 21 | /// that is assigned in `config.json` 22 | fn get_port_number() -> String { 23 | std::env::args().collect::>()[1].clone() 24 | } 25 | -------------------------------------------------------------------------------- /src/bin/hyper.rs: -------------------------------------------------------------------------------- 1 | use std::convert::Infallible; 2 | 3 | use hyper::service::{make_service_fn, service_fn}; 4 | use hyper::{Body, Request, Response, Server}; 5 | 6 | async fn hello(_: Request) -> Result, Infallible> { 7 | Ok(Response::new("Hello world!".into())) 8 | } 9 | 10 | #[tokio::main] 11 | pub async fn main() -> Result<(), Box> { 12 | let make_svc = make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(hello)) }); 13 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 14 | 15 | let addr = ([127, 0, 0, 1], port_number).into(); 16 | let server = Server::bind(&addr).serve(make_svc); 17 | server.await?; 18 | 19 | Ok(()) 20 | } 21 | 22 | fn get_port_number() -> String { 23 | std::env::args().collect::>()[1].clone() 24 | } 25 | -------------------------------------------------------------------------------- /src/bin/may-minihttp.rs: -------------------------------------------------------------------------------- 1 | extern crate may_minihttp; 2 | use may_minihttp::{HttpServer, HttpService, Request, Response}; 3 | use std::io; 4 | 5 | /// `HelloWorld` is the *service* that we're going to be implementing to service 6 | /// the HTTP requests we receive. 7 | /// 8 | #[derive(Clone)] 9 | struct HelloWorld; 10 | 11 | impl HttpService for HelloWorld { 12 | fn call(&mut self, _req: Request, res: &mut Response) -> io::Result<()> { 13 | res.body("Hello, world!"); 14 | Ok(()) 15 | } 16 | } 17 | 18 | fn main() { 19 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 20 | 21 | let server = HttpServer(HelloWorld) 22 | .start(format!("127.0.0.1:{}", port_number)) 23 | .unwrap(); 24 | server.wait(); 25 | } 26 | 27 | /// retrieve port number from the `main.rs` script 28 | /// that is assigned in `config.json` 29 | fn get_port_number() -> String { 30 | std::env::args().collect::>()[1].clone() 31 | } 32 | -------------------------------------------------------------------------------- /src/bin/nickel.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate nickel; 3 | 4 | use nickel::{HttpRouter, Nickel}; 5 | 6 | fn main() { 7 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 8 | 9 | let mut server = Nickel::new(); 10 | server.get("**", middleware!("Hello, world!")); 11 | server.listen(format!("127.0.0.1:{}", port_number)).unwrap(); 12 | } 13 | 14 | /// retrieve port number from the `main.rs` script 15 | /// that is assigned in `config.json` 16 | fn get_port_number() -> String { 17 | std::env::args().collect::>()[1].clone() 18 | } 19 | -------------------------------------------------------------------------------- /src/bin/ntex.rs: -------------------------------------------------------------------------------- 1 | use ntex::web::{self, middleware, App, HttpRequest}; 2 | 3 | async fn index(_req: HttpRequest) -> &'static str { 4 | "Hello world!" 5 | } 6 | 7 | #[ntex::main] 8 | async fn main() -> std::io::Result<()> { 9 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 10 | 11 | web::server(|| { 12 | App::new() 13 | // enable logger 14 | .wrap(middleware::Logger::default()) 15 | .service(web::resource("/").to(index)) 16 | }) 17 | .bind(format!("127.0.0.1:{}", port_number))? 18 | .run() 19 | .await 20 | } 21 | 22 | fn get_port_number() -> String { 23 | std::env::args().collect::>()[1].clone() 24 | } 25 | -------------------------------------------------------------------------------- /src/bin/poem.rs: -------------------------------------------------------------------------------- 1 | use poem::{get, handler, listener::TcpListener, Route, Server}; 2 | 3 | #[handler] 4 | fn hello() -> &'static str { 5 | "Hello, World!" 6 | } 7 | 8 | #[tokio::main] 9 | async fn main() -> Result<(), std::io::Error> { 10 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 11 | 12 | let app = Route::new().at("/", get(hello)); 13 | Server::new(TcpListener::bind(format!("127.0.0.1:{}", port_number))) 14 | .name("hello-world") 15 | .run(app) 16 | .await 17 | } 18 | 19 | /// retrieve port number from the `main.rs` script 20 | /// that is assigned in `config.json` 21 | fn get_port_number() -> String { 22 | std::env::args().collect::>()[1].clone() 23 | } 24 | -------------------------------------------------------------------------------- /src/bin/roa.rs: -------------------------------------------------------------------------------- 1 | use roa::preload::*; 2 | use roa::App; 3 | 4 | #[tokio::main] 5 | async fn main() -> anyhow::Result<()> { 6 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 7 | 8 | let app = App::new().end("Hello, World"); 9 | app.listen(format!("127.0.0.1:{}", port_number), |_| {})? 10 | .await?; 11 | Ok(()) 12 | } 13 | 14 | /// retrieve port number from the `main.rs` script 15 | /// that is assigned in `config.json` 16 | fn get_port_number() -> String { 17 | std::env::args().collect::>()[1].clone() 18 | } 19 | -------------------------------------------------------------------------------- /src/bin/rocket.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate rocket; 3 | 4 | // this is our get route which will be requested at the "/" location wherever it is mounted 5 | #[get("/")] 6 | fn say_hello() -> &'static str { 7 | "Hello world!" 8 | } 9 | 10 | #[launch] 11 | fn rocket() -> _ { 12 | rocket::build().mount("/", routes![say_hello]) 13 | } 14 | -------------------------------------------------------------------------------- /src/bin/salvo.rs: -------------------------------------------------------------------------------- 1 | use salvo::prelude::*; 2 | 3 | #[handler] 4 | fn hello() -> &'static str { 5 | "Hello, World!" 6 | } 7 | 8 | #[tokio::main] 9 | async fn main() { 10 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 11 | 12 | let router = Router::new().get(hello); 13 | Server::new( 14 | TcpListener::new(format!("127.0.0.1:{}", port_number).as_str()) 15 | .bind() 16 | .await, 17 | ) 18 | .serve(router) 19 | .await 20 | } 21 | 22 | /// retrieve port number from the `main.rs` script 23 | /// that is assigned in `config.json` 24 | fn get_port_number() -> String { 25 | std::env::args().collect::>()[1].clone() 26 | } 27 | -------------------------------------------------------------------------------- /src/bin/thruster.rs: -------------------------------------------------------------------------------- 1 | use thruster::BasicContext as Context; 2 | use thruster::{ 3 | m, middleware_fn, App, MiddlewareNext, MiddlewareResult, Request, Server, ThrusterServer, 4 | }; 5 | 6 | #[middleware_fn] 7 | async fn hello(mut ctx: Context, _next: MiddlewareNext) -> MiddlewareResult { 8 | ctx.body("Hello, world!"); 9 | Ok(ctx) 10 | } 11 | 12 | fn main() { 13 | let app = App::::new_basic().get("/", m![hello]); 14 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 15 | 16 | Server::new(app).start("127.0.0.1", port_number); 17 | } 18 | 19 | /// retrieve port number from the `main.rs` script 20 | /// that is assigned in `config.json` 21 | fn get_port_number() -> String { 22 | std::env::args().collect::>()[1].clone() 23 | } 24 | -------------------------------------------------------------------------------- /src/bin/tide.rs: -------------------------------------------------------------------------------- 1 | #[async_std::main] 2 | async fn main() -> Result<(), std::io::Error> { 3 | let mut app = tide::new(); 4 | 5 | app.at("/").get(|_| async { Ok("Hello, world!") }); 6 | 7 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 8 | 9 | app.listen(format!("127.0.0.1:{}", port_number)).await?; 10 | Ok(()) 11 | } 12 | 13 | fn get_port_number() -> String { 14 | std::env::args().collect::>()[1].clone() 15 | } 16 | -------------------------------------------------------------------------------- /src/bin/tokio-minihttp.rs: -------------------------------------------------------------------------------- 1 | extern crate tokio_minihttp; 2 | use std::io; 3 | 4 | use futures::future; 5 | use tokio_minihttp::{Http, Request, Response}; 6 | use tokio_proto::TcpServer; 7 | use tokio_service::Service; 8 | 9 | struct HelloWorld; 10 | 11 | impl Service for HelloWorld { 12 | type Request = Request; 13 | type Response = Response; 14 | type Error = io::Error; 15 | type Future = future::Ok; 16 | 17 | fn call(&self, _request: Request) -> Self::Future { 18 | let mut resp = Response::new(); 19 | resp.body("Hello, world!"); 20 | future::ok(resp) 21 | } 22 | } 23 | 24 | fn main() { 25 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 26 | 27 | let addr = format!("127.0.0.1:{}", port_number).parse().unwrap(); 28 | TcpServer::new(Http, addr).serve(|| Ok(HelloWorld)); 29 | } 30 | 31 | /// retrieve port number from the `main.rs` script 32 | /// that is assigned in `config.json` 33 | fn get_port_number() -> String { 34 | std::env::args().collect::>()[1].clone() 35 | } 36 | -------------------------------------------------------------------------------- /src/bin/viz.rs: -------------------------------------------------------------------------------- 1 | use std::net::SocketAddr; 2 | use viz::{get, Body, Request, Result, Router, Server, ServiceMaker}; 3 | 4 | async fn index(_: Request) -> Result<&'static str> { 5 | Ok("Hello, World!") 6 | } 7 | 8 | #[tokio::main] 9 | async fn main() { 10 | let app = Router::new().route("/", get(index)); 11 | 12 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 13 | 14 | Server::bind(&SocketAddr::from(([127, 0, 0, 1], port_number))) 15 | .tcp_nodelay(true) 16 | .serve(ServiceMaker::from(app)) 17 | .await 18 | .unwrap() 19 | } 20 | 21 | fn get_port_number() -> String { 22 | std::env::args().collect::>()[1].clone() 23 | } 24 | -------------------------------------------------------------------------------- /src/bin/warp.rs: -------------------------------------------------------------------------------- 1 | use warp::Filter; 2 | 3 | #[tokio::main] 4 | async fn main() { 5 | // Match any request and return hello world! 6 | let routes = warp::any().map(|| "Hello world!"); 7 | let port_number: u16 = str::parse(get_port_number().as_str()).unwrap(); 8 | 9 | warp::serve(routes).run(([127, 0, 0, 1], port_number)).await; 10 | } 11 | 12 | fn get_port_number() -> String { 13 | std::env::args().collect::>()[1].clone() 14 | } 15 | -------------------------------------------------------------------------------- /src/helpers/mod.rs: -------------------------------------------------------------------------------- 1 | // use std::process 2 | pub mod helpers { 3 | pub fn get_port_number() -> String {} 4 | } 5 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use chrono::Utc; 2 | use colored::Colorize; 3 | use crossterm::{cursor, execute, terminal}; 4 | use indicatif::{ProgressBar, ProgressStyle}; 5 | use lazy_static::lazy_static; 6 | use num_format::{Locale, ToFormattedString}; 7 | use regex::Regex; 8 | use serde::{Deserialize, Serialize}; 9 | use std::io::{stdout, Write}; 10 | use std::{ 11 | fmt::Write as FmtWrite, 12 | fs, 13 | process::{Child, Command, Output}, 14 | time::Duration, 15 | }; 16 | 17 | macro_rules! infer_len_slice { 18 | ( 19 | $( #[$attr:meta] )* 20 | $v:vis $id:ident $name:ident: [$ty:ty; _] = $value:expr 21 | ) => { 22 | $( #[$attr] )* 23 | $v $id $name: [$ty; $value.len()] = $value; 24 | } 25 | } 26 | 27 | #[cfg(not(debug_assertions))] 28 | static FRAMEWORK_SETTINGS: &str = include_str!("./utils/config.json"); 29 | #[cfg(debug_assertions)] 30 | static FRAMEWORK_SETTINGS: &str = include_str!("./utils/config.dev.json"); 31 | 32 | #[cfg(not(debug_assertions))] 33 | static OUTPUT_MD_FILE: &str = "./readme.md"; 34 | #[cfg(debug_assertions)] 35 | static OUTPUT_MD_FILE: &str = "./readme.dev.md"; 36 | 37 | #[cfg(debug_assertions)] 38 | const DEFAULT_DURATION: u32 = 2_u32; 39 | #[cfg(not(debug_assertions))] 40 | const DEFAULT_DURATION: u32 = 20_u32; 41 | 42 | static HEADER_TXT: &str = include_str!("./utils/header.txt"); 43 | static MARKDOWN_HEADER: &str = include_str!("./utils/markdown-header.md"); 44 | static TABLE_SEPARATOR: &str = include_str!("./utils/table-separator.md"); 45 | static READ_ME_STRING: &str = include_str!("./utils/readme_block.md"); 46 | 47 | infer_len_slice !(static BENCHMARK_SETTINGS: [Settings; _] = [ 48 | #[cfg(not(debug_assertions))] 49 | Settings { 50 | concurrency: 16, 51 | threads: 2, 52 | duration: DEFAULT_DURATION, 53 | }, 54 | #[cfg(not(debug_assertions))] 55 | Settings { 56 | concurrency: 32, 57 | threads: 2, 58 | duration: DEFAULT_DURATION, 59 | }, 60 | Settings { 61 | concurrency: 64, 62 | threads: 2, 63 | duration: DEFAULT_DURATION, 64 | }, 65 | Settings { 66 | concurrency: 128, 67 | threads: 2, 68 | duration: DEFAULT_DURATION, 69 | }, 70 | Settings { 71 | concurrency: 256, 72 | threads: 2, 73 | duration: DEFAULT_DURATION, 74 | }, 75 | Settings { 76 | concurrency: 512, 77 | threads: 2, 78 | duration: DEFAULT_DURATION, 79 | }, 80 | Settings { 81 | concurrency: 1024, 82 | threads: 2, 83 | duration: DEFAULT_DURATION, 84 | }, 85 | 86 | ]); 87 | 88 | struct Settings { 89 | concurrency: u32, 90 | threads: u8, 91 | duration: u32, // seconds 92 | } 93 | 94 | #[derive(Debug, Clone)] 95 | struct Stats { 96 | requests_per_second: f64, 97 | name: String, 98 | average_latency: String, 99 | max_latency: String, 100 | total_requests: u64, 101 | concurrency: u32, 102 | std_dev: String, 103 | min_latency: String, 104 | transfer_rate: String, 105 | num_errors: u64, 106 | pct_99_9: String, 107 | pct_99: String, 108 | pct_95: String, 109 | } 110 | 111 | #[derive(Default, Debug, Serialize, Deserialize)] 112 | struct Framework { 113 | name: &'static str, 114 | port: u32, 115 | binary: &'static str, 116 | url: &'static str, 117 | description: &'static str, 118 | } 119 | 120 | impl Framework { 121 | fn print_log(&self, settings: &Settings, framework_index: usize, bench_index: usize) { 122 | print_current_info(framework_index, bench_index, settings, self.name); 123 | show_progress_bar(settings); 124 | } 125 | 126 | #[must_use = "Require handle to kill it once the benchmark finishes"] 127 | fn start_server(&self) -> Child { 128 | match Command::new(format!("target/release/{}", self.binary)) 129 | .arg(format!("{}", self.port)) 130 | .spawn() 131 | { 132 | Ok(handle) => handle, 133 | Err(err_message) => panic!("{}", err_message.to_string()), 134 | } 135 | } 136 | 137 | async fn run_benchmark(&self, framework_index: usize) { 138 | // start the framework's server 139 | let mut server_handle = self.start_server(); 140 | 141 | // kill server if there's an error while creating a directory 142 | if let Err(err_message) = fs::create_dir_all(format!("perf/{}", self.binary)) { 143 | server_handle.kill().unwrap(); 144 | println!( 145 | "\n[ERROR] Couldn't create directory (perf/{}) : {}", 146 | self.name, err_message 147 | ); 148 | std::process::exit(-1); 149 | }; 150 | BENCHMARK_SETTINGS 151 | .iter() 152 | .enumerate() 153 | .for_each(|(bench_index, setting)| { 154 | self.print_log(setting, framework_index, bench_index); 155 | // wait 2 secs till the server starts running (some servers take more time to start - for example tide) 156 | std::thread::sleep(Duration::from_secs(1)); 157 | let rewrk_output = start_bench(setting, self.port); 158 | 159 | if !rewrk_output.stderr.is_empty() { 160 | println!("Error: {}", String::from_utf8_lossy(&rewrk_output.stderr)); 161 | } 162 | 163 | // kill server if there's an error while writing `rewrk` output to the file 164 | let file_name = format!("perf/{}/{}.txt", self.binary, setting.concurrency); 165 | if let Err(err_message) = fs::write(file_name, rewrk_output.stdout) { 166 | server_handle.kill().unwrap(); 167 | println!("\n[ERROR] Couldn't write to file: {}", err_message); 168 | std::process::exit(-1); 169 | } 170 | 171 | // wait a bit to free system resources 172 | std::thread::sleep(Duration::from_secs(1)); 173 | }); 174 | 175 | if let Err(err_message) = server_handle.kill() { 176 | println!("\nFailed to kill {} server.\n{}", self.name, err_message); 177 | std::process::exit(-1); 178 | } 179 | } 180 | } 181 | 182 | #[tokio::main] 183 | async fn main() { 184 | let mut frameworks = parse_frameworks(); 185 | print_benchmark_message(); 186 | print_expected_time(frameworks.len()); 187 | 188 | for (index, current_framework) in frameworks.iter().enumerate() { 189 | current_framework.run_benchmark(index).await; 190 | } 191 | 192 | let sorted_frameworks = sort_framework(&mut frameworks); 193 | write_markdown(&sorted_frameworks); 194 | write_readme(&frameworks); 195 | 196 | // optional - disable it if you've not forked yet 197 | // disable auto commit while running in debug mode 198 | if !cfg!(debug_assertions) { 199 | commit_and_push(); 200 | } 201 | } 202 | 203 | fn write_readme(frameworks: &Vec) { 204 | let split_string: Vec<&str> = READ_ME_STRING.split("==SPLIT==").collect(); 205 | let mut markdown_content = String::new(); 206 | 207 | writeln!( 208 | markdown_content, 209 | "\n### **(Last updated: {})** \n", 210 | Utc::now().format("%a %b %e %Y %T") 211 | ) 212 | .unwrap(); 213 | 214 | writeln!(&mut markdown_content, "## Frameworks included").unwrap(); 215 | for framework in frameworks { 216 | writeln!( 217 | &mut markdown_content, 218 | "**[{}]({})** - {}
", 219 | framework.name, framework.url, framework.description 220 | ) 221 | .unwrap(); 222 | } 223 | writeln!(&mut markdown_content, "# Results").unwrap(); 224 | BENCHMARK_SETTINGS.iter().for_each(|curr| { 225 | let file_path = format!("results/concurrency-{}.md", curr.concurrency); 226 | let current_result = fs::read_to_string(file_path).unwrap(); 227 | 228 | writeln!( 229 | &mut markdown_content, 230 | "| Concurrency: {} | Duration: {} secs | Threads: {} |", 231 | curr.concurrency, curr.duration, curr.threads 232 | ) 233 | .unwrap(); 234 | writeln!(&mut markdown_content, "{}", TABLE_SEPARATOR).unwrap(); 235 | writeln!(&mut markdown_content, "{}\n", current_result).unwrap(); 236 | }); 237 | 238 | let new_md = format!( 239 | "{}\n{}\n{}", 240 | split_string[0], markdown_content, split_string[1] 241 | ); 242 | fs::write(OUTPUT_MD_FILE, new_md).unwrap(); 243 | } 244 | 245 | fn commit_and_push() { 246 | let add_output = Command::new("git").arg("add").arg(".").output().unwrap(); 247 | let commit_output = Command::new("git") 248 | .arg("commit") 249 | .arg("-am update benchmark results") 250 | .output() 251 | .unwrap(); 252 | let push_output = Command::new("git").arg("push").output().unwrap(); 253 | println!( 254 | "{}\n\n{}\n{}", 255 | String::from_utf8_lossy(&add_output.stdout), 256 | String::from_utf8_lossy(&commit_output.stdout), 257 | String::from_utf8_lossy(&push_output.stdout), 258 | ) 259 | } 260 | 261 | fn write_markdown(sorted_frameworks: &[Vec]) { 262 | for batches in sorted_frameworks.iter() { 263 | let concurrency = batches[0].concurrency.to_string(); 264 | let mut markdown_string = String::new(); 265 | writeln!(&mut markdown_string, "{}", MARKDOWN_HEADER).unwrap(); 266 | 267 | for framework_stat in batches { 268 | writeln!( 269 | &mut markdown_string, 270 | "|**{}** {}|{}|{}|{}|{}|{}|{}|{}|{}|{}|{}|{}|", 271 | framework_stat.name, 272 | if framework_stat.average_latency == "99999" { 273 | "(FAIL)" 274 | } else { 275 | "" 276 | }, 277 | (framework_stat.requests_per_second as u64).to_formatted_string(&Locale::en), 278 | if framework_stat.average_latency == "99999" { 279 | "FAIL".to_string() 280 | } else { 281 | framework_stat.average_latency.to_string() 282 | }, 283 | if framework_stat.min_latency == "99999" { 284 | "FAIL".to_string() 285 | } else { 286 | framework_stat.min_latency.to_string() 287 | }, 288 | if framework_stat.max_latency == "99999" { 289 | "FAIL".to_string() 290 | } else { 291 | framework_stat.max_latency.to_string() 292 | }, 293 | if framework_stat.std_dev == "99999" { 294 | "FAIL".to_string() 295 | } else { 296 | framework_stat.std_dev.to_string() 297 | }, 298 | if framework_stat.pct_95 == "99999" { 299 | "N/A".to_owned() 300 | } else { 301 | framework_stat.pct_95.to_owned() 302 | }, 303 | if framework_stat.pct_99 == "99999" { 304 | "N/A".to_owned() 305 | } else { 306 | framework_stat.pct_99.to_owned() 307 | }, 308 | if framework_stat.pct_99_9 == "99999" { 309 | "N/A".to_owned() 310 | } else { 311 | framework_stat.pct_99_9.to_owned() 312 | }, 313 | (framework_stat.total_requests as u64).to_formatted_string(&Locale::en), 314 | if framework_stat.transfer_rate.is_empty() { 315 | "N/A".to_owned() 316 | } else { 317 | framework_stat.transfer_rate.to_owned() 318 | }, 319 | framework_stat.num_errors 320 | ) 321 | .unwrap(); 322 | } 323 | fs::write( 324 | format!("results/concurrency-{}.md", concurrency), 325 | markdown_string, 326 | ) 327 | .unwrap(); 328 | } 329 | } 330 | 331 | fn parse_frameworks() -> Vec { 332 | serde_json::from_str(FRAMEWORK_SETTINGS).unwrap() 333 | } 334 | 335 | fn calculate_results(frameworks: &[Framework]) -> Vec { 336 | let mut statistics: Vec = 337 | Vec::with_capacity(BENCHMARK_SETTINGS.len() * frameworks.len()); 338 | // for every setting type, fetch all frameworks stats 339 | for setting in &BENCHMARK_SETTINGS { 340 | for framework in frameworks { 341 | let benchmark_result = read_perf_data(framework.binary, setting.concurrency); 342 | 343 | lazy_static! { 344 | static ref LATENCY_RGX: Regex = Regex::new(r"([0-9]+.[0-9]+[a-z]+)").unwrap(); 345 | static ref TOTAL_REQUESTS_RGX: Regex = Regex::new(r"l:\s+[0-9]+\s").unwrap(); 346 | static ref NUM_ERRORS_RGX: Regex = Regex::new(r"[0-9]+\sE").unwrap(); 347 | static ref REQUESTS_PER_SECOND_RGX: Regex = 348 | Regex::new(r"c:\s[0-9]+.[0-9]+\s").unwrap(); 349 | static ref TRANSFER_RATE_RGX: Regex = Regex::new(r"e: [0-9]+.[0-9]+\s.*").unwrap(); 350 | } 351 | 352 | let framework_stats: Stats = calculate_stats(StatArgs { 353 | framework_name: framework.name, 354 | latency_regex: &LATENCY_RGX, 355 | requests_regex: &TOTAL_REQUESTS_RGX, 356 | rps_regex: &REQUESTS_PER_SECOND_RGX, 357 | num_errors_rgx: &NUM_ERRORS_RGX, 358 | transfer_rate_rgx: &TRANSFER_RATE_RGX, 359 | benchmark_result: &benchmark_result, 360 | concurrency: setting.concurrency, 361 | }); 362 | 363 | statistics.push(framework_stats) 364 | } 365 | } 366 | statistics 367 | } 368 | 369 | fn sort_framework(frameworks: &mut [Framework]) -> Vec> { 370 | // calculate results and render into markdown table 371 | let mut vec = calculate_results(frameworks); 372 | 373 | let mut sorted_frameworks = Vec::new(); 374 | 375 | let chunks = vec.chunks_mut(frameworks.len()); 376 | chunks.for_each(|curr| { 377 | curr.sort_by(|curr, next| { 378 | next.requests_per_second 379 | .partial_cmp(&curr.requests_per_second) 380 | .unwrap() 381 | }); 382 | sorted_frameworks.push(curr.to_vec()); 383 | }); 384 | 385 | sorted_frameworks 386 | } 387 | 388 | fn start_bench(setting: &Settings, port: u32) -> Output { 389 | Command::new("rewrk") 390 | .arg(format!("-d{}s", setting.duration)) 391 | .arg(format!("-t={}", setting.threads)) 392 | .arg(format!("-c={}", setting.concurrency)) 393 | .arg(format!("-h=http://localhost:{}", port)) 394 | .arg("--pct") 395 | .output() 396 | .unwrap() 397 | } 398 | 399 | fn show_progress_bar(settings: &Settings) { 400 | let goal = settings.duration; 401 | let pb = ProgressBar::new(goal.into()); 402 | pb.set_style( 403 | ProgressStyle::default_bar() 404 | .template("{spinner:.cyan} ❖⎨{bar:40.white}⎬❖ ⏰ [{elapsed_precise}]") 405 | .progress_chars(r"▋░"), 406 | ); 407 | let duration = settings.duration + 1; 408 | 409 | std::thread::spawn(move || { 410 | for _ in 0..duration { 411 | pb.inc((1_u32).into()); 412 | std::thread::sleep(Duration::from_secs(1)); 413 | } 414 | }); 415 | } 416 | 417 | struct StatArgs<'a> { 418 | framework_name: &'a str, 419 | latency_regex: &'a Regex, 420 | requests_regex: &'a Regex, 421 | rps_regex: &'a Regex, 422 | num_errors_rgx: &'a Regex, 423 | transfer_rate_rgx: &'a Regex, 424 | benchmark_result: &'a str, 425 | concurrency: u32, 426 | } 427 | 428 | fn calculate_stats(args: StatArgs) -> Stats { 429 | let StatArgs { 430 | framework_name, 431 | latency_regex, 432 | requests_regex, 433 | rps_regex, 434 | num_errors_rgx, 435 | transfer_rate_rgx, 436 | benchmark_result, 437 | concurrency, 438 | } = args; 439 | let latency_string: String = latency_regex 440 | .find_iter(benchmark_result) 441 | .map(|mat| format!("{} ", mat.as_str())) 442 | .collect(); 443 | let mut latencies = latency_string.split_whitespace(); 444 | let avg_latency = latencies.next().unwrap_or("99999"); 445 | let std_dev = latencies.next().unwrap_or("99999"); 446 | let min_latency = latencies.next().unwrap_or("99999"); 447 | let max_latency = latencies.next().unwrap_or("99999"); 448 | let pct_99_9 = latencies.next().unwrap_or("99999"); 449 | let pct_99 = latencies.next().unwrap_or("99999"); 450 | let pct_95 = latencies.next().unwrap_or("99999"); 451 | 452 | let transfer_rate_string: String = transfer_rate_rgx 453 | .find_iter(benchmark_result) 454 | .map(|mat| mat.as_str()) 455 | .collect::() 456 | .split_whitespace() 457 | .skip(1) 458 | .collect(); 459 | 460 | let total_requests_string: String = requests_regex 461 | .find_iter(benchmark_result) 462 | .map(|mat| mat.as_str()) 463 | .collect(); 464 | let requests_per_sec_string: String = rps_regex 465 | .find_iter(benchmark_result) 466 | .map(|mat| mat.as_str()) 467 | .collect(); 468 | 469 | let total_requests = total_requests_string 470 | .split_whitespace() 471 | .nth(1) 472 | .unwrap_or("0"); 473 | let req_per_sec = requests_per_sec_string 474 | .split_whitespace() 475 | .nth(1) 476 | .unwrap_or("0"); 477 | let num_errors: String = num_errors_rgx 478 | .find_iter(benchmark_result) 479 | .map(|mat| mat.as_str()) 480 | .collect(); 481 | let num_errors = num_errors.split_whitespace().next().unwrap_or("0"); 482 | 483 | Stats { 484 | requests_per_second: req_per_sec.parse::().unwrap(), 485 | name: framework_name.to_string(), 486 | average_latency: avg_latency.to_string(), 487 | max_latency: max_latency.to_string(), 488 | total_requests: total_requests.parse().unwrap(), 489 | concurrency, 490 | transfer_rate: transfer_rate_string, 491 | min_latency: min_latency.to_owned(), 492 | num_errors: num_errors.parse::().unwrap(), 493 | pct_95: pct_95.to_owned(), 494 | pct_99: pct_99.to_owned(), 495 | pct_99_9: pct_99_9.to_owned(), 496 | std_dev: std_dev.to_owned(), 497 | } 498 | } 499 | 500 | fn read_perf_data(binary_name: &str, concurrency: u32) -> String { 501 | fs::read_to_string(format!( 502 | "perf/{}/{}.txt", 503 | binary_name, concurrency 504 | )) 505 | .unwrap_or_else(|_| { 506 | println!( 507 | "\ 508 | Couldn't find the file: perf/{1}/{}.txt. {1} failed to finish the tests successfully, it will not be printed out in the results. 509 | ", 510 | concurrency, binary_name 511 | ); 512 | "".to_string() 513 | }) 514 | } 515 | 516 | fn print_current_info( 517 | framework_index: usize, 518 | bench_index: usize, 519 | settings: &Settings, 520 | framework_name: &str, 521 | ) { 522 | let mut stdout = stdout(); 523 | execute!(stdout, cursor::MoveUp(2)).unwrap(); 524 | execute!(stdout, terminal::Clear(terminal::ClearType::CurrentLine)).unwrap(); 525 | 526 | println!( 527 | " {} {} {} {} {}\n", 528 | format!( 529 | " ⁅{}/{}⁆ ", 530 | framework_index * BENCHMARK_SETTINGS.len() + bench_index + 1, 531 | BENCHMARK_SETTINGS.len() * parse_frameworks().len() 532 | ) 533 | .black() 534 | .on_bright_cyan(), 535 | format!(" 🚀 RUNNING: {} ", framework_name) 536 | .bright_white() 537 | .on_bright_red(), 538 | format!(" 💪 CONCURRENCY: {} ", settings.concurrency) 539 | .black() 540 | .on_bright_white(), 541 | format!(" 🪡 REWRK THREADS: {} ", settings.threads) 542 | .bright_white() 543 | .on_bright_black(), 544 | format!(" ⏰ DURATION: {}s ", settings.duration) 545 | .black() 546 | .on_bright_yellow(), 547 | ) 548 | } 549 | 550 | fn print_expected_time(total_frameworks: usize) { 551 | let total_time_per_framework = BENCHMARK_SETTINGS 552 | .iter() 553 | .fold(0, |accumulated, current| accumulated + current.duration + 4); 554 | println!( 555 | "\t\t 💤 Benchmark will take around {} to finish.\n\n\n\n", 556 | format!( 557 | " {} minutes {} seconds ", 558 | (total_time_per_framework * total_frameworks as u32 / 60), 559 | (total_time_per_framework * total_frameworks as u32 % 60) 560 | ) 561 | .black() 562 | .on_white() 563 | ); 564 | } 565 | 566 | fn print_benchmark_message() { 567 | let mut stdout = stdout(); 568 | execute!(stdout, terminal::Clear(terminal::ClearType::FromCursorUp)).unwrap(); 569 | execute!(stdout, cursor::MoveTo(0, 0)).unwrap(); 570 | writeln!(stdout, "{}", HEADER_TXT).unwrap(); 571 | } 572 | -------------------------------------------------------------------------------- /src/utils/config.dev.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Actix-Web", 4 | "port": 3000, 5 | "binary": "actix", 6 | "url": "https://actix.rs", 7 | "description": "A powerful, pragmatic, and extremely fast web framework for Rust" 8 | }, 9 | { 10 | "name": "Hyper", 11 | "port": 3000, 12 | "binary": "hyper", 13 | "url": "https://hyper.rs", 14 | "description": "Fast and safe HTTP for the Rust language" 15 | } 16 | ] 17 | -------------------------------------------------------------------------------- /src/utils/config.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Actix-Web", 4 | "port": 3000, 5 | "binary": "actix", 6 | "url": "https://actix.rs", 7 | "description": "A powerful, pragmatic, and extremely fast web framework for Rust" 8 | }, 9 | { 10 | "name": "Hyper", 11 | "port": 3000, 12 | "binary": "hyper", 13 | "url": "https://hyper.rs", 14 | "description": "Fast and safe HTTP for the Rust language" 15 | }, 16 | { 17 | "name": "Axum", 18 | "port": 3000, 19 | "binary": "axum", 20 | "url": "https://github.com/tokio-rs/axum", 21 | "description": "Web application framework that focuses on ergonomics and modularity" 22 | }, 23 | { 24 | "name": "Warp", 25 | "port": 3000, 26 | "binary": "warp", 27 | "url": "https://github.com/seanmonstar/warp", 28 | "description": "A super-easy, composable, web server framework for warp speeds" 29 | }, 30 | { 31 | "name": "Ntex", 32 | "port": 3000, 33 | "binary": "ntex", 34 | "url": "https://github.com/ntex-rs/ntex", 35 | "description": "Framework for composable network services" 36 | }, 37 | { 38 | "name": "Rocket", 39 | "port": 3000, 40 | "binary": "rocket", 41 | "url": "https://rocket.rs", 42 | "description": "Write fast, secure web applications without sacrificing flexibility, usability, or type safety" 43 | }, 44 | { 45 | "name": "Tide", 46 | "port": 3000, 47 | "binary": "tide", 48 | "url": "https://github.com/http-rs/tide", 49 | "description": "Minimal and pragmatic Rust web application framework built for rapid development" 50 | }, 51 | { 52 | "name": "May-MiniHttp", 53 | "port": 3000, 54 | "binary": "may-minihttp", 55 | "url": "https://github.com/Xudong-Huang/may_minihttp", 56 | "description": "Mini http server that implemented on top of may" 57 | }, 58 | { 59 | "name": "Viz", 60 | "port": 3000, 61 | "binary": "viz", 62 | "url": "https://github.com/viz-rs/viz", 63 | "description": "Fast, robust, flexible, lightweight web framework for Rust" 64 | }, 65 | { 66 | "name": "Tokio-minihttp", 67 | "port": 3000, 68 | "binary": "tokio-minihttp", 69 | "url": "https://github.com/tokio-rs/tokio-minihttp", 70 | "description": "Proof-of-concept implementation of a simple HTTP/1.1 server using Tokio." 71 | }, 72 | 73 | { 74 | "name": "Thruster", 75 | "port": 3000, 76 | "binary": "thruster", 77 | "url": "https://github.com/thruster-rs/Thruster", 78 | "description": "A fast and intuitive rust web framework" 79 | }, 80 | { 81 | "name": "Salvo", 82 | "port": 3000, 83 | "binary": "salvo", 84 | "url": "https://github.com/salvo-rs/salvo", 85 | "description": "Simple and powerful Rust web backend framework" 86 | }, 87 | { 88 | "name": "Poem", 89 | "port": 3000, 90 | "binary": "poem", 91 | "url": "https://github.com/poem-web/poem", 92 | "description": "A full-featured and easy-to-use web framework" 93 | }, 94 | { 95 | "name": "Gotham", 96 | "port": 3000, 97 | "binary": "gotham", 98 | "url": "https://github.com/gotham-rs/gotham", 99 | "description": "A flexible web framework that promotes stability, safety, security and speed." 100 | }, 101 | { 102 | "name": "Astra", 103 | "port": 3000, 104 | "binary": "astra", 105 | "url": "https://github.com/ibraheemdev/astra", 106 | "description": "Synchronous HTTP server built on top of hyper" 107 | }, 108 | { 109 | "name": "Nickel", 110 | "port": 3000, 111 | "binary": "nickel", 112 | "url": "https://github.com/nickel-org/nickel.rs", 113 | "description": "An expressjs inspired framework for rust" 114 | }, 115 | { 116 | "name": "Roa", 117 | "port": 3000, 118 | "binary": "roa", 119 | "url": "https://github.com/Hexilee/roa", 120 | "description": "Roa is an async web framework inspired by koajs, lightweight but powerful." 121 | } 122 | ] 123 | -------------------------------------------------------------------------------- /src/utils/example-output.json: -------------------------------------------------------------------------------- 1 | { 2 | "latency_avg": 1.535492, 3 | "latency_max": 19.844832999999998, 4 | "latency_min": 0.016875, 5 | "latency_std_deviation": 0.29598535587874186, 6 | "requests_avg": 130141.80131596672, 7 | "requests_total": 1300820, 8 | "transfer_rate": 16918278.09935933, 9 | "transfer_total": 169105040.0 10 | } 11 | -------------------------------------------------------------------------------- /src/utils/header.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | █▀▀ ▀▀█▀▀ █▀▀█ █▀▀█ ▀▀█▀▀ █▀▀▄ █▀▀ █▀▀▄ █▀▀ █░░█ █▀▄▀█ █▀▀█ █▀▀█ █░█ 5 | ▀▀█ ░░█░░ █▄▄█ █▄▄▀ ░░█░░ █▀▀▄ █▀▀ █░░█ █░░ █▀▀█ █░▀░█ █▄▄█ █▄▄▀ █▀▄ 6 | ▀▀▀ ░░▀░░ ▀░░▀ ▀░▀▀ ░░▀░░ ▀▀▀░ ▀▀▀ ▀░░▀ ▀▀▀ ▀░░▀ ▀░░░▀ ▀░░▀ ▀░▀▀ ▀░▀ 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/utils/markdown-header.md: -------------------------------------------------------------------------------- 1 | | **Name** | Req/sec | Avg Latency | Min Latency | Max Latency | Std Dev | 95% | 99% | 99.9% | # Requests | Transfer Rate | # Errors | 2 | |:------------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:----:|:----:|:----:|:-----------:|:-----------:| -------------------------------------------------------------------------------- /src/utils/readme_block.md: -------------------------------------------------------------------------------- 1 | # Rust framework benchmarks 2 | 3 | Benchmarking utility to test the performance of all the rust web frameworks. Built with [rust](https://rust-lang.org) 🚀. 4 | 5 | # Demo 6 | 7 | ![Demo](https://s4.gifyu.com/images/outputf55c6e3d5b6a1f8e.gif) 8 | 9 | ## Try it yourself 10 | 11 | Everything is automated, including adding a framework, generating `md` file output, and running the tests without having to start all the servers at once! 12 | 13 | Pleas make sure you do not have capped soft limit or hard limit for file descriptors, this may cause benchmarks with high concurrency (-c) fail with OS error 54, 14 | to fix that - 15 | 16 | ## Linux 17 | 18 | 1. Open `/etc/sysctl.conf` 19 | 2. Add `fs.file-max = 65536` 20 | 3. Reboot your pc and verify it after rebooting with `sysctl -p` 21 | 22 | ## Mac 23 | 24 | 1. Check your current limit - `launchctl limit maxfiles` 25 | 2. The first entry is the soft limit, and the second entry is hard limit. In most cases the hard limit is unlimited, it's the soft limit that we need to change 26 | 3. Update the hard limit `sudo launchctl limit maxfiles 65536 200000` 27 | 4. Reboot. 28 | 29 | Alternatively, if you wish to change the soft limit to only run the benchmark one time, you can change it for your current terminal session by 30 | `ulimit -n 65536`. 31 | This doesn't require boot, and will reset back to the default (usually 2560) after restarting the terminal. 32 | 33 | To run the tests locally, please follow the steps - 34 | 35 | 1. Download the repository as a zip, or clone/fork it. 36 | 2. `cd rust-framework-benchmarks` 37 | 3. `cargo build --release --bins` 38 | 4. Run the main script and you're good to go.. 39 | `./target/release/main` or `cargo run --release --bin main` 40 | 41 | All the output will be stored in `perf/{name}/{concurrency}.txt*` 42 | 43 | ## Machine used 44 | 45 | M1 Max MacBook Pro 2021 - 64GB ram, 10 CPU cores and 32 GPU cores 46 | 47 | ## Suggestions and changes 48 | 49 | All the suggestions, code changes or additions of another web framework is appreciated. I'd like to keep the code as close as a real world scenario, instead of optimising it to the metal. 50 | 51 | To add a new library/framework, please make sure to use the `PORT` provided through the benchmark dynamically. Default is `3000` for all. You can change it in `config.json`. 52 | 53 | Also, to add a framework, add an entry inside `config.json` for the benchmarks to detect it. 54 | 55 | ```json 56 | [ 57 | { 58 | // Name of your framework. Displayed in the readme and during logs 59 | "name": "Axum", 60 | // Default for all the frameworks 61 | "port": 3000, 62 | // the name of the file that your framework is located 63 | "binary": "axum", 64 | // Github or Crates.io or Website 65 | "url": "https://github.com/tokio-rs/axum" 66 | } 67 | ] 68 | ``` 69 | 70 | ```rs 71 | fn get_port_number() -> String { 72 | std::env::args().collect::>()[1].clone() 73 | } 74 | Server::build().bind("hello-world", format!("127.0.0.1:{}", port_number)) 75 | ``` 76 | 77 | ==SPLIT== 78 | 79 | ## Benchmarking tool 80 | 81 | The benchmarks have been performed using [rewrk](https://github.com/ChillFish8/rewrk), locally. 82 | 83 | Check the raw output from rewrk [here](https://github.com/Ishtmeet-Singh/rust-framework-benchmarks/tree/master/perf). 84 | -------------------------------------------------------------------------------- /src/utils/table-separator.md: -------------------------------------------------------------------------------- 1 | |:-------------------:|:---------------------:|:--------------:| 2 | --------------------------------------------------------------------------------