grpcxx icon indicating copy to clipboard operation
grpcxx copied to clipboard

Asio as an alternative to libuv for I/O and event loop

Open uatuko opened this issue 1 year ago • 0 comments

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%

uatuko avatar Feb 03 '24 22:02 uatuko