iostats_context.cc 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 ROCKSDB_SUPPORT_THREAD_LOCAL
  10. __thread IOStatsContext iostats_context;
  11. #endif
  12. IOStatsContext* get_iostats_context() {
  13. #ifdef ROCKSDB_SUPPORT_THREAD_LOCAL
  14. return &iostats_context;
  15. #else
  16. return nullptr;
  17. #endif
  18. }
  19. void IOStatsContext::Reset() {
  20. thread_pool_id = Env::Priority::TOTAL;
  21. bytes_read = 0;
  22. bytes_written = 0;
  23. open_nanos = 0;
  24. allocate_nanos = 0;
  25. write_nanos = 0;
  26. read_nanos = 0;
  27. range_sync_nanos = 0;
  28. prepare_write_nanos = 0;
  29. fsync_nanos = 0;
  30. logger_nanos = 0;
  31. }
  32. #define IOSTATS_CONTEXT_OUTPUT(counter) \
  33. if (!exclude_zero_counters || counter > 0) { \
  34. ss << #counter << " = " << counter << ", "; \
  35. }
  36. std::string IOStatsContext::ToString(bool exclude_zero_counters) const {
  37. std::ostringstream ss;
  38. IOSTATS_CONTEXT_OUTPUT(thread_pool_id);
  39. IOSTATS_CONTEXT_OUTPUT(bytes_read);
  40. IOSTATS_CONTEXT_OUTPUT(bytes_written);
  41. IOSTATS_CONTEXT_OUTPUT(open_nanos);
  42. IOSTATS_CONTEXT_OUTPUT(allocate_nanos);
  43. IOSTATS_CONTEXT_OUTPUT(write_nanos);
  44. IOSTATS_CONTEXT_OUTPUT(read_nanos);
  45. IOSTATS_CONTEXT_OUTPUT(range_sync_nanos);
  46. IOSTATS_CONTEXT_OUTPUT(fsync_nanos);
  47. IOSTATS_CONTEXT_OUTPUT(prepare_write_nanos);
  48. IOSTATS_CONTEXT_OUTPUT(logger_nanos);
  49. std::string str = ss.str();
  50. str.erase(str.find_last_not_of(", ") + 1);
  51. return str;
  52. }
  53. } // namespace ROCKSDB_NAMESPACE