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).
8 #include "monitoring/iostats_context_imp.h"
9 #include "rocksdb/env.h"
11 namespace ROCKSDB_NAMESPACE
{
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
;
18 thread_local IOStatsContext iostats_context
;
21 IOStatsContext
* get_iostats_context() { return &iostats_context
; }
23 void IOStatsContext::Reset() {
24 #ifndef NIOSTATS_CONTEXT
25 thread_pool_id
= Env::Priority::TOTAL
;
33 prepare_write_nanos
= 0;
38 file_io_stats_by_temperature
.Reset();
39 #endif //! NIOSTATS_CONTEXT
42 #define IOSTATS_CONTEXT_OUTPUT(counter) \
43 if (!exclude_zero_counters || counter > 0) { \
44 ss << #counter << " = " << counter << ", "; \
47 std::string
IOStatsContext::ToString(bool exclude_zero_counters
) const {
48 #ifdef NIOSTATS_CONTEXT
49 (void)exclude_zero_counters
;
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);
75 #endif //! NIOSTATS_CONTEXT
78 } // namespace ROCKSDB_NAMESPACE