Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 22 commits into from
Jun 8, 2024
Merged

Conversation

uatuko
Copy link
Owner

@uatuko uatuko commented Feb 3, 2024

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 5ccfb10

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 uatuko mentioned this pull request Feb 3, 2024
Closed
@uatuko uatuko marked this pull request as ready for review February 3, 2024 22:53
@uatuko uatuko mentioned this pull request Feb 12, 2024
Closed
@uatuko uatuko merged commit e778b1d into main Jun 8, 2024
9 checks passed
@uatuko uatuko deleted the feature/asio branch June 8, 2024 19:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Asio
1 participant