From 95393cf5304ba0a5a1eb3e3c9720c25f70ac519c Mon Sep 17 00:00:00 2001 From: Vizerai Date: Thu, 10 May 2018 13:26:23 -0700 Subject: Fixed opencensus benchmark to be compliant with grpc benchmarks. --- test/cpp/microbenchmarks/BUILD | 12 +++ test/cpp/microbenchmarks/bm_opencensus_plugin.cc | 118 +++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 test/cpp/microbenchmarks/bm_opencensus_plugin.cc (limited to 'test/cpp/microbenchmarks') diff --git a/test/cpp/microbenchmarks/BUILD b/test/cpp/microbenchmarks/BUILD index 67f7e440b0..247a2e9d5d 100644 --- a/test/cpp/microbenchmarks/BUILD +++ b/test/cpp/microbenchmarks/BUILD @@ -150,3 +150,15 @@ grpc_cc_binary( srcs = ["bm_chttp2_hpack.cc"], deps = [":helpers"], ) + +grpc_cc_binary( + name = "bm_opencensus_plugin", + testonly = 1, + srcs = ["bm_opencensus_plugin.cc"], + language = "C++", + deps = [ + ":helpers", + "//:grpc_opencensus_plugin", + "//src/proto/grpc/testing:echo_proto", + ], +) diff --git a/test/cpp/microbenchmarks/bm_opencensus_plugin.cc b/test/cpp/microbenchmarks/bm_opencensus_plugin.cc new file mode 100644 index 0000000000..e55e5c4678 --- /dev/null +++ b/test/cpp/microbenchmarks/bm_opencensus_plugin.cc @@ -0,0 +1,118 @@ +/* + * + * Copyright 2018 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include // NOLINT + +#include "absl/base/call_once.h" +#include "absl/strings/str_cat.h" +#include "include/grpc++/grpc++.h" +#include "opencensus/stats/stats.h" +#include "src/cpp/ext/filters/census/grpc_plugin.h" +#include "src/proto/grpc/testing/echo.grpc.pb.h" +#include "test/cpp/microbenchmarks/helpers.h" + +absl::once_flag once; +void RegisterOnce() { absl::call_once(once, grpc::RegisterOpenCensusPlugin); } + +class EchoServer final : public grpc::testing::EchoTestService::Service { + grpc::Status Echo(grpc::ServerContext* context, + const grpc::testing::EchoRequest* request, + grpc::testing::EchoResponse* response) override { + if (request->param().expected_error().code() == 0) { + response->set_message(request->message()); + return grpc::Status::OK; + } else { + return grpc::Status(static_cast( + request->param().expected_error().code()), + ""); + } + } +}; + +// An EchoServerThread object creates an EchoServer on a separate thread and +// shuts down the server and thread when it goes out of scope. +class EchoServerThread final { + public: + EchoServerThread() { + grpc::ServerBuilder builder; + int port; + builder.AddListeningPort("[::]:0", grpc::InsecureServerCredentials(), + &port); + builder.RegisterService(&service_); + server_ = builder.BuildAndStart(); + if (server_ == nullptr || port == 0) { + std::abort(); + } + server_address_ = absl::StrCat("[::]:", port); + server_thread_ = std::thread(&EchoServerThread::RunServerLoop, this); + } + + ~EchoServerThread() { + server_->Shutdown(); + server_thread_.join(); + } + + const std::string& address() { return server_address_; } + + private: + void RunServerLoop() { server_->Wait(); } + + std::string server_address_; + EchoServer service_; + std::unique_ptr server_; + std::thread server_thread_; +}; + +static void BM_E2eLatencyCensusDisabled(benchmark::State& state) { + EchoServerThread server; + std::unique_ptr stub = + grpc::testing::EchoTestService::NewStub(grpc::CreateChannel( + server.address(), grpc::InsecureChannelCredentials())); + + grpc::testing::EchoResponse response; + for (auto _ : state) { + grpc::testing::EchoRequest request; + grpc::ClientContext context; + grpc::Status status = stub->Echo(&context, request, &response); + } +} +BENCHMARK(BM_E2eLatencyCensusDisabled); + +static void BM_E2eLatencyCensusEnabled(benchmark::State& state) { + RegisterOnce(); + // This we can safely repeat, and doing so clears accumulated data to avoid + // initialization costs varying between runs. + grpc::RegisterGrpcViewsForExport(); + + EchoServerThread server; + std::unique_ptr stub = + grpc::testing::EchoTestService::NewStub(grpc::CreateChannel( + server.address(), grpc::InsecureChannelCredentials())); + + grpc::testing::EchoResponse response; + for (auto _ : state) { + grpc::testing::EchoRequest request; + grpc::ClientContext context; + grpc::Status status = stub->Echo(&context, request, &response); + } +} +BENCHMARK(BM_E2eLatencyCensusEnabled); + +BENCHMARK_MAIN(); -- cgit v1.2.3 From 8cd49c528d30ad1b58bb86811887b14ddb597c19 Mon Sep 17 00:00:00 2001 From: Vizerai Date: Fri, 25 May 2018 11:40:51 -0700 Subject: update --- test/cpp/microbenchmarks/bm_opencensus_plugin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/cpp/microbenchmarks') diff --git a/test/cpp/microbenchmarks/bm_opencensus_plugin.cc b/test/cpp/microbenchmarks/bm_opencensus_plugin.cc index e55e5c4678..9d42eb891d 100644 --- a/test/cpp/microbenchmarks/bm_opencensus_plugin.cc +++ b/test/cpp/microbenchmarks/bm_opencensus_plugin.cc @@ -99,7 +99,7 @@ static void BM_E2eLatencyCensusEnabled(benchmark::State& state) { RegisterOnce(); // This we can safely repeat, and doing so clears accumulated data to avoid // initialization costs varying between runs. - grpc::RegisterGrpcViewsForExport(); + grpc::RegisterOpenCensusViewsForExport(); EchoServerThread server; std::unique_ptr stub = -- cgit v1.2.3