diff options
author | Jim King <jsking@google.com> | 2018-06-18 17:01:26 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-18 17:01:26 -0700 |
commit | 01cbab60f3602d353a73d139204fd0f5058a5c4a (patch) | |
tree | 3384420ab3dcf00513a03954159a84b8556ed87d /test/cpp/microbenchmarks | |
parent | 34e7515cc62dffab608d655a66303eb7476aa29f (diff) | |
parent | f9f0b54d381eb0aa5828c2190a7fd0cc1b949da9 (diff) |
Merge pull request #15070 from Vizerai/filter_port
Adding opencensus grpc plugin with bazel support.
Diffstat (limited to 'test/cpp/microbenchmarks')
-rw-r--r-- | test/cpp/microbenchmarks/BUILD | 12 | ||||
-rw-r--r-- | test/cpp/microbenchmarks/bm_opencensus_plugin.cc | 118 |
2 files changed, 130 insertions, 0 deletions
diff --git a/test/cpp/microbenchmarks/BUILD b/test/cpp/microbenchmarks/BUILD index d51a0e3dc5..7b27aed4c3 100644 --- a/test/cpp/microbenchmarks/BUILD +++ b/test/cpp/microbenchmarks/BUILD @@ -149,3 +149,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..9d42eb891d --- /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 <benchmark/benchmark.h> +#include <string> +#include <thread> // 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<grpc::StatusCode>( + 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<grpc::Server> server_; + std::thread server_thread_; +}; + +static void BM_E2eLatencyCensusDisabled(benchmark::State& state) { + EchoServerThread server; + std::unique_ptr<grpc::testing::EchoTestService::Stub> 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::RegisterOpenCensusViewsForExport(); + + EchoServerThread server; + std::unique_ptr<grpc::testing::EchoTestService::Stub> 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(); |