Skip to content

Commit cd20746

Browse files
andreas-abelcopybara-github
authored andcommitted
Reduce RPC benchmark variance
PiperOrigin-RevId: 733360063 Change-Id: I774a5b42d8979ce1b3b984625f9aace52d801dfd
1 parent 76d9caa commit cd20746

File tree

4 files changed

+11
-8
lines changed

4 files changed

+11
-8
lines changed

fleetbench/rpc/BUILD

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ cc_library(
9191
":fleetbenchservice_grpc",
9292
":generator_process",
9393
":rpc_counters",
94+
"//fleetbench/common",
9495
"//fleetbench/rpc/protos:combo",
9596
"//fleetbench/rpc/protos:response_Message_cc_proto",
9697
"@com_github_grpc_grpc//:grpc++",
9798
"@com_github_grpc_grpc//:grpc_security_base",
98-
"@com_google_absl//absl/hash",
9999
"@com_google_absl//absl/log:check",
100100
"@com_google_absl//absl/strings",
101101
"@com_google_absl//absl/strings:string_view",
@@ -191,6 +191,7 @@ cc_library(
191191
":rpcperf",
192192
"//fleetbench:benchmark_main",
193193
"//fleetbench:dynamic_registrar",
194+
"//fleetbench/common",
194195
"//fleetbench/rpc/protos:combo",
195196
"@com_google_absl//absl/log:check",
196197
"@com_google_absl//absl/strings",

fleetbench/rpc/grpc_server.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
#include <memory>
2020
#include <utility>
2121

22-
#include "absl/hash/hash.h"
2322
#include "absl/log/check.h"
2423
#include "absl/strings/str_cat.h"
2524
#include "absl/strings/string_view.h"
2625
#include "absl/time/clock.h"
2726
#include "absl/time/time.h"
27+
#include "fleetbench/common/common.h"
2828
#include "fleetbench/rpc/fleetbenchservice.grpc.pb.h"
2929
#include "fleetbench/rpc/generator_process.h"
3030
#include "fleetbench/rpc/protos/combo.h"
@@ -49,7 +49,7 @@ class PerfCallback final
4949
::grpc::CallbackServerContext* context,
5050
const fleetbench::rpc::RequestMessage* request,
5151
fleetbench::rpc::ResponseMessage* response) override {
52-
*response = server_->Buffer(this);
52+
*response = server_->Buffer();
5353

5454
// Wait before the response if configured.
5555
server_->Delay();
@@ -102,10 +102,8 @@ void GRPCServer::Start(absl::string_view filepath,
102102
StartCallback(builder);
103103
}
104104

105-
const fleetbench::rpc::ResponseMessage& GRPCServer::Buffer(
106-
const void* ctx) const {
107-
return message_buffers_[absl::Hash<const void*>()(ctx) %
108-
message_buffers_.size()];
105+
const fleetbench::rpc::ResponseMessage& GRPCServer::Buffer() const {
106+
return message_buffers_[GetRNG()() % message_buffers_.size()];
109107
}
110108

111109
void GRPCServer::Delay() {

fleetbench/rpc/grpc_server.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class GRPCServer {
5757
void Start(absl::string_view filepath, grpc::ServerBuilder* builder);
5858

5959
// Return a random ResponseMessage response proto
60-
const fleetbench::rpc::ResponseMessage& Buffer(const void* ctx) const;
60+
const fleetbench::rpc::ResponseMessage& Buffer() const;
6161

6262
// Delay based on `delay_dist`
6363
void Delay();

fleetbench/rpc/rpcperf_benchmark.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "absl/strings/string_view.h"
2222
#include "absl/synchronization/mutex.h"
2323
#include "benchmark/benchmark.h"
24+
#include "fleetbench/common/common.h"
2425
#include "fleetbench/dynamic_registrar.h"
2526
#include "fleetbench/rpc/grpc_client.h"
2627
#include "fleetbench/rpc/grpc_server.h"
@@ -30,6 +31,9 @@
3031
namespace fleetbench::rpc {
3132

3233
void BM_Rpc(benchmark::State &state, absl::string_view program) {
34+
// Make each benchmark repetition reproducible, if using a fixed seed.
35+
Random::instance().Reset();
36+
3337
CHECK(fleetbench::rpc::kPrograms->count(program))
3438
<< "Invalid program name \"" << program << "\" provided to benchmark";
3539

0 commit comments

Comments
 (0)