From 2405e873ffc86d2fa274cfcbabc57373081f31aa Mon Sep 17 00:00:00 2001 From: Takeshi Yoshino <4511440+tyoshino@users.noreply.github.com> Date: Thu, 19 Mar 2026 04:07:05 +0000 Subject: [PATCH 1/2] feat(http2): make benchmark run for at least 5 sec --- http2/benchmark.py | 1 + http2/client.cc | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/http2/benchmark.py b/http2/benchmark.py index e5a3b22..81ad659 100644 --- a/http2/benchmark.py +++ b/http2/benchmark.py @@ -63,6 +63,7 @@ def run_benchmark(remote_host=None): CLIENT_BINARY_PATH, "--stderrthreshold=0", "--benchmark_counters_tabular=true", + "--benchmark_min_time=5.0s", f"--host={client_host}", ], capture_output=False, text=True, check=True) except subprocess.CalledProcessError as e: diff --git a/http2/client.cc b/http2/client.cc index dc79406..53e6719 100644 --- a/http2/client.cc +++ b/http2/client.cc @@ -75,7 +75,7 @@ static void complete_request(struct ClientSession* client, int32_t stream_id) { auto it = client->request_start_times.find(stream_id); if (it != client->request_start_times.end()) { auto end_time = std::chrono::steady_clock::now(); - double duration = std::chrono::duration(end_time - it->second).count(); + double duration = std::chrono::duration(end_time - it->second).count(); client->latencies.push_back(duration); client->request_start_times.erase(it); } @@ -294,10 +294,10 @@ static void BM_HTTP2Client(benchmark::State& state) { if (!client.latencies.empty()) { std::sort(client.latencies.begin(), client.latencies.end()); - state.counters["p10_latency_ms"] = client.latencies[client.latencies.size() * 0.10]; - state.counters["p50_latency_ms"] = client.latencies[client.latencies.size() * 0.50]; - state.counters["p90_latency_ms"] = client.latencies[client.latencies.size() * 0.90]; - state.counters["p99_latency_ms"] = client.latencies[client.latencies.size() * 0.99]; + state.counters["p10_latency_us"] = client.latencies[client.latencies.size() * 0.10]; + state.counters["p50_latency_us"] = client.latencies[client.latencies.size() * 0.50]; + state.counters["p90_latency_us"] = client.latencies[client.latencies.size() * 0.90]; + state.counters["p99_latency_us"] = client.latencies[client.latencies.size() * 0.99]; // Calculates QPS. state.SetItemsProcessed(client.latencies.size()); @@ -310,6 +310,8 @@ static void BM_HTTP2Client(benchmark::State& state) { } BENCHMARK(BM_HTTP2Client) + ->UseRealTime() + ->Unit(benchmark::kMicrosecond) ->Args({0}) ->Args({1 << 10}) ->Args({2 << 10}) From df88a2c8bdb926d18c63fba66e2fbaf3ef156bfe Mon Sep 17 00:00:00 2001 From: Takeshi Yoshino <4511440+tyoshino@users.noreply.github.com> Date: Thu, 19 Mar 2026 04:13:01 +0000 Subject: [PATCH 2/2] fix --- http2/client.cc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/http2/client.cc b/http2/client.cc index 53e6719..0a55d6e 100644 --- a/http2/client.cc +++ b/http2/client.cc @@ -47,7 +47,7 @@ struct ClientSession { int total_requests_submitted; std::map request_start_times; std::map response_sizes; - std::vector latencies; + std::vector latencies_us; }; static void submit_request(struct ClientSession* client); @@ -76,7 +76,7 @@ static void complete_request(struct ClientSession* client, int32_t stream_id) { if (it != client->request_start_times.end()) { auto end_time = std::chrono::steady_clock::now(); double duration = std::chrono::duration(end_time - it->second).count(); - client->latencies.push_back(duration); + client->latencies_us.push_back(duration); client->request_start_times.erase(it); } @@ -291,16 +291,16 @@ static void BM_HTTP2Client(benchmark::State& state) { event_base_dispatch(base); } - if (!client.latencies.empty()) { - std::sort(client.latencies.begin(), client.latencies.end()); + if (!client.latencies_us.empty()) { + std::sort(client.latencies_us.begin(), client.latencies_us.end()); - state.counters["p10_latency_us"] = client.latencies[client.latencies.size() * 0.10]; - state.counters["p50_latency_us"] = client.latencies[client.latencies.size() * 0.50]; - state.counters["p90_latency_us"] = client.latencies[client.latencies.size() * 0.90]; - state.counters["p99_latency_us"] = client.latencies[client.latencies.size() * 0.99]; + state.counters["p10_latency_us"] = client.latencies_us[client.latencies_us.size() * 0.10]; + state.counters["p50_latency_us"] = client.latencies_us[client.latencies_us.size() * 0.50]; + state.counters["p90_latency_us"] = client.latencies_us[client.latencies_us.size() * 0.90]; + state.counters["p99_latency_us"] = client.latencies_us[client.latencies_us.size() * 0.99]; // Calculates QPS. - state.SetItemsProcessed(client.latencies.size()); + state.SetItemsProcessed(client.latencies_us.size()); } if (client.session) nghttp2_session_del(client.session);