]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/monitoring/iostats_context.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rocksdb / monitoring / iostats_context.cc
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 #include <sstream>
7
8 #include "monitoring/iostats_context_imp.h"
9 #include "rocksdb/env.h"
10
11 namespace ROCKSDB_NAMESPACE {
12
13 #ifdef NIOSTATS_CONTEXT
14 // Should not be used because the counters are not thread-safe.
15 // Put here just to make get_iostats_context() simple without ifdef.
16 static IOStatsContext iostats_context;
17 #else
18 thread_local IOStatsContext iostats_context;
19 #endif
20
21 IOStatsContext* get_iostats_context() { return &iostats_context; }
22
23 void IOStatsContext::Reset() {
24 #ifndef NIOSTATS_CONTEXT
25 thread_pool_id = Env::Priority::TOTAL;
26 bytes_read = 0;
27 bytes_written = 0;
28 open_nanos = 0;
29 allocate_nanos = 0;
30 write_nanos = 0;
31 read_nanos = 0;
32 range_sync_nanos = 0;
33 prepare_write_nanos = 0;
34 fsync_nanos = 0;
35 logger_nanos = 0;
36 cpu_write_nanos = 0;
37 cpu_read_nanos = 0;
38 file_io_stats_by_temperature.Reset();
39 #endif //! NIOSTATS_CONTEXT
40 }
41
42 #define IOSTATS_CONTEXT_OUTPUT(counter) \
43 if (!exclude_zero_counters || counter > 0) { \
44 ss << #counter << " = " << counter << ", "; \
45 }
46
47 std::string IOStatsContext::ToString(bool exclude_zero_counters) const {
48 #ifdef NIOSTATS_CONTEXT
49 (void)exclude_zero_counters;
50 return "";
51 #else
52 std::ostringstream ss;
53 IOSTATS_CONTEXT_OUTPUT(thread_pool_id);
54 IOSTATS_CONTEXT_OUTPUT(bytes_read);
55 IOSTATS_CONTEXT_OUTPUT(bytes_written);
56 IOSTATS_CONTEXT_OUTPUT(open_nanos);
57 IOSTATS_CONTEXT_OUTPUT(allocate_nanos);
58 IOSTATS_CONTEXT_OUTPUT(write_nanos);
59 IOSTATS_CONTEXT_OUTPUT(read_nanos);
60 IOSTATS_CONTEXT_OUTPUT(range_sync_nanos);
61 IOSTATS_CONTEXT_OUTPUT(fsync_nanos);
62 IOSTATS_CONTEXT_OUTPUT(prepare_write_nanos);
63 IOSTATS_CONTEXT_OUTPUT(logger_nanos);
64 IOSTATS_CONTEXT_OUTPUT(cpu_write_nanos);
65 IOSTATS_CONTEXT_OUTPUT(cpu_read_nanos);
66 IOSTATS_CONTEXT_OUTPUT(file_io_stats_by_temperature.hot_file_bytes_read);
67 IOSTATS_CONTEXT_OUTPUT(file_io_stats_by_temperature.warm_file_bytes_read);
68 IOSTATS_CONTEXT_OUTPUT(file_io_stats_by_temperature.cold_file_bytes_read);
69 IOSTATS_CONTEXT_OUTPUT(file_io_stats_by_temperature.hot_file_read_count);
70 IOSTATS_CONTEXT_OUTPUT(file_io_stats_by_temperature.warm_file_read_count);
71 IOSTATS_CONTEXT_OUTPUT(file_io_stats_by_temperature.cold_file_read_count);
72 std::string str = ss.str();
73 str.erase(str.find_last_not_of(", ") + 1);
74 return str;
75 #endif //! NIOSTATS_CONTEXT
76 }
77
78 } // namespace ROCKSDB_NAMESPACE