diff options
author | Craig Tiller <ctiller@google.com> | 2017-02-07 08:28:51 -0800 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2017-02-07 08:28:51 -0800 |
commit | b038beb7245877b71e30e782ddd6c86d82d11d17 (patch) | |
tree | ad1ff2c2e5ac711e868f59ecda4d443e152afa47 | |
parent | b4726ff0a6760f1b0a3e5a9a3914789b6ca9deeb (diff) |
Add counters for mutex acquisitions, expose in bm_fullstack
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | build.yaml | 3 | ||||
-rw-r--r-- | src/core/lib/support/sync_posix.c | 7 | ||||
-rw-r--r-- | test/cpp/microbenchmarks/bm_fullstack.cc | 46 | ||||
-rw-r--r-- | tools/run_tests/generated/configs.json | 3 | ||||
-rw-r--r-- | tools/run_tests/generated/tests.json | 34 |
6 files changed, 92 insertions, 9 deletions
@@ -212,6 +212,14 @@ CPPFLAGS_mutrace = -O3 -fno-omit-frame-pointer LDFLAGS_mutrace = -rdynamic DEFINES_mutrace = NDEBUG +VALID_CONFIG_counters = 1 +CC_counters = $(DEFAULT_CC) +CXX_counters = $(DEFAULT_CXX) +LD_counters = $(DEFAULT_CC) +LDXX_counters = $(DEFAULT_CXX) +CPPFLAGS_counters = -O2 -DGPR_MU_COUNTERS +DEFINES_counters = NDEBUG + # General settings. diff --git a/build.yaml b/build.yaml index 456db28cef..a13ba05b99 100644 --- a/build.yaml +++ b/build.yaml @@ -3825,6 +3825,9 @@ configs: basicprof: CPPFLAGS: -O2 -DGRPC_BASIC_PROFILER -DGRPC_TIMERS_RDTSC DEFINES: NDEBUG + counters: + CPPFLAGS: -O2 -DGPR_MU_COUNTERS + DEFINES: NDEBUG dbg: CPPFLAGS: -O0 DEFINES: _DEBUG DEBUG diff --git a/src/core/lib/support/sync_posix.c b/src/core/lib/support/sync_posix.c index dcb0969a4e..de0f0484b5 100644 --- a/src/core/lib/support/sync_posix.c +++ b/src/core/lib/support/sync_posix.c @@ -42,11 +42,18 @@ #include <time.h> #include "src/core/lib/profiling/timers.h" +#ifdef GPR_MU_COUNTERS +gpr_atm grpc_mu_locks = 0; +#endif + void gpr_mu_init(gpr_mu* mu) { GPR_ASSERT(pthread_mutex_init(mu, NULL) == 0); } void gpr_mu_destroy(gpr_mu* mu) { GPR_ASSERT(pthread_mutex_destroy(mu) == 0); } void gpr_mu_lock(gpr_mu* mu) { +#ifdef GPR_MU_COUNTERS + gpr_atm_no_barrier_fetch_add(&grpc_mu_locks, 1); +#endif GPR_TIMER_BEGIN("gpr_mu_lock", 0); GPR_ASSERT(pthread_mutex_lock(mu) == 0); GPR_TIMER_END("gpr_mu_lock", 0); diff --git a/test/cpp/microbenchmarks/bm_fullstack.cc b/test/cpp/microbenchmarks/bm_fullstack.cc index c3e96c572c..c5ace53ff9 100644 --- a/test/cpp/microbenchmarks/bm_fullstack.cc +++ b/test/cpp/microbenchmarks/bm_fullstack.cc @@ -94,7 +94,37 @@ static void ApplyCommonChannelArguments(ChannelArguments* c) { c->SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, INT_MAX); } -class FullstackFixture { +#ifdef GPR_MU_COUNTERS +extern "C" gpr_atm grpc_mu_locks; +#endif + +class BaseFixture { + public: + void Finish(benchmark::State& s) { + std::ostringstream out; + this->AddToLabel(out, s); +#ifdef GPR_MU_COUNTERS + out << " locks/iteration:" + << ((double)(gpr_atm_no_barrier_load(&grpc_mu_locks) - + mu_locks_at_start_) / + (double)s.iterations()); +#endif + auto label = out.str(); + if (label.length() && label[0] == ' ') { + label = label.substr(1); + } + s.SetLabel(label); + } + + virtual void AddToLabel(std::ostream& out, benchmark::State& s) = 0; + + private: +#ifdef GPR_MU_COUNTERS + const size_t mu_locks_at_start_ = gpr_atm_no_barrier_load(&grpc_mu_locks); +#endif +}; + +class FullstackFixture : public BaseFixture { public: FullstackFixture(Service* service, const grpc::string& address) { ServerBuilder b; @@ -130,7 +160,7 @@ class TCP : public FullstackFixture { public: TCP(Service* service) : FullstackFixture(service, MakeAddress()) {} - void Finish(benchmark::State& state) {} + void AddToLabel(std::ostream& out, benchmark::State& state) {} private: static grpc::string MakeAddress() { @@ -145,7 +175,7 @@ class UDS : public FullstackFixture { public: UDS(Service* service) : FullstackFixture(service, MakeAddress()) {} - void Finish(benchmark::State& state) {} + void AddToLabel(std::ostream& out, benchmark::State& state) override {} private: static grpc::string MakeAddress() { @@ -157,7 +187,7 @@ class UDS : public FullstackFixture { } }; -class EndpointPairFixture { +class EndpointPairFixture : public BaseFixture { public: EndpointPairFixture(Service* service, grpc_endpoint_pair endpoints) { ServerBuilder b; @@ -233,7 +263,7 @@ class SockPair : public EndpointPairFixture { "test", initialize_stuff.rq(), 8192)) { } - void Finish(benchmark::State& state) {} + void AddToLabel(std::ostream& out, benchmark::State& state) {} }; class InProcessCHTTP2 : public EndpointPairFixture { @@ -241,11 +271,9 @@ class InProcessCHTTP2 : public EndpointPairFixture { InProcessCHTTP2(Service* service) : EndpointPairFixture(service, MakeEndpoints()) {} - void Finish(benchmark::State& state) { - std::ostringstream out; - out << "writes/iteration:" + void AddToLabel(std::ostream& out, benchmark::State& state) { + out << " writes/iteration:" << ((double)stats_.num_writes / (double)state.iterations()); - state.SetLabel(out.str()); } private: diff --git a/tools/run_tests/generated/configs.json b/tools/run_tests/generated/configs.json index 091f5d9823..9173bd7c19 100644 --- a/tools/run_tests/generated/configs.json +++ b/tools/run_tests/generated/configs.json @@ -66,5 +66,8 @@ }, { "config": "mutrace" + }, + { + "config": "counters" } ] diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json index 4cc543962e..34f777de16 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -39242,6 +39242,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39277,6 +39278,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39312,6 +39314,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39347,6 +39350,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39384,6 +39388,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39421,6 +39426,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39456,6 +39462,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39491,6 +39498,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39526,6 +39534,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39561,6 +39570,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39596,6 +39606,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39631,6 +39642,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39666,6 +39678,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39701,6 +39714,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39736,6 +39750,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39771,6 +39786,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39806,6 +39822,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39841,6 +39858,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39876,6 +39894,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39911,6 +39930,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39946,6 +39966,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -39983,6 +40004,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40020,6 +40042,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40055,6 +40078,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40090,6 +40114,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40125,6 +40150,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40160,6 +40186,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40195,6 +40222,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40230,6 +40258,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40265,6 +40294,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40300,6 +40330,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40335,6 +40366,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40370,6 +40402,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", @@ -40405,6 +40438,7 @@ "asan-noleaks", "asan-trace-cmp", "basicprof", + "counters", "dbg", "gcov", "helgrind", |