Directly refernce perf_context internally.

Summary:
After 7f6c02dda1, the same get_perf_context() is called both of internally and externally. However, I found internally this is not got inlined. I don't know why this is the case, but directly referencing perf_context is the logical way to do.
Closes https://github.com/facebook/rocksdb/pull/2892

Differential Revision: D5843789

Pulled By: siying

fbshipit-source-id: b49777d8809f35847699291bb7f8ea2754c3af49
main
Siying Dong 7 years ago committed by Facebook Github Bot
parent 6b3c71f6ed
commit c319792059
  1. 1
      monitoring/iostats_context.cc
  2. 26
      monitoring/iostats_context_imp.h
  3. 24
      monitoring/perf_context_imp.h

@ -6,7 +6,6 @@
#include <sstream>
#include "monitoring/iostats_context_imp.h"
#include "rocksdb/env.h"
#include "util/thread_local.h"
namespace rocksdb {

@ -8,35 +8,33 @@
#include "rocksdb/iostats_context.h"
#ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
namespace rocksdb {
extern __thread IOStatsContext iostats_context;
} // namespace rocksdb
// increment a specific counter by the specified value
#define IOSTATS_ADD(metric, value) \
(get_iostats_context()->metric += value)
#define IOSTATS_ADD(metric, value) (iostats_context.metric += value)
// Increase metric value only when it is positive
#define IOSTATS_ADD_IF_POSITIVE(metric, value) \
if (value > 0) { IOSTATS_ADD(metric, value); }
// reset a specific counter to zero
#define IOSTATS_RESET(metric) \
(get_iostats_context()->metric = 0)
#define IOSTATS_RESET(metric) (iostats_context.metric = 0)
// reset all counters to zero
#define IOSTATS_RESET_ALL() \
(get_iostats_context()->Reset())
#define IOSTATS_RESET_ALL() (iostats_context.Reset())
#define IOSTATS_SET_THREAD_POOL_ID(value) \
(get_iostats_context()->thread_pool_id = value)
#define IOSTATS_SET_THREAD_POOL_ID(value) \
(iostats_context.thread_pool_id = value)
#define IOSTATS_THREAD_POOL_ID() \
(get_iostats_context()->thread_pool_id)
#define IOSTATS_THREAD_POOL_ID() (iostats_context.thread_pool_id)
#define IOSTATS(metric) \
(get_iostats_context()->metric)
#define IOSTATS(metric) (iostats_context.metric)
// Declare and set start time of the timer
#define IOSTATS_TIMER_GUARD(metric) \
PerfStepTimer iostats_step_timer_##metric(&(get_iostats_context()->metric)); \
#define IOSTATS_TIMER_GUARD(metric) \
PerfStepTimer iostats_step_timer_##metric(&(iostats_context.metric)); \
iostats_step_timer_##metric.Start();
#else // ROCKSDB_SUPPORT_THREAD_LOCAL

@ -9,6 +9,16 @@
#include "util/stop_watch.h"
namespace rocksdb {
#if defined(NPERF_CONTEXT) || !defined(ROCKSDB_SUPPORT_THREAD_LOCAL)
extern PerfContext perf_context;
#else
#if defined(OS_SOLARIS)
extern __thread PerfContext perf_context_;
#define perf_context (*get_perf_context());
#else
extern __thread PerfContext perf_context;
#endif
#endif
#if defined(NPERF_CONTEXT)
@ -27,14 +37,14 @@ namespace rocksdb {
#define PERF_TIMER_START(metric) perf_step_timer_##metric.Start();
// Declare and set start time of the timer
#define PERF_TIMER_GUARD(metric) \
PerfStepTimer perf_step_timer_##metric(&(get_perf_context()->metric)); \
#define PERF_TIMER_GUARD(metric) \
PerfStepTimer perf_step_timer_##metric(&(perf_context.metric)); \
perf_step_timer_##metric.Start();
#define PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(metric, condition) \
PerfStepTimer perf_step_timer_##metric(&(get_perf_context()->metric), true); \
if ((condition)) { \
perf_step_timer_##metric.Start(); \
#define PERF_CONDITIONAL_TIMER_FOR_MUTEX_GUARD(metric, condition) \
PerfStepTimer perf_step_timer_##metric(&(perf_context.metric), true); \
if ((condition)) { \
perf_step_timer_##metric.Start(); \
}
// Update metric with time elapsed since last START. start time is reset
@ -44,7 +54,7 @@ namespace rocksdb {
// Increase metric value
#define PERF_COUNTER_ADD(metric, value) \
if (perf_level >= PerfLevel::kEnableCount) { \
get_perf_context()->metric += value; \
perf_context.metric += value; \
}
#endif

Loading…
Cancel
Save