From 6ba29ba3fbfd2870ce57413f560f5470dfad2a7c Mon Sep 17 00:00:00 2001 From: David Garcia Quintas Date: Tue, 19 May 2015 18:29:35 -0700 Subject: [PATCH 1/2] Added the client and server configurations to the bench results proto. The added configurations also include the host of both parties. This is useful for reporting. --- test/cpp/qps/driver.cc | 11 +++++++++++ test/cpp/qps/driver.h | 2 ++ test/cpp/qps/qpstest.proto | 2 ++ 3 files changed, 15 insertions(+) diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 9f7d3b56a44..83f70e612d7 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -89,6 +89,11 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config, return &contexts.back(); }; + // To be added to the result, containing the final configuration used for + // client and config (incluiding host, etc.) + ClientConfig result_client_config; + ServerConfig result_server_config; + // Get client, server lists auto workers = get_hosts("QPS_WORKERS"); ClientConfig client_config = initial_client_config; @@ -127,6 +132,8 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config, sd.stub = std::move(Worker::NewStub( CreateChannel(workers[i], InsecureCredentials(), ChannelArguments()))); ServerArgs args; + result_server_config = server_config; + result_server_config.set_host(workers[i]); *args.mutable_setup() = server_config; sd.stream = std::move(sd.stub->RunServer(alloc_context())); GPR_ASSERT(sd.stream->Write(args)); @@ -156,6 +163,8 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config, cd.stub = std::move(Worker::NewStub(CreateChannel( workers[i + num_servers], InsecureCredentials(), ChannelArguments()))); ClientArgs args; + result_client_config = client_config; + result_client_config.set_host(workers[i + num_servers]); *args.mutable_setup() = client_config; cd.stream = std::move(cd.stub->RunTest(alloc_context())); GPR_ASSERT(cd.stream->Write(args)); @@ -197,6 +206,8 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config, // Finish a run ScenarioResult result; + result.client_config = result_client_config; + result.server_config = result_server_config; gpr_log(GPR_INFO, "Finishing"); for (auto server = servers.begin(); server != servers.end(); server++) { GPR_ASSERT(server->stream->Write(server_mark)); diff --git a/test/cpp/qps/driver.h b/test/cpp/qps/driver.h index eb7119a89dd..4c7d52f1ea7 100644 --- a/test/cpp/qps/driver.h +++ b/test/cpp/qps/driver.h @@ -49,6 +49,8 @@ struct ScenarioResult { Histogram latencies; std::vector client_resources; std::vector server_resources; + ClientConfig client_config; + ServerConfig server_config; }; ScenarioResult RunScenario(const grpc::testing::ClientConfig& client_config, diff --git a/test/cpp/qps/qpstest.proto b/test/cpp/qps/qpstest.proto index 1553ef5f07e..122a7df1ac9 100644 --- a/test/cpp/qps/qpstest.proto +++ b/test/cpp/qps/qpstest.proto @@ -102,6 +102,7 @@ message ClientConfig { // only for async client: optional int32 async_client_threads = 7; optional RpcType rpc_type = 8 [default=UNARY]; + optional string host = 9; } // Request current stats @@ -129,6 +130,7 @@ message ServerConfig { required ServerType server_type = 1; optional int32 threads = 2 [default=1]; optional bool enable_ssl = 3 [default=false]; + optional string host = 4; } message ServerArgs { From 08116501cbe91dbf7b6a09ded111a4395c81a738 Mon Sep 17 00:00:00 2001 From: David Garcia Quintas Date: Wed, 20 May 2015 17:27:23 -0700 Subject: [PATCH 2/2] Fix to work around the fact that Histogram isn't copyable. --- .../cpp/qps/async_streaming_ping_pong_test.cc | 4 ++-- test/cpp/qps/async_unary_ping_pong_test.cc | 4 ++-- test/cpp/qps/driver.cc | 23 ++++++++----------- test/cpp/qps/driver.h | 13 +++++------ test/cpp/qps/qps_driver.cc | 15 ++++++------ test/cpp/qps/qps_test.cc | 4 ++-- test/cpp/qps/sync_streaming_ping_pong_test.cc | 4 ++-- test/cpp/qps/sync_unary_ping_pong_test.cc | 4 ++-- 8 files changed, 33 insertions(+), 38 deletions(-) diff --git a/test/cpp/qps/async_streaming_ping_pong_test.cc b/test/cpp/qps/async_streaming_ping_pong_test.cc index a1822b7e156..d4871c0ba11 100644 --- a/test/cpp/qps/async_streaming_ping_pong_test.cc +++ b/test/cpp/qps/async_streaming_ping_pong_test.cc @@ -64,8 +64,8 @@ static void RunAsyncStreamingPingPong() { const auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2); - ReportQPS(result); - ReportLatency(result); + ReportQPS(*result); + ReportLatency(*result); } } // namespace testing diff --git a/test/cpp/qps/async_unary_ping_pong_test.cc b/test/cpp/qps/async_unary_ping_pong_test.cc index 8b037a86562..35f188c9862 100644 --- a/test/cpp/qps/async_unary_ping_pong_test.cc +++ b/test/cpp/qps/async_unary_ping_pong_test.cc @@ -64,8 +64,8 @@ static void RunAsyncUnaryPingPong() { const auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2); - ReportQPS(result); - ReportLatency(result); + ReportQPS(*result); + ReportLatency(*result); } } // namespace testing diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index 83f70e612d7..7c84cfbe10c 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -75,13 +75,10 @@ static deque get_hosts(const string& name) { } } -ScenarioResult RunScenario(const ClientConfig& initial_client_config, - size_t num_clients, - const ServerConfig& server_config, - size_t num_servers, - int warmup_seconds, - int benchmark_seconds, - int spawn_local_worker_count) { +std::unique_ptr RunScenario( + const ClientConfig& initial_client_config, size_t num_clients, + const ServerConfig& server_config, size_t num_servers, int warmup_seconds, + int benchmark_seconds, int spawn_local_worker_count) { // ClientContext allocator (all are destroyed at scope exit) list contexts; auto alloc_context = [&contexts]() { @@ -205,9 +202,9 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config, gpr_sleep_until(gpr_time_add(start, gpr_time_from_seconds(benchmark_seconds))); // Finish a run - ScenarioResult result; - result.client_config = result_client_config; - result.server_config = result_server_config; + std::unique_ptr result(new ScenarioResult); + result->client_config = result_client_config; + result->server_config = result_server_config; gpr_log(GPR_INFO, "Finishing"); for (auto server = servers.begin(); server != servers.end(); server++) { GPR_ASSERT(server->stream->Write(server_mark)); @@ -218,14 +215,14 @@ ScenarioResult RunScenario(const ClientConfig& initial_client_config, for (auto server = servers.begin(); server != servers.end(); server++) { GPR_ASSERT(server->stream->Read(&server_status)); const auto& stats = server_status.stats(); - result.server_resources.push_back(ResourceUsage{ + result->server_resources.push_back(ResourceUsage{ stats.time_elapsed(), stats.time_user(), stats.time_system()}); } for (auto client = clients.begin(); client != clients.end(); client++) { GPR_ASSERT(client->stream->Read(&client_status)); const auto& stats = client_status.stats(); - result.latencies.MergeProto(stats.latencies()); - result.client_resources.push_back(ResourceUsage{ + result->latencies.MergeProto(stats.latencies()); + result->client_resources.push_back(ResourceUsage{ stats.time_elapsed(), stats.time_user(), stats.time_system()}); } diff --git a/test/cpp/qps/driver.h b/test/cpp/qps/driver.h index 4c7d52f1ea7..5e9d4b3cb92 100644 --- a/test/cpp/qps/driver.h +++ b/test/cpp/qps/driver.h @@ -34,6 +34,8 @@ #ifndef TEST_QPS_DRIVER_H #define TEST_QPS_DRIVER_H +#include + #include "test/cpp/qps/histogram.h" #include "test/cpp/qps/qpstest.grpc.pb.h" @@ -53,13 +55,10 @@ struct ScenarioResult { ServerConfig server_config; }; -ScenarioResult RunScenario(const grpc::testing::ClientConfig& client_config, - size_t num_clients, - const grpc::testing::ServerConfig& server_config, - size_t num_servers, - int warmup_seconds, - int benchmark_seconds, - int spawn_local_worker_count); +std::unique_ptr RunScenario( + const grpc::testing::ClientConfig& client_config, size_t num_clients, + const grpc::testing::ServerConfig& server_config, size_t num_servers, + int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count); } // namespace testing } // namespace grpc diff --git a/test/cpp/qps/qps_driver.cc b/test/cpp/qps/qps_driver.cc index fc8e04201cd..f49cd38b339 100644 --- a/test/cpp/qps/qps_driver.cc +++ b/test/cpp/qps/qps_driver.cc @@ -103,14 +103,13 @@ int main(int argc, char** argv) { FLAGS_server_threads < FLAGS_client_channels * FLAGS_outstanding_rpcs_per_channel)); - auto result = RunScenario(client_config, FLAGS_num_clients, - server_config, FLAGS_num_servers, - FLAGS_warmup_seconds, FLAGS_benchmark_seconds, - FLAGS_local_workers); - - ReportQPSPerCore(result, server_config); - ReportLatency(result); - ReportTimes(result); + const auto result = RunScenario( + client_config, FLAGS_num_clients, server_config, FLAGS_num_servers, + FLAGS_warmup_seconds, FLAGS_benchmark_seconds, FLAGS_local_workers); + + ReportQPSPerCore(*result, server_config); + ReportLatency(*result); + ReportTimes(*result); return 0; } diff --git a/test/cpp/qps/qps_test.cc b/test/cpp/qps/qps_test.cc index f567e4cf061..9a81d0fc90c 100644 --- a/test/cpp/qps/qps_test.cc +++ b/test/cpp/qps/qps_test.cc @@ -64,8 +64,8 @@ static void RunQPS() { const auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2); - ReportQPSPerCore(result, server_config); - ReportLatency(result); + ReportQPSPerCore(*result, server_config); + ReportLatency(*result); } } // namespace testing diff --git a/test/cpp/qps/sync_streaming_ping_pong_test.cc b/test/cpp/qps/sync_streaming_ping_pong_test.cc index 48c7ff63e03..218306846b5 100644 --- a/test/cpp/qps/sync_streaming_ping_pong_test.cc +++ b/test/cpp/qps/sync_streaming_ping_pong_test.cc @@ -63,8 +63,8 @@ static void RunSynchronousStreamingPingPong() { const auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2); - ReportQPS(result); - ReportLatency(result); + ReportQPS(*result); + ReportLatency(*result); } } // namespace testing diff --git a/test/cpp/qps/sync_unary_ping_pong_test.cc b/test/cpp/qps/sync_unary_ping_pong_test.cc index 4c4de6377b8..137ef79f2f8 100644 --- a/test/cpp/qps/sync_unary_ping_pong_test.cc +++ b/test/cpp/qps/sync_unary_ping_pong_test.cc @@ -63,8 +63,8 @@ static void RunSynchronousUnaryPingPong() { const auto result = RunScenario(client_config, 1, server_config, 1, WARMUP, BENCHMARK, -2); - ReportQPS(result); - ReportLatency(result); + ReportQPS(*result); + ReportLatency(*result); } } // namespace testing