iostats_context.cc 2.7 KB

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