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..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); @@ -75,8 +75,8 @@ 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(); - client->latencies.push_back(duration); + double duration = std::chrono::duration(end_time - it->second).count(); + 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_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_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); @@ -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})