diff --git a/monitoring/iostats_context.cc b/monitoring/iostats_context.cc index 8aa131a70..3d102f912 100644 --- a/monitoring/iostats_context.cc +++ b/monitoring/iostats_context.cc @@ -6,7 +6,6 @@ #include #include "monitoring/iostats_context_imp.h" #include "rocksdb/env.h" -#include "util/thread_local.h" namespace rocksdb { diff --git a/monitoring/iostats_context_imp.h b/monitoring/iostats_context_imp.h index 88538297a..8af64f1fa 100644 --- a/monitoring/iostats_context_imp.h +++ b/monitoring/iostats_context_imp.h @@ -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 diff --git a/monitoring/perf_context_imp.h b/monitoring/perf_context_imp.h index 421a8cea1..159e46363 100644 --- a/monitoring/perf_context_imp.h +++ b/monitoring/perf_context_imp.h @@ -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