From fa02a5b0d95758d4d8ee229b98577d2ed5f920d9 Mon Sep 17 00:00:00 2001 From: Na-Na Pang Date: Mon, 14 Oct 2019 12:38:45 -0700 Subject: [PATCH] Modify the calculation methods in driver and add comments in post_pocessing function --- test/cpp/qps/driver.cc | 52 ++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index c37529ea274..bd513e78a5d 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -134,36 +134,38 @@ static bool IsSuccess(const Status& s) { // Postprocess ScenarioResult and populate result summary. static void postprocess_scenario_result(ScenarioResult* result) { + // Get latencies from ScenarioResult latencies histogram and populate to + // result summary. Histogram histogram; histogram.MergeProto(result->latencies()); - - auto time_estimate = average(result->client_stats(), WallTime); - auto qps = histogram.Count() / time_estimate; - auto qps_per_server_core = qps / sum(result->server_cores(), Cores); - - result->mutable_summary()->set_qps(qps); - result->mutable_summary()->set_qps_per_server_core(qps_per_server_core); result->mutable_summary()->set_latency_50(histogram.Percentile(50)); result->mutable_summary()->set_latency_90(histogram.Percentile(90)); result->mutable_summary()->set_latency_95(histogram.Percentile(95)); result->mutable_summary()->set_latency_99(histogram.Percentile(99)); result->mutable_summary()->set_latency_999(histogram.Percentile(99.9)); - auto server_system_time = 100.0 * - sum(result->server_stats(), ServerSystemTime) / - sum(result->server_stats(), ServerWallTime); - auto server_user_time = 100.0 * sum(result->server_stats(), ServerUserTime) / - sum(result->server_stats(), ServerWallTime); - - auto client_system_time = 100.0 * sum(result->client_stats(), SystemTime) / - sum(result->client_stats(), WallTime); - auto client_user_time = 100.0 * sum(result->client_stats(), UserTime) / - sum(result->client_stats(), WallTime); - - result->mutable_summary()->set_server_system_time(server_system_time); - result->mutable_summary()->set_server_user_time(server_user_time); - result->mutable_summary()->set_client_system_time(client_system_time); - result->mutable_summary()->set_client_user_time(client_user_time); + // Calculate qps and cpu load for each client and then aggregate results for all clients + double qps = 0; + double client_system_cpu_load = 0, client_user_cpu_load = 0; + double server_system_cpu_load = 0, server_user_cpu_load = 0; + for (size_t i = 0; i < result->client_stats_size(); i++){ + auto client_stat = result->client_stats(i); + qps += client_stat.latencies().count() / client_stat.time_system(); + client_system_cpu_load += client_stat.time_system() / client_stat.time_elapsed(); + client_user_cpu_load += client_stat.time_user() / client_stat.time_elapsed(); + } + // Calculate cpu load for each server and then aggregate results for all servers + for (size_t i = 0; i < result->server_stats_size(); i++){ + auto server_stat = result->server_stats(i); + server_system_cpu_load += server_stat.time_system() / server_stat.time_elapsed(); + server_user_cpu_load += server_stat.time_user() / server_stat.time_elapsed(); + } + result->mutable_summary()->set_qps(qps); + // Populate the percentage of cpu load to result summary. + result->mutable_summary()->set_server_system_time(100 * server_system_cpu_load); + result->mutable_summary()->set_server_user_time(100 * server_user_cpu_load); + result->mutable_summary()->set_client_system_time(100* client_system_cpu_load); + result->mutable_summary()->set_client_user_time(100 * client_user_cpu_load); // For Non-linux platform, get_cpu_usage() is not implemented. Thus, // ServerTotalCpuTime and ServerIdleCpuTime are both 0. @@ -176,6 +178,9 @@ static void postprocess_scenario_result(ScenarioResult* result) { result->mutable_summary()->set_server_cpu_usage(server_cpu_usage); } + // Calculate and populate successful request per second and failed requests + // per seconds to result summary. + auto time_estimate = average(result->client_stats(), WallTime); if (result->request_results_size() > 0) { int64_t successes = 0; int64_t failures = 0; @@ -193,6 +198,9 @@ static void postprocess_scenario_result(ScenarioResult* result) { time_estimate); } + // Fill in data for other metrics required in result summary + auto qps_per_server_core = qps / sum(result->server_cores(), Cores); + result->mutable_summary()->set_qps_per_server_core(qps_per_server_core); result->mutable_summary()->set_client_polls_per_request( sum(result->client_stats(), CliPollCount) / histogram.Count()); result->mutable_summary()->set_server_polls_per_request(