grpcxx
grpcxx copied to clipboard
Asio as an alternative to libuv for I/O and event loop
Close #22
This change allows using asio instead of libuv for I/O and event loop by setting the GRPCXX_USE_ASIO CMake option (or pre-processor macro). When using asio, multi-threading is disabled and it is left to the application layer to manage parallelism.
⚠️ Asio can't manage the same throughput as with libuv at this stage.
Benchmarks
| 1a | 1b | 2a | 2b | 3a | 3b | |
|---|---|---|---|---|---|---|
| Asio (single-threaded) | 15k | 22k | 63k | 110k | 91k | 114k |
| Asio (3 workers) | 27k | 112k | 84k | 267k | 69k | 290k |
| Asio (10 workers) | 25k | 80k | 75k | 150k | 62k | 162k |
Benchmarks were run on a MacBook Pro 2021 (M1 Max, 32GB), macOS 14.2.1 (23C71) against 5ccfb10cbe11de0c011eb40d7032bae9967d84e5
Asio (single-threaded)
diff --git a/examples/helloworld/main.cpp b/examples/helloworld/main.cpp
index debc569..0762b59 100644
--- a/examples/helloworld/main.cpp
+++ b/examples/helloworld/main.cpp
@@ -1,5 +1,7 @@
#include <cstdio>
+#include <asio/co_spawn.hpp>
+#include <asio/detached.hpp>
#include <grpcxx/server.h>
#include "helloworld/v1/greeter.grpcxx.pb.h"
@@ -39,7 +41,11 @@ int main() {
server.add(service);
std::printf("Listening on [127.0.0.1:7000] ...\n");
- server.run("127.0.0.1", 7000);
+
+ asio::io_context ctx;
+ asio::co_spawn(ctx, server.listen("127.0.0.1", 7000), asio::detached);
+
+ ctx.run();
return 0;
}
1a
starting benchmark...
spawning thread #0: 1 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 14723.67 req/s, 877.21KB/s
requests: 44171 total, 44172 started, 44171 done, 44171 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 44171 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 2.57MB (2694790) total, 86.28KB (88354) headers (space savings 94.74%), 1.31MB (1369301) data
min max mean sd +/- sd
time for request: 43us 851us 65us 14us 92.12%
time for connect: 398us 398us 398us 0us 100.00%
time to 1st byte: 754us 754us 754us 0us 100.00%
req/s : 14723.43 14723.43 14723.43 0.00 100.00%
1b
starting benchmark...
spawning thread #0: 1 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 22372.00 req/s, 1.30MB/s
requests: 67116 total, 67126 started, 67116 done, 67116 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 67116 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 3.90MB (4094591) total, 131.10KB (134244) headers (space savings 94.74%), 1.98MB (2080596) data
min max mean sd +/- sd
time for request: 65us 1.36ms 444us 237us 59.36%
time for connect: 51us 51us 51us 0us 100.00%
time to 1st byte: 177us 177us 177us 0us 100.00%
req/s : 22371.84 22371.84 22371.84 0.00 100.00%
2a
starting benchmark...
spawning thread #0: 10 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 63053.00 req/s, 3.67MB/s
requests: 189159 total, 189169 started, 189159 done, 189159 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 189163 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 11.01MB (11540673) total, 369.58KB (378446) headers (space savings 94.74%), 5.59MB (5864053) data
min max mean sd +/- sd
time for request: 44us 650us 141us 33us 66.72%
time for connect: 21us 90us 52us 28us 60.00%
time to 1st byte: 226us 431us 298us 69us 60.00%
req/s : 6291.23 6312.43 6305.14 5.86 80.00%
2b
starting benchmark...
spawning thread #0: 10 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 109637.33 req/s, 6.38MB/s
requests: 328912 total, 329012 started, 328912 done, 328912 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 328919 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 19.14MB (20066639) total, 642.54KB (657958) headers (space savings 94.74%), 9.72MB (10196365) data
min max mean sd +/- sd
time for request: 87us 2.45ms 876us 454us 59.86%
time for connect: 25us 192us 84us 70us 70.00%
time to 1st byte: 243us 483us 384us 74us 70.00%
req/s : 10962.19 10965.34 10963.53 0.95 70.00%
3a
starting benchmark...
spawning thread #0: 100 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 91189.00 req/s, 5.31MB/s
requests: 273567 total, 273667 started, 273567 done, 273567 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 273594 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 15.92MB (16693924) total, 535.54KB (548388) headers (space savings 94.73%), 8.09MB (8480608) data
min max mean sd +/- sd
time for request: 169us 2.36ms 792us 318us 82.43%
time for connect: 22us 329us 169us 86us 60.00%
time to 1st byte: 1.15ms 2.25ms 1.75ms 316us 64.00%
req/s : 906.09 917.89 911.71 2.20 67.00%
3b
starting benchmark...
spawning thread #0: 100 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 114021.33 req/s, 6.64MB/s
requests: 342064 total, 343064 started, 342064 done, 342064 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 342112 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 19.91MB (20872952) total, 669.36KB (685424) headers (space savings 94.73%), 10.11MB (10604387) data
min max mean sd +/- sd
time for request: 693us 29.04ms 8.35ms 4.86ms 64.52%
time for connect: 23us 498us 262us 140us 58.00%
time to 1st byte: 1.93ms 3.77ms 2.83ms 584us 70.00%
req/s : 1139.47 1140.75 1139.91 0.26 65.00%
Asio (3 workers)
diff --git a/examples/helloworld/main.cpp b/examples/helloworld/main.cpp
index debc569..97dbad2 100644
--- a/examples/helloworld/main.cpp
+++ b/examples/helloworld/main.cpp
@@ -1,5 +1,9 @@
#include <cstdio>
+#include <list>
+#include <thread>
+#include <asio/co_spawn.hpp>
+#include <asio/detached.hpp>
#include <grpcxx/server.h>
#include "helloworld/v1/greeter.grpcxx.pb.h"
@@ -39,7 +43,18 @@ int main() {
server.add(service);
std::printf("Listening on [127.0.0.1:7000] ...\n");
- server.run("127.0.0.1", 7000);
+
+ asio::io_context ctx;
+ asio::co_spawn(ctx, server.listen("127.0.0.1", 7000), asio::detached);
+
+ std::list<std::thread> threads;
+ for (auto i = 0; i < 3; i++) {
+ threads.emplace_back([&ctx] { ctx.run(); });
+ }
+
+ for (auto &t : threads) {
+ t.join();
+ }
return 0;
}
1a
starting benchmark...
spawning thread #0: 1 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 27201.67 req/s, 1.58MB/s
requests: 81605 total, 81606 started, 81605 done, 81605 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 81605 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 4.75MB (4978524) total, 159.40KB (163222) headers (space savings 94.74%), 2.41MB (2529755) data
min max mean sd +/- sd
time for request: 22us 401us 34us 7us 94.71%
time for connect: 371us 371us 371us 0us 100.00%
time to 1st byte: 760us 760us 760us 0us 100.00%
req/s : 27201.42 27201.42 27201.42 0.00 100.00%
1b
starting benchmark...
spawning thread #0: 1 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 112150.67 req/s, 6.53MB/s
requests: 336452 total, 336462 started, 336452 done, 336452 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 336452 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 19.58MB (20526011) total, 657.14KB (672916) headers (space savings 94.74%), 9.95MB (10430012) data
min max mean sd +/- sd
time for request: 23us 565us 83us 29us 67.00%
time for connect: 45us 45us 45us 0us 100.00%
time to 1st byte: 153us 153us 153us 0us 100.00%
req/s : 112149.85 112149.85 112149.85 0.00 100.00%
2a
starting benchmark...
spawning thread #0: 10 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 84243.67 req/s, 4.90MB/s
requests: 252731 total, 252741 started, 252731 done, 252731 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 252732 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 14.70MB (15418762) total, 493.73KB (505584) headers (space savings 94.74%), 7.47MB (7834661) data
min max mean sd +/- sd
time for request: 23us 323us 94us 24us 69.05%
time for connect: 24us 94us 59us 29us 60.00%
time to 1st byte: 246us 303us 269us 20us 60.00%
req/s : 8413.39 8438.29 8424.04 7.56 70.00%
2b
starting benchmark...
spawning thread #0: 10 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 266817.00 req/s, 15.52MB/s
requests: 800451 total, 800551 started, 800451 done, 800451 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 800459 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 46.57MB (48833752) total, 1.53MB (1601038) headers (space savings 94.74%), 23.66MB (24814043) data
min max mean sd +/- sd
time for request: 48us 1.44ms 278us 102us 81.07%
time for connect: 21us 215us 89us 83us 70.00%
time to 1st byte: 269us 469us 341us 70us 70.00%
req/s : 26654.23 26722.48 26680.65 20.65 80.00%
3a
starting benchmark...
spawning thread #0: 100 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 68601.00 req/s, 3.99MB/s
requests: 205803 total, 205903 started, 205803 done, 205803 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 205847 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 11.98MB (12560467) total, 403.22KB (412894) headers (space savings 94.72%), 6.08MB (6379893) data
min max mean sd +/- sd
time for request: 56us 1.84ms 880us 170us 74.76%
time for connect: 28us 334us 179us 87us 59.00%
time to 1st byte: 973us 2.33ms 1.67ms 395us 67.00%
req/s : 683.21 688.38 685.73 0.91 71.00%
3b
starting benchmark...
spawning thread #0: 100 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 289959.67 req/s, 16.87MB/s
requests: 869879 total, 870879 started, 869879 done, 869879 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 869953 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 50.61MB (53073333) total, 1.66MB (1741106) headers (space savings 94.73%), 25.72MB (26966249) data
min max mean sd +/- sd
time for request: 47us 10.25ms 2.33ms 473us 88.13%
time for connect: 22us 2.27ms 300us 248us 92.00%
time to 1st byte: 2.46ms 4.13ms 3.05ms 663us 69.00%
req/s : 2892.52 2903.83 2898.56 2.34 69.00%
Asio (10 workers)
diff --git a/examples/helloworld/main.cpp b/examples/helloworld/main.cpp
index debc569..e2b9f6b 100644
--- a/examples/helloworld/main.cpp
+++ b/examples/helloworld/main.cpp
@@ -1,5 +1,9 @@
#include <cstdio>
+#include <list>
+#include <thread>
+#include <asio/co_spawn.hpp>
+#include <asio/detached.hpp>
#include <grpcxx/server.h>
#include "helloworld/v1/greeter.grpcxx.pb.h"
@@ -39,7 +43,18 @@ int main() {
server.add(service);
std::printf("Listening on [127.0.0.1:7000] ...\n");
- server.run("127.0.0.1", 7000);
+
+ asio::io_context ctx;
+ asio::co_spawn(ctx, server.listen("127.0.0.1", 7000), asio::detached);
+
+ std::list<std::thread> threads;
+ for (auto i = 0; i < 10; i++) {
+ threads.emplace_back([&ctx] { ctx.run(); });
+ }
+
+ for (auto &t : threads) {
+ t.join();
+ }
return 0;
}
1a
starting benchmark...
spawning thread #0: 1 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 25376.00 req/s, 1.48MB/s
requests: 76128 total, 76129 started, 76128 done, 76128 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 76128 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 4.43MB (4644388) total, 148.70KB (152268) headers (space savings 94.74%), 2.25MB (2359968) data
min max mean sd +/- sd
time for request: 22us 560us 37us 8us 93.45%
time for connect: 390us 390us 390us 0us 100.00%
time to 1st byte: 670us 670us 670us 0us 100.00%
req/s : 25375.72 25375.72 25375.72 0.00 100.00%
1b
starting benchmark...
spawning thread #0: 1 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 80018.00 req/s, 4.66MB/s
requests: 240054 total, 240064 started, 240054 done, 240054 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 240055 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 13.97MB (14645055) total, 468.87KB (480122) headers (space savings 94.74%), 7.10MB (7441674) data
min max mean sd +/- sd
time for request: 23us 490us 120us 52us 65.57%
time for connect: 43us 43us 43us 0us 100.00%
time to 1st byte: 177us 177us 177us 0us 100.00%
req/s : 80016.85 80016.85 80016.85 0.00 100.00%
2a
starting benchmark...
spawning thread #0: 10 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 75424.67 req/s, 4.39MB/s
requests: 226274 total, 226284 started, 226274 done, 226274 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 226284 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 13.17MB (13804854) total, 442.08KB (452688) headers (space savings 94.74%), 6.69MB (7014494) data
min max mean sd +/- sd
time for request: 23us 513us 104us 29us 70.57%
time for connect: 24us 95us 59us 29us 60.00%
time to 1st byte: 191us 381us 274us 65us 50.00%
req/s : 7533.48 7554.90 7542.23 7.97 70.00%
2b
starting benchmark...
spawning thread #0: 10 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 149827.67 req/s, 8.72MB/s
requests: 449483 total, 449583 started, 449483 done, 449483 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 449490 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 26.15MB (27422250) total, 878.03KB (899100) headers (space savings 94.74%), 13.29MB (13934066) data
min max mean sd +/- sd
time for request: 43us 5.87ms 584us 268us 61.70%
time for connect: 28us 222us 67us 55us 90.00%
time to 1st byte: 255us 445us 327us 62us 60.00%
req/s : 14903.11 15045.16 14982.18 43.30 70.00%
3a
starting benchmark...
spawning thread #0: 100 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 61870.33 req/s, 3.60MB/s
requests: 185611 total, 185711 started, 185611 done, 185611 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 185623 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 10.80MB (11328563) total, 363.72KB (372446) headers (space savings 94.72%), 5.49MB (5754065) data
min max mean sd +/- sd
time for request: 57us 2.20ms 1.01ms 233us 72.64%
time for connect: 24us 939us 209us 159us 90.00%
time to 1st byte: 1.06ms 2.24ms 1.63ms 324us 70.00%
req/s : 615.42 620.89 618.44 1.22 62.00%
3b
starting benchmark...
spawning thread #0: 100 total client(s). Timing-based test with 0s of warm-up time and 3s of main duration for measurements.
Warm-up started for thread #0.
progress: 10% of clients started
progress: 20% of clients started
progress: 30% of clients started
progress: 40% of clients started
progress: 50% of clients started
progress: 60% of clients started
progress: 70% of clients started
progress: 80% of clients started
progress: 90% of clients started
progress: 100% of clients started
Warm-up phase is over for thread #0.
Main benchmark duration is started for thread #0.
Application protocol: h2c
Main benchmark duration is over for thread #0. Stopping all clients.
Stopped all clients for thread #0
finished in 3.00s, 162030.33 req/s, 9.43MB/s
requests: 486091 total, 487091 started, 486091 done, 486091 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 486161 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 28.29MB (29661101) total, 950.71KB (973522) headers (space savings 94.73%), 14.37MB (15069968) data
min max mean sd +/- sd
time for request: 67us 18.63ms 5.25ms 2.22ms 53.62%
time for connect: 32us 592us 313us 164us 59.00%
time to 1st byte: 2.41ms 4.55ms 3.10ms 684us 78.00%
req/s : 1613.75 1624.95 1619.53 2.15 70.00%