diff --git a/.gitignore b/.gitignore index 8a131da..0e8ab49 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ zig-cache/ *.tar.gz flake.lock.bak tmp/ +**/target/* +**/__pycache__/* diff --git a/README.md b/README.md index cbca0fc..5c62ca1 100644 --- a/README.md +++ b/README.md @@ -63,19 +63,23 @@ machine: - zig zap was nearly 30% faster than GO - zig zap had over 50% more throughput than GO -**Update**: I was intrigued comparing to a basic rust HTTP server. +**Elephant in the room**: I was intrigued comparing to a basic rust HTTP server. Unfortunately, knowing nothing at all about rust, I couldn't find one and hence tried to go for the one in [The Rust Programming Language](https://doc.rust-lang.org/book/ch20-00-final-project-a-web-server.html). Wanting it to be of a somewhat fair comparison, I opted for the multi-threaded example. It didn't work out-of-the-box, but I got it to work and changed it to not read files but outputting a static text just like in the other examples. -**maybe someone with rust experience** can have a look at my +**Maybe someone with rust experience** can have a look at my [wrk/rust/hello](wrk/rust/hello) code and tell me why it's surprisingly slow, as I expected it to be faster than the basic GO example. I'll enable the GitHub discussions for this matter. My suspicion is bad performance of the mutexes. +**Update**: Thanks to @felipetrz, I got to test against more realistic Python +and Rust examples. Both python `sanic` and rust `axum` were easy enough to +integrate. + ![](wrk_table_summary.png) ![](wrk_charts_summary.png) diff --git a/flake.nix b/flake.nix index 7ee2d11..c5c5e90 100644 --- a/flake.nix +++ b/flake.nix @@ -47,6 +47,7 @@ bat wrk python39 + python39Packages.sanic pkgs.rustc pkgs.cargo pkgs.gcc diff --git a/wrk/axum-sanic.md b/wrk/axum-sanic.md new file mode 100644 index 0000000..f22a1cc --- /dev/null +++ b/wrk/axum-sanic.md @@ -0,0 +1,70 @@ +# axum + +```console +zap on  newwrk [$!?] via ↯ v0.11.0-dev.2837+b55b8e774 via  impure (nix-shell) +➜ wrk/measure.sh axum + Finished release [optimized] target(s) in 0.05s +======================================================================== + axum +======================================================================== +Running 10s test @ http://127.0.0.1:3000 + 4 threads and 400 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 527.01us 260.08us 8.47ms 74.31% + Req/Sec 151.11k 4.06k 166.63k 71.25% + Latency Distribution + 50% 518.00us + 75% 644.00us + 90% 811.00us + 99% 1.39ms + 6014492 requests in 10.01s, 768.61MB read +Requests/sec: 600582.38 +Transfer/sec: 76.75MB + +zap on  newwrk [$!?] via ↯ v0.11.0-dev.2837+b55b8e774 via  impure (nix-shell) took 11s +➜ wrk/measure.sh axum + Finished release [optimized] target(s) in 0.05s +======================================================================== + axum +======================================================================== +Running 10s test @ http://127.0.0.1:3000 + 4 threads and 400 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 534.89us 280.25us 7.37ms 76.81% + Req/Sec 150.03k 4.26k 162.67k 72.75% + Latency Distribution + 50% 520.00us + 75% 647.00us + 90% 831.00us + 99% 1.50ms + 5969526 requests in 10.01s, 762.86MB read +Requests/sec: 596134.58 +Transfer/sec: 76.18MB + +zap on  newwrk [$!?] via ↯ v0.11.0-dev.2837+b55b8e774 via  impure (nix-shell) took 11s +➜ wrk/measure.sh axum + Finished release [optimized] target(s) in 0.05s +======================================================================== + axum +======================================================================== +Running 10s test @ http://127.0.0.1:3000 + 4 threads and 400 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 519.96us 269.86us 11.92ms 76.98% + Req/Sec 151.29k 4.32k 164.52k 69.75% + Latency Distribution + 50% 509.00us + 75% 635.00us + 90% 800.00us + 99% 1.41ms + 6021199 requests in 10.01s, 769.46MB read +Requests/sec: 601482.51 +Transfer/sec: 76.86MB + +zap on  newwrk [$!?] via ↯ v0.11.0-dev.2837+b55b8e774 via  impure (nix-shell) took 11s +➜ +``` + +# sanic + + diff --git a/wrk/axum/hello-axum/Cargo.lock b/wrk/axum/hello-axum/Cargo.lock new file mode 100644 index 0000000..e7d07d9 --- /dev/null +++ b/wrk/axum/hello-axum/Cargo.lock @@ -0,0 +1,752 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "async-trait" +version = "0.1.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "axum" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acee9fd5073ab6b045a275b3e709c163dd36c90685219cb21804a147b58dba43" +dependencies = [ + "async-trait", + "axum-core", + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e5939e02c56fecd5c017c37df4238c0a839fa76b7f97acdd7efb804fd181cc" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "tower-layer", + "tower-service", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "hello-axum" +version = "0.1.0" +dependencies = [ + "axum", + "tokio", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "hyper" +version = "0.14.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "libc" +version = "0.2.142" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "matchit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.45.0", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "proc-macro2" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "serde" +version = "1.0.160" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" + +[[package]] +name = "serde_json" +version = "1.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "tokio" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +dependencies = [ + "autocfg", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-macros" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/wrk/axum/hello-axum/Cargo.md b/wrk/axum/hello-axum/Cargo.md new file mode 100644 index 0000000..0700a75 --- /dev/null +++ b/wrk/axum/hello-axum/Cargo.md @@ -0,0 +1,129 @@ +# 60 dependencies!!! + +```console +➜ cargo build + Updating crates.io index + Downloaded percent-encoding v2.2.0 + Downloaded sync_wrapper v0.1.2 + Downloaded async-trait v0.1.68 + Downloaded unicode-ident v1.0.8 + Downloaded tracing v0.1.37 + Downloaded mime v0.3.17 + Downloaded http-body v0.4.5 + Downloaded bytes v1.4.0 + Downloaded httpdate v1.0.2 + Downloaded httparse v1.8.0 + Downloaded http v0.2.9 + Downloaded lock_api v0.4.9 + Downloaded num_cpus v1.15.0 + Downloaded parking_lot v0.12.1 + Downloaded pin-project v1.0.12 + Downloaded parking_lot_core v0.9.7 + Downloaded form_urlencoded v1.1.0 + Downloaded log v0.4.17 + Downloaded memchr v2.5.0 + Downloaded matchit v0.5.0 + Downloaded pin-project-lite v0.2.9 + Downloaded scopeguard v1.1.0 + Downloaded pin-utils v0.1.0 + Downloaded once_cell v1.17.1 + Downloaded serde_urlencoded v0.7.1 + Downloaded pin-project-internal v1.0.12 + Downloaded ryu v1.0.13 + Downloaded quote v1.0.26 + Downloaded proc-macro2 v1.0.56 + Downloaded signal-hook-registry v1.4.1 + Downloaded socket2 v0.4.9 + Downloaded tower-service v0.3.2 + Downloaded tower-layer v0.3.2 + Downloaded tower v0.4.13 + Downloaded autocfg v1.1.0 + Downloaded syn v2.0.15 + Downloaded try-lock v0.2.4 + Downloaded futures-task v0.3.28 + Downloaded futures-core v0.3.28 + Downloaded fnv v1.0.7 + Downloaded bitflags v1.3.2 + Downloaded futures-util v0.3.28 + Downloaded hyper v0.14.26 + Downloaded axum v0.5.17 + Downloaded smallvec v1.10.0 + Downloaded want v0.3.0 + Downloaded axum-core v0.2.9 + Downloaded mio v0.8.6 + Downloaded tokio-macros v2.1.0 + Downloaded serde v1.0.160 + Downloaded tower-http v0.3.5 + Downloaded serde_json v1.0.96 + Downloaded syn v1.0.109 + Downloaded futures-channel v0.3.28 + Downloaded tracing-core v0.1.30 + Downloaded itoa v1.0.6 + Downloaded cfg-if v1.0.0 + Downloaded http-range-header v0.3.0 + Downloaded libc v0.2.142 + Downloaded tokio v1.28.0 + Downloaded 60 crates (4.1 MB) in 2.81s + Compiling proc-macro2 v1.0.56 + Compiling unicode-ident v1.0.8 + Compiling quote v1.0.26 + Compiling libc v0.2.142 + Compiling cfg-if v1.0.0 + Compiling autocfg v1.1.0 + Compiling log v0.4.17 + Compiling futures-core v0.3.28 + Compiling pin-project-lite v0.2.9 + Compiling bytes v1.4.0 + Compiling itoa v1.0.6 + Compiling futures-task v0.3.28 + Compiling parking_lot_core v0.9.7 + Compiling futures-util v0.3.28 + Compiling syn v1.0.109 + Compiling smallvec v1.10.0 + Compiling scopeguard v1.1.0 + Compiling once_cell v1.17.1 + Compiling pin-utils v0.1.0 + Compiling fnv v1.0.7 + Compiling serde v1.0.160 + Compiling tower-service v0.3.2 + Compiling futures-channel v0.3.28 + Compiling httparse v1.8.0 + Compiling tower-layer v0.3.2 + Compiling async-trait v0.1.68 + Compiling try-lock v0.2.4 + Compiling serde_json v1.0.96 + Compiling ryu v1.0.13 + Compiling memchr v2.5.0 + Compiling percent-encoding v2.2.0 + Compiling http-range-header v0.3.0 + Compiling httpdate v1.0.2 + Compiling bitflags v1.3.2 + Compiling mime v0.3.17 + Compiling sync_wrapper v0.1.2 + Compiling matchit v0.5.0 + Compiling http v0.2.9 + Compiling tracing-core v0.1.30 + Compiling form_urlencoded v1.1.0 + Compiling lock_api v0.4.9 + Compiling tokio v1.28.0 + Compiling want v0.3.0 + Compiling tracing v0.1.37 + Compiling syn v2.0.15 + Compiling http-body v0.4.5 + Compiling num_cpus v1.15.0 + Compiling socket2 v0.4.9 + Compiling signal-hook-registry v1.4.1 + Compiling mio v0.8.6 + Compiling parking_lot v0.12.1 + Compiling serde_urlencoded v0.7.1 + Compiling tokio-macros v2.1.0 + Compiling pin-project-internal v1.0.12 + Compiling axum-core v0.2.9 + Compiling pin-project v1.0.12 + Compiling tower v0.4.13 + Compiling hyper v0.14.26 + Compiling tower-http v0.3.5 + Compiling axum v0.5.17 + Compiling hello-axum v0.1.0 (/home/rs/code/github.com/zigzap/zap/wrk/axum/hello-axum) + Finished dev [unoptimized + debuginfo] target(s) in 53.19s +``` diff --git a/wrk/axum/hello-axum/Cargo.toml b/wrk/axum/hello-axum/Cargo.toml new file mode 100644 index 0000000..26b3b91 --- /dev/null +++ b/wrk/axum/hello-axum/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "hello-axum" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +axum = "0.5" +tokio = { version = "1", features = ["full"] } diff --git a/wrk/axum/hello-axum/src/main.rs b/wrk/axum/hello-axum/src/main.rs new file mode 100644 index 0000000..7ab437a --- /dev/null +++ b/wrk/axum/hello-axum/src/main.rs @@ -0,0 +1,29 @@ +use axum::{routing::get, Router}; +use std::net::SocketAddr; + +#[tokio::main] +async fn main() { + // Route all requests on "/" endpoint to anonymous handler. + // + // A handler is an async function which returns something that implements + // `axum::response::IntoResponse`. + + // A closure or a function can be used as handler. + + let app = Router::new().route("/", get(handler)); + // Router::new().route("/", get(|| async { "Hello, world!" })); + + // Address that server will bind to. + let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); + + // Use `hyper::server::Server` which is re-exported through `axum::Server` to serve the app. + axum::Server::bind(&addr) + // Hyper server takes a make service. + .serve(app.into_make_service()) + .await + .unwrap(); +} + +async fn handler() -> &'static str { + "Hello from axum!!" +} diff --git a/wrk/measure.sh b/wrk/measure.sh index befa39d..948b228 100755 --- a/wrk/measure.sh +++ b/wrk/measure.sh @@ -31,6 +31,12 @@ if [ "$SUBJECT" = "python" ] ; then URL=http://127.0.0.1:8080 fi +if [ "$SUBJECT" = "sanic" ] ; then + python wrk/sanic/sanic-app.py & + PID=$! + URL=http://127.0.0.1:8000 +fi + if [ "$SUBJECT" = "rust" ] ; then cd wrk/rust/hello && cargo build --release ./target/release/hello & @@ -38,6 +44,13 @@ if [ "$SUBJECT" = "rust" ] ; then URL=http://127.0.0.1:7878 fi +if [ "$SUBJECT" = "axum" ] ; then + cd wrk/axum/hello-axum && cargo build --release + ./target/release/hello-axum & + PID=$! + URL=http://127.0.0.1:3000 +fi + sleep 1 echo "========================================================================" echo " $SUBJECT" diff --git a/wrk/sanic/sanic-app.py b/wrk/sanic/sanic-app.py new file mode 100644 index 0000000..a382282 --- /dev/null +++ b/wrk/sanic/sanic-app.py @@ -0,0 +1,12 @@ +from sanic import Sanic +from sanic.response import html + +app = Sanic("sanic-app") + + +@app.route('/') +async def test(request): + return html("Hello from sanic!", 200) + +if __name__ == '__main__': + app.run() diff --git a/wrk_charts_summary.png b/wrk_charts_summary.png index 1320950..b8f66a8 100644 Binary files a/wrk_charts_summary.png and b/wrk_charts_summary.png differ diff --git a/wrk_requests.png b/wrk_requests.png index bdafc37..4f4a3bb 100644 Binary files a/wrk_requests.png and b/wrk_requests.png differ diff --git a/wrk_table_summary.png b/wrk_table_summary.png index ba80cdb..8080ec3 100644 Binary files a/wrk_table_summary.png and b/wrk_table_summary.png differ diff --git a/wrk_tables.png b/wrk_tables.png index ea520b0..1aaef90 100644 Binary files a/wrk_tables.png and b/wrk_tables.png differ diff --git a/wrk_transfer.png b/wrk_transfer.png index 607fedc..623f3c7 100644 Binary files a/wrk_transfer.png and b/wrk_transfer.png differ