Skip to content

Commit

Permalink
Wait a configurable amount of time for benchmark channels to become r…
Browse files Browse the repository at this point in the history
…eady
  • Loading branch information
apolcyn committed Jul 26, 2018
1 parent ae8d3ef commit a2160f5
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 3 deletions.
24 changes: 21 additions & 3 deletions test/cpp/qps/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#ifndef TEST_QPS_CLIENT_H
#define TEST_QPS_CLIENT_H

#include <stdlib.h>

#include <condition_variable>
#include <mutex>
#include <unordered_map>
Expand All @@ -34,6 +36,7 @@
#include "src/proto/grpc/testing/benchmark_service.grpc.pb.h"
#include "src/proto/grpc/testing/payloads.pb.h"

#include "src/core/lib/gpr/env.h"
#include "src/cpp/util/core_stats.h"
#include "test/cpp/qps/histogram.h"
#include "test/cpp/qps/interarrival.h"
Expand Down Expand Up @@ -441,9 +444,24 @@ class ClientImpl : public Client {
std::unique_ptr<std::thread> WaitForReady() {
return std::unique_ptr<std::thread>(new std::thread([this]() {
if (!is_inproc_) {
GPR_ASSERT(channel_->WaitForConnected(
gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
gpr_time_from_seconds(10, GPR_TIMESPAN))));
int connect_deadline = 10;
/* Allow optionally overriding connect_deadline in order
* to deal with benchmark environments in which the server
* can take a long time to become ready. */
char* channel_connect_timeout_str =
gpr_getenv("QPS_WORKER_CHANNEL_CONNECT_TIMEOUT");
if (channel_connect_timeout_str != nullptr &&
strcmp(channel_connect_timeout_str, "") != 0) {
connect_deadline = atoi(channel_connect_timeout_str);
}
gpr_log(GPR_INFO,
"Waiting for up to %d seconds for the channel %p to connect",
connect_deadline, channel_.get());
gpr_free(channel_connect_timeout_str);
GPR_ASSERT(channel_->WaitForConnected(gpr_time_add(
gpr_now(GPR_CLOCK_REALTIME),
gpr_time_from_seconds(connect_deadline, GPR_TIMESPAN))));
gpr_log(GPR_INFO, "Channel %p connected!", channel_.get());
}
}));
}
Expand Down
28 changes: 28 additions & 0 deletions tools/run_tests/performance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,31 @@ Example memory profile of grpc-go server, with `go tools pprof`:
```
$ go tool pprof --text --alloc_space http://localhost:<pprof_port>/debug/heap
```

### Configuration environment variables:

* QPS_WORKER_CHANNEL_CONNECT_TIMEOUT

Consuming process: qps_worker

Type: integer (number of seconds)

This can be used to configure the amount of time that benchmark
clients wait for channels to the benchmark server to become ready.
This is useful in certain benchmark environments in which the
server can take a long time to become ready. Note: if setting
this to a high value, then the scenario config under test should
probably also have a large "warmup_seconds".

* QPS_WORKERS

Consuming process: qps_json_driver

Type: comma separated list of host:port

Set this to a comma separated list of QPS worker processes/machines.
Each scenario in a scenario config has specifies a certain number
of servers, `num_servers`, and the driver will start
"benchmark servers"'s on the first `num_server` `host:port` pairs in
the comma separated list. The rest will be told to run as clients
against the benchmark server.

0 comments on commit a2160f5

Please sign in to comment.