|
|
|
@ -79,9 +79,11 @@ static void write_csv(std::ostream* out, A0&& a0, Arg&&... arg) { |
|
|
|
|
class TrickledCHTTP2 : public EndpointPairFixture { |
|
|
|
|
public: |
|
|
|
|
TrickledCHTTP2(Service* service, bool streaming, size_t req_size, |
|
|
|
|
size_t resp_size, size_t kilobits_per_second) |
|
|
|
|
: EndpointPairFixture(service, MakeEndpoints(kilobits_per_second), |
|
|
|
|
FixtureConfiguration()) { |
|
|
|
|
size_t resp_size, size_t kilobits_per_second, |
|
|
|
|
grpc_passthru_endpoint_stats* stats) |
|
|
|
|
: EndpointPairFixture(service, MakeEndpoints(kilobits_per_second, stats), |
|
|
|
|
FixtureConfiguration()), |
|
|
|
|
stats_(stats) { |
|
|
|
|
if (FLAGS_log) { |
|
|
|
|
std::ostringstream fn; |
|
|
|
|
fn << "trickle." << (streaming ? "streaming" : "unary") << "." << req_size |
|
|
|
@ -101,9 +103,15 @@ class TrickledCHTTP2 : public EndpointPairFixture { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
virtual ~TrickledCHTTP2() { |
|
|
|
|
if (stats_ != nullptr) { |
|
|
|
|
grpc_passthru_endpoint_stats_destroy(stats_); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AddToLabel(std::ostream& out, benchmark::State& state) { |
|
|
|
|
out << " writes/iter:" |
|
|
|
|
<< ((double)stats_.num_writes / (double)state.iterations()) |
|
|
|
|
<< ((double)stats_->num_writes / (double)state.iterations()) |
|
|
|
|
<< " cli_transport_stalls/iter:" |
|
|
|
|
<< ((double) |
|
|
|
|
client_stats_.streams_stalled_due_to_transport_flow_control / |
|
|
|
@ -193,7 +201,7 @@ class TrickledCHTTP2 : public EndpointPairFixture { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
grpc_passthru_endpoint_stats stats_; |
|
|
|
|
grpc_passthru_endpoint_stats* stats_; |
|
|
|
|
struct Stats { |
|
|
|
|
int streams_stalled_due_to_stream_flow_control = 0; |
|
|
|
|
int streams_stalled_due_to_transport_flow_control = 0; |
|
|
|
@ -203,10 +211,11 @@ class TrickledCHTTP2 : public EndpointPairFixture { |
|
|
|
|
std::unique_ptr<std::ofstream> log_; |
|
|
|
|
gpr_timespec start_ = gpr_now(GPR_CLOCK_MONOTONIC); |
|
|
|
|
|
|
|
|
|
grpc_endpoint_pair MakeEndpoints(size_t kilobits) { |
|
|
|
|
static grpc_endpoint_pair MakeEndpoints(size_t kilobits, |
|
|
|
|
grpc_passthru_endpoint_stats* stats) { |
|
|
|
|
grpc_endpoint_pair p; |
|
|
|
|
grpc_passthru_endpoint_create(&p.client, &p.server, Library::get().rq(), |
|
|
|
|
&stats_); |
|
|
|
|
stats); |
|
|
|
|
double bytes_per_second = 125.0 * kilobits; |
|
|
|
|
p.client = grpc_trickle_endpoint_create(p.client, bytes_per_second); |
|
|
|
|
p.server = grpc_trickle_endpoint_create(p.server, bytes_per_second); |
|
|
|
@ -251,7 +260,8 @@ static void BM_PumpStreamServerToClient_Trickle(benchmark::State& state) { |
|
|
|
|
EchoTestService::AsyncService service; |
|
|
|
|
std::unique_ptr<TrickledCHTTP2> fixture(new TrickledCHTTP2( |
|
|
|
|
&service, true, state.range(0) /* req_size */, |
|
|
|
|
state.range(0) /* resp_size */, state.range(1) /* bw in kbit/s */)); |
|
|
|
|
state.range(0) /* resp_size */, state.range(1) /* bw in kbit/s */, |
|
|
|
|
grpc_passthru_endpoint_stats_create())); |
|
|
|
|
{ |
|
|
|
|
EchoResponse send_response; |
|
|
|
|
EchoResponse recv_response; |
|
|
|
@ -344,7 +354,8 @@ static void BM_PumpUnbalancedUnary_Trickle(benchmark::State& state) { |
|
|
|
|
EchoTestService::AsyncService service; |
|
|
|
|
std::unique_ptr<TrickledCHTTP2> fixture(new TrickledCHTTP2( |
|
|
|
|
&service, false, state.range(0) /* req_size */, |
|
|
|
|
state.range(1) /* resp_size */, state.range(2) /* bw in kbit/s */)); |
|
|
|
|
state.range(1) /* resp_size */, state.range(2) /* bw in kbit/s */, |
|
|
|
|
grpc_passthru_endpoint_stats_create())); |
|
|
|
|
EchoRequest send_request; |
|
|
|
|
EchoResponse send_response; |
|
|
|
|
EchoResponse recv_response; |
|
|
|
|