1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
7 #include "monitoring/perf_step_timer.h"
8 #include "rocksdb/iostats_context.h"
10 #ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
11 namespace ROCKSDB_NAMESPACE
{
12 extern __thread IOStatsContext iostats_context
;
13 } // namespace ROCKSDB_NAMESPACE
15 // increment a specific counter by the specified value
16 #define IOSTATS_ADD(metric, value) (iostats_context.metric += value)
18 // Increase metric value only when it is positive
19 #define IOSTATS_ADD_IF_POSITIVE(metric, value) \
20 if (value > 0) { IOSTATS_ADD(metric, value); }
22 // reset a specific counter to zero
23 #define IOSTATS_RESET(metric) (iostats_context.metric = 0)
25 // reset all counters to zero
26 #define IOSTATS_RESET_ALL() (iostats_context.Reset())
28 #define IOSTATS_SET_THREAD_POOL_ID(value) \
29 (iostats_context.thread_pool_id = value)
31 #define IOSTATS_THREAD_POOL_ID() (iostats_context.thread_pool_id)
33 #define IOSTATS(metric) (iostats_context.metric)
35 // Declare and set start time of the timer
36 #define IOSTATS_TIMER_GUARD(metric) \
37 PerfStepTimer iostats_step_timer_##metric(&(iostats_context.metric)); \
38 iostats_step_timer_##metric.Start();
40 // Declare and set start time of the timer
41 #define IOSTATS_CPU_TIMER_GUARD(metric, env) \
42 PerfStepTimer iostats_step_timer_##metric( \
43 &(iostats_context.metric), env, true, \
44 PerfLevel::kEnableTimeAndCPUTimeExceptForMutex); \
45 iostats_step_timer_##metric.Start();
47 #else // ROCKSDB_SUPPORT_THREAD_LOCAL
49 #define IOSTATS_ADD(metric, value)
50 #define IOSTATS_ADD_IF_POSITIVE(metric, value)
51 #define IOSTATS_RESET(metric)
52 #define IOSTATS_RESET_ALL()
53 #define IOSTATS_SET_THREAD_POOL_ID(value)
54 #define IOSTATS_THREAD_POOL_ID()
55 #define IOSTATS(metric) 0
57 #define IOSTATS_TIMER_GUARD(metric)
58 #define IOSTATS_CPU_TIMER_GUARD(metric, env) static_cast<void>(env)
60 #endif // ROCKSDB_SUPPORT_THREAD_LOCAL