diff options
author | Yuxuan Li <yuxuanli@google.com> | 2016-10-06 11:01:50 -0700 |
---|---|---|
committer | Yuxuan Li <yuxuanli@google.com> | 2016-10-06 15:06:01 -0700 |
commit | 49aeb5938918070e574a1eb0cf6fce1ca94e2b3a (patch) | |
tree | 094071ad0ba1aaa0b1393d14d9e8336517a55e57 /test/cpp/qps | |
parent | d31c78c6f05bc1e6e6ce307b43bd47993c8aead0 (diff) |
clang-formated and latency_vs_load.cc is deleted as its functionality
has been merged into qps_json_driver.
Diffstat (limited to 'test/cpp/qps')
-rw-r--r-- | test/cpp/qps/driver.cc | 9 | ||||
-rw-r--r-- | test/cpp/qps/latency_vs_load.cc | 189 | ||||
-rw-r--r-- | test/cpp/qps/qps_json_driver.cc | 83 | ||||
-rw-r--r-- | test/cpp/qps/report.h | 3 | ||||
-rw-r--r-- | test/cpp/qps/usage_timer.cc | 30 |
5 files changed, 67 insertions, 247 deletions
diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc index bb90dd6c79..5a523c55ab 100644 --- a/test/cpp/qps/driver.cc +++ b/test/cpp/qps/driver.cc @@ -149,9 +149,12 @@ static void postprocess_scenario_result(ScenarioResult* result) { sum(result->server_stats(), ServerWallTime); auto server_user_time = 100.0 * sum(result->server_stats(), ServerUserTime) / sum(result->server_stats(), ServerWallTime); - auto server_cpu_usage = 100 - 100 * average(result->server_stats(), ServerIdleCpuTime) / - average(result->server_stats(), ServerTotalCpuTime); - gpr_log(GPR_INFO, "total cpu: %.1f, idle cpu: %.1f", average(result->server_stats(), ServerTotalCpuTime), + auto server_cpu_usage = + 100 - + 100 * average(result->server_stats(), ServerIdleCpuTime) / + average(result->server_stats(), ServerTotalCpuTime); + gpr_log(GPR_INFO, "total cpu: %.1f, idle cpu: %.1f", + average(result->server_stats(), ServerTotalCpuTime), average(result->server_stats(), ServerIdleCpuTime)); auto client_system_time = 100.0 * sum(result->client_stats(), SystemTime) / sum(result->client_stats(), WallTime); diff --git a/test/cpp/qps/latency_vs_load.cc b/test/cpp/qps/latency_vs_load.cc deleted file mode 100644 index acb108824e..0000000000 --- a/test/cpp/qps/latency_vs_load.cc +++ /dev/null @@ -1,189 +0,0 @@ -/* - * - * Copyright 2015-2016, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include <memory> -#include <set> - -#include <grpc++/impl/codegen/config_protobuf.h> - -#include <gflags/gflags.h> -#include <grpc/support/log.h> - -#include "test/cpp/qps/driver.h" -#include "test/cpp/qps/parse_json.h" -#include "test/cpp/qps/report.h" -#include "test/cpp/util/benchmark_config.h" - -DEFINE_string(scenarios_file, "", - "JSON file containing an array of Scenario objects"); -DEFINE_string(scenarios_json, "", - "JSON string containing an array of Scenario objects"); -DEFINE_bool(quit, false, "Quit the workers"); - -DEFINE_double(initial_offered_load, 1000.0, "Set up for intial offered load"); - -DEFINE_double(targeted_cpu_load, 99.0, "targeted cpu load"); - -namespace grpc { -namespace testing { - -static double GetCpuLoad(Scenario * scenario, double offered_load) { - scenario->mutable_client_config()->mutable_load_params()->mutable_poisson()-> - set_offered_load(offered_load); - auto result = - RunScenario(scenario->client_config(), scenario->num_clients(), - scenario->server_config(), scenario->num_servers(), - scenario->warmup_seconds(), scenario->benchmark_seconds(), - scenario->spawn_local_worker_count()); - - GetReporter()->ReportQPS(*result); - GetReporter()->ReportQPSPerCore(*result); - GetReporter()->ReportLatency(*result); - GetReporter()->ReportTimes(*result); - GetReporter()->ReportCpuUsage(*result); - - bool success = true; - for (int i = 0; success && i < result->client_success_size(); i++) { - success = result->client_success(i); - } - - for (int i = 0; success && i < result->server_success_size(); i++) { - success = result->server_success(i); - } - - return success ? result->summary().server_cpu_usage() : -1; -} - -static double BinarySearch(Scenario * scenario, double targeted_cpu_load, - double low_offered_load, double high_offered_load) { - int low = int(low_offered_load); - int high = int(high_offered_load); - while (low <= high - 500) { - int mid = low + (high - low) /2; - double current_cpu_load = GetCpuLoad(scenario, double(mid)); - gpr_log(GPR_INFO, "binary search: current_offered_load %d", mid); - if (targeted_cpu_load < current_cpu_load) { - high = mid -1; - } - else if (targeted_cpu_load > current_cpu_load) { - low = mid + 1; - } - else { - high = mid - 1; - } - } - - return double(low); -} - -static double SearchOfferedLoad(double initial_offered_load, double targeted_cpu_load, - Scenario * scenario) { - std::cerr << "RUNNING SCENARIO: " << scenario->name() << "\n"; - double current_offered_load = initial_offered_load; - double current_cpu_load = GetCpuLoad(scenario, current_offered_load); - if (current_cpu_load > targeted_cpu_load) { - gpr_log(GPR_ERROR, "Initial offered load too high"); - return -1; - } - - do { - current_offered_load *= 2; - current_cpu_load = GetCpuLoad(scenario, current_offered_load); - gpr_log(GPR_INFO, "do while: current_offered_load %f", current_offered_load); - } while (current_cpu_load < targeted_cpu_load); - - double targeted_offered_load = BinarySearch(scenario, targeted_cpu_load, - current_offered_load / 2, - current_offered_load); - gpr_log(GPR_INFO, "targeted_offered_load %f", targeted_offered_load); - - return targeted_offered_load; -} - -static bool CpuLoadDriver() { - grpc::string json; - - bool scfile = (FLAGS_scenarios_file != ""); - bool scjson = (FLAGS_scenarios_json != ""); - if ((!scfile && !scjson && !FLAGS_quit) || - (scfile && (scjson || FLAGS_quit)) || (scjson && FLAGS_quit)) { - gpr_log(GPR_ERROR, - "Exactly one of --scenarios_file, --scenarios_json, " - "or --quit must be set"); - abort(); - } - - if (scfile) { - // Read the json data from disk - FILE *json_file = fopen(FLAGS_scenarios_file.c_str(), "r"); - GPR_ASSERT(json_file != NULL); - fseek(json_file, 0, SEEK_END); - long len = ftell(json_file); - char *data = new char[len]; - fseek(json_file, 0, SEEK_SET); - GPR_ASSERT(len == (long)fread(data, 1, len, json_file)); - fclose(json_file); - json = grpc::string(data, data + len); - delete[] data; - } else if (scjson) { - json = FLAGS_scenarios_json.c_str(); - } else if (FLAGS_quit) { - return RunQuit(); - } - - // Parse into an array of scenarios - Scenarios scenarios; - ParseJson(json.c_str(), "grpc.testing.Scenarios", &scenarios); - - // Make sure that there is at least some valid scenario here - GPR_ASSERT(scenarios.scenarios_size() > 0); - bool success = true; - - for (int i = 0; i < scenarios.scenarios_size(); i++) { - Scenario *scenario = scenarios.mutable_scenarios(i); - SearchOfferedLoad(FLAGS_initial_offered_load, FLAGS_targeted_cpu_load, scenario); - // GetCpuLoad(scenario, FLAGS_initial_offered_load); - } - - return success; -} - -} // namespace testing -} // namespace grpc - -int main(int argc, char **argv) { - grpc::testing::InitBenchmark(&argc, &argv, true); - - bool ok = grpc::testing::CpuLoadDriver(); - - return ok ? 0 : 1; -} diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc index ac427e3a3d..0f21466d6b 100644 --- a/test/cpp/qps/qps_json_driver.cc +++ b/test/cpp/qps/qps_json_driver.cc @@ -46,11 +46,14 @@ DEFINE_string(scenarios_file, "", "JSON file containing an array of Scenario objects"); + DEFINE_string(scenarios_json, "", "JSON string containing an array of Scenario objects"); + DEFINE_bool(quit, false, "Quit the workers"); -DEFINE_bool(search, false, "Search for offered load setting that achieves targeted cpu load"); +DEFINE_bool(search, false, + "Search for offered load setting that achieves targeted cpu load"); DEFINE_double(initial_offered_load, 1000.0, "Set up for intial offered load"); @@ -90,17 +93,20 @@ static std::unique_ptr<ScenarioResult> RunAndReport(const Scenario& scenario, return result; } -static double GetCpuLoad(Scenario * scenario, double offered_load, bool* success) { - scenario->mutable_client_config()->mutable_load_params()->mutable_poisson()-> - set_offered_load(offered_load); +static double GetCpuLoad(Scenario* scenario, double offered_load, + bool* success) { + scenario->mutable_client_config() + ->mutable_load_params() + ->mutable_poisson() + ->set_offered_load(offered_load); auto result = RunAndReport(*scenario, success); return result->summary().server_cpu_usage(); } -static double BinarySearch(Scenario * scenario, double targeted_cpu_load, - double low, double high, bool* success) { +static double BinarySearch(Scenario* scenario, double targeted_cpu_load, + double low, double high, bool* success) { while (low <= high - FLAGS_precision) { - double mid = low + (high - low) /2; + double mid = low + (high - low) / 2; double current_cpu_load = GetCpuLoad(scenario, mid, success); gpr_log(GPR_INFO, "binary search: current_offered_load %.0f", mid); if (!*success) { @@ -108,12 +114,10 @@ static double BinarySearch(Scenario * scenario, double targeted_cpu_load, break; } if (targeted_cpu_load < current_cpu_load) { - high = mid -1; - } - else if (targeted_cpu_load > current_cpu_load) { + high = mid - 1; + } else if (targeted_cpu_load > current_cpu_load) { low = mid + 1; - } - else { + } else { high = mid - 1; } } @@ -121,27 +125,29 @@ static double BinarySearch(Scenario * scenario, double targeted_cpu_load, return low; } -static double SearchOfferedLoad(double initial_offered_load, double targeted_cpu_load, - Scenario * scenario, bool* success) { - std::cerr << "RUNNING SCENARIO: " << scenario->name() << "\n"; - double current_offered_load = initial_offered_load; - double current_cpu_load = GetCpuLoad(scenario, current_offered_load, success); - if (current_cpu_load > targeted_cpu_load) { - gpr_log(GPR_ERROR, "Initial offered load too high"); - return -1; - } +static double SearchOfferedLoad(double initial_offered_load, + double targeted_cpu_load, Scenario* scenario, + bool* success) { + std::cerr << "RUNNING SCENARIO: " << scenario->name() << "\n"; + double current_offered_load = initial_offered_load; + double current_cpu_load = GetCpuLoad(scenario, current_offered_load, success); + if (current_cpu_load > targeted_cpu_load) { + gpr_log(GPR_ERROR, "Initial offered load too high"); + return -1; + } - while (*success && (current_cpu_load < targeted_cpu_load)) { - current_offered_load *= 2; - current_cpu_load = GetCpuLoad(scenario, current_offered_load, success); - gpr_log(GPR_INFO, "do while: current_offered_load %f", current_offered_load); - } + while (*success && (current_cpu_load < targeted_cpu_load)) { + current_offered_load *= 2; + current_cpu_load = GetCpuLoad(scenario, current_offered_load, success); + gpr_log(GPR_INFO, "do while: current_offered_load %f", + current_offered_load); + } - double targeted_offered_load = BinarySearch(scenario, targeted_cpu_load, - current_offered_load / 2, - current_offered_load, success); + double targeted_offered_load = + BinarySearch(scenario, targeted_cpu_load, current_offered_load / 2, + current_offered_load, success); - return targeted_offered_load; + return targeted_offered_load; } static bool QpsDriver() { @@ -159,11 +165,11 @@ static bool QpsDriver() { if (scfile) { // Read the json data from disk - FILE *json_file = fopen(FLAGS_scenarios_file.c_str(), "r"); + FILE* json_file = fopen(FLAGS_scenarios_file.c_str(), "r"); GPR_ASSERT(json_file != NULL); fseek(json_file, 0, SEEK_END); long len = ftell(json_file); - char *data = new char[len]; + char* data = new char[len]; fseek(json_file, 0, SEEK_SET); GPR_ASSERT(len == (long)fread(data, 1, len, json_file)); fclose(json_file); @@ -185,12 +191,13 @@ static bool QpsDriver() { for (int i = 0; i < scenarios.scenarios_size(); i++) { if (!FLAGS_search) { - const Scenario &scenario = scenarios.scenarios(i); + const Scenario& scenario = scenarios.scenarios(i); RunAndReport(scenario, &success); - } - else { - Scenario *scenario = scenarios.mutable_scenarios(i); - double targeted_offered_load = SearchOfferedLoad(FLAGS_initial_offered_load, FLAGS_targeted_cpu_load, scenario, &success); + } else { + Scenario* scenario = scenarios.mutable_scenarios(i); + double targeted_offered_load = + SearchOfferedLoad(FLAGS_initial_offered_load, FLAGS_targeted_cpu_load, + scenario, &success); gpr_log(GPR_INFO, "targeted_offered_load %f", targeted_offered_load); } } @@ -200,7 +207,7 @@ static bool QpsDriver() { } // namespace testing } // namespace grpc -int main(int argc, char **argv) { +int main(int argc, char** argv) { grpc::testing::InitBenchmark(&argc, &argv, true); bool ok = grpc::testing::QpsDriver(); diff --git a/test/cpp/qps/report.h b/test/cpp/qps/report.h index 7327d31e2d..a6e902c296 100644 --- a/test/cpp/qps/report.h +++ b/test/cpp/qps/report.h @@ -106,7 +106,6 @@ class GprLogReporter : public Reporter { void ReportLatency(const ScenarioResult& result) GRPC_OVERRIDE; void ReportTimes(const ScenarioResult& result) GRPC_OVERRIDE; void ReportCpuUsage(const ScenarioResult& result) GRPC_OVERRIDE; - }; /** Dumps the report to a JSON file. */ @@ -121,7 +120,7 @@ class JsonReporter : public Reporter { void ReportLatency(const ScenarioResult& result) GRPC_OVERRIDE; void ReportTimes(const ScenarioResult& result) GRPC_OVERRIDE; void ReportCpuUsage(const ScenarioResult& result) GRPC_OVERRIDE; - + const string report_file_; }; diff --git a/test/cpp/qps/usage_timer.cc b/test/cpp/qps/usage_timer.cc index 589b78fd14..cbe5733e24 100644 --- a/test/cpp/qps/usage_timer.cc +++ b/test/cpp/qps/usage_timer.cc @@ -34,8 +34,8 @@ #include "test/cpp/qps/usage_timer.h" #include <fstream> -#include <string> #include <sstream> +#include <string> #include <grpc/support/time.h> #include <sys/resource.h> @@ -52,20 +52,20 @@ static double time_double(struct timeval* tv) { } static void get_cpu_usage(unsigned long long* total_cpu_time, - unsigned long long* idle_cpu_time) { - std::ifstream proc_stat("/proc/stat"); - proc_stat.ignore(5); - std::string cpu_time_str; - std::string first_line; - std::getline(proc_stat, first_line); - std::stringstream first_line_s(first_line); - for(int i = 0; i < 10; ++i) { - std::getline(first_line_s, cpu_time_str, ' '); - *total_cpu_time += std::stoi(cpu_time_str); - if (i == 3) { - *idle_cpu_time = std::stoi(cpu_time_str); - } - } + unsigned long long* idle_cpu_time) { + std::ifstream proc_stat("/proc/stat"); + proc_stat.ignore(5); + std::string cpu_time_str; + std::string first_line; + std::getline(proc_stat, first_line); + std::stringstream first_line_s(first_line); + for (int i = 0; i < 10; ++i) { + std::getline(first_line_s, cpu_time_str, ' '); + *total_cpu_time += std::stoi(cpu_time_str); + if (i == 3) { + *idle_cpu_time = std::stoi(cpu_time_str); + } + } } UsageTimer::Result UsageTimer::Sample() { |