Merge pull request #324 from ctiller/bench

Add pprof support to qps client, server
pull/325/head
Vijay Pai 10 years ago
commit 0ea6b435f3
  1. 6
      test/cpp/qps/client.cc
  2. 26
      test/cpp/qps/server.cc

@ -44,6 +44,7 @@
#include <google/gflags.h>
#include <grpc++/client_context.h>
#include <grpc++/status.h>
#include "test/core/util/grpc_profiler.h"
#include "test/cpp/util/create_test_channel.h"
#include "test/cpp/qps/qpstest.pb.h"
@ -129,6 +130,8 @@ void RunTest(const int client_threads, const int client_channels,
grpc::Status status_beg = stub_stats->CollectServerStats(
&context_stats_begin, stats_request, &server_stats_begin);
grpc_profiler_start("qps_client.prof");
for (int i = 0; i < client_threads; i++) {
gpr_histogram *hist = gpr_histogram_create(0.01, 60e9);
GPR_ASSERT(hist != NULL);
@ -172,6 +175,9 @@ void RunTest(const int client_threads, const int client_channels,
for (auto &t : threads) {
t.join();
}
grpc_profiler_stop();
for (int i = 0; i < client_threads; i++) {
gpr_histogram *h = thread_stats[i];
gpr_log(GPR_INFO, "latency at thread %d (50/90/95/99/99.9): %f/%f/%f/%f/%f",

@ -33,6 +33,7 @@
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/signal.h>
#include <thread>
#include <google/gflags.h>
@ -43,6 +44,7 @@
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/status.h>
#include "test/core/util/grpc_profiler.h"
#include "test/cpp/qps/qpstest.pb.h"
#include <grpc/grpc.h>
@ -63,11 +65,15 @@ using grpc::testing::StatsRequest;
using grpc::testing::TestService;
using grpc::Status;
static bool got_sigint = false;
static void sigint_handler(int x) { got_sigint = 1; }
static double time_double(struct timeval* tv) {
return tv->tv_sec + 1e-6 * tv->tv_usec;
}
bool SetPayload(PayloadType type, int size, Payload* payload) {
static bool SetPayload(PayloadType type, int size, Payload* payload) {
PayloadType response_type = type;
// TODO(yangg): Support UNCOMPRESSABLE payload.
if (type != PayloadType::COMPRESSABLE) {
@ -79,7 +85,9 @@ bool SetPayload(PayloadType type, int size, Payload* payload) {
return true;
}
class TestServiceImpl : public TestService::Service {
namespace {
class TestServiceImpl final : public TestService::Service {
public:
Status CollectServerStats(ServerContext* context, const StatsRequest*,
ServerStats* response) {
@ -104,7 +112,9 @@ class TestServiceImpl : public TestService::Service {
}
};
void RunServer() {
} // namespace
static void RunServer() {
char* server_address = NULL;
gpr_join_host_port(&server_address, "::", FLAGS_port);
@ -118,10 +128,15 @@ void RunServer() {
builder.RegisterService(service.service());
std::unique_ptr<Server> server(builder.BuildAndStart());
gpr_log(GPR_INFO, "Server listening on %s\n", server_address);
while (true) {
grpc_profiler_start("qps_server.prof");
while (!got_sigint) {
std::this_thread::sleep_for(std::chrono::seconds(5));
}
grpc_profiler_stop();
gpr_free(server_address);
}
@ -129,6 +144,8 @@ int main(int argc, char** argv) {
grpc_init();
google::ParseCommandLineFlags(&argc, &argv, true);
signal(SIGINT, sigint_handler);
GPR_ASSERT(FLAGS_port != 0);
GPR_ASSERT(!FLAGS_enable_ssl);
RunServer();
@ -136,3 +153,4 @@ int main(int argc, char** argv) {
grpc_shutdown();
return 0;
}

Loading…
Cancel
Save