]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/monitoring/iostats_context_imp.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / monitoring / iostats_context_imp.h
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).
5 //
6 #pragma once
7 #include "monitoring/perf_step_timer.h"
8 #include "rocksdb/iostats_context.h"
9
10 #ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
11 namespace ROCKSDB_NAMESPACE {
12 extern __thread IOStatsContext iostats_context;
13 } // namespace ROCKSDB_NAMESPACE
14
15 // increment a specific counter by the specified value
16 #define IOSTATS_ADD(metric, value) (iostats_context.metric += value)
17
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); }
21
22 // reset a specific counter to zero
23 #define IOSTATS_RESET(metric) (iostats_context.metric = 0)
24
25 // reset all counters to zero
26 #define IOSTATS_RESET_ALL() (iostats_context.Reset())
27
28 #define IOSTATS_SET_THREAD_POOL_ID(value) \
29 (iostats_context.thread_pool_id = value)
30
31 #define IOSTATS_THREAD_POOL_ID() (iostats_context.thread_pool_id)
32
33 #define IOSTATS(metric) (iostats_context.metric)
34
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();
39
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();
46
47 #else // ROCKSDB_SUPPORT_THREAD_LOCAL
48
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
56
57 #define IOSTATS_TIMER_GUARD(metric)
58 #define IOSTATS_CPU_TIMER_GUARD(metric, env) static_cast<void>(env)
59
60 #endif // ROCKSDB_SUPPORT_THREAD_LOCAL