write_stall_stats.cc 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. // Copyright (c) Facebook, Inc. and its affiliates. 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 "db/write_stall_stats.h"
  6. namespace ROCKSDB_NAMESPACE {
  7. const std::string& InvalidWriteStallHyphenString() {
  8. static const std::string kInvalidWriteStallHyphenString = "invalid";
  9. return kInvalidWriteStallHyphenString;
  10. }
  11. const std::string& WriteStallCauseToHyphenString(WriteStallCause cause) {
  12. static const std::string kMemtableLimit = "memtable-limit";
  13. static const std::string kL0FileCountLimit = "l0-file-count-limit";
  14. static const std::string kPendingCompactionBytes = "pending-compaction-bytes";
  15. static const std::string kWriteBufferManagerLimit =
  16. "write-buffer-manager-limit";
  17. switch (cause) {
  18. case WriteStallCause::kMemtableLimit:
  19. return kMemtableLimit;
  20. case WriteStallCause::kL0FileCountLimit:
  21. return kL0FileCountLimit;
  22. case WriteStallCause::kPendingCompactionBytes:
  23. return kPendingCompactionBytes;
  24. case WriteStallCause::kWriteBufferManagerLimit:
  25. return kWriteBufferManagerLimit;
  26. default:
  27. break;
  28. }
  29. return InvalidWriteStallHyphenString();
  30. }
  31. const std::string& WriteStallConditionToHyphenString(
  32. WriteStallCondition condition) {
  33. static const std::string kDelayed = "delays";
  34. static const std::string kStopped = "stops";
  35. switch (condition) {
  36. case WriteStallCondition::kDelayed:
  37. return kDelayed;
  38. case WriteStallCondition::kStopped:
  39. return kStopped;
  40. default:
  41. break;
  42. }
  43. return InvalidWriteStallHyphenString();
  44. }
  45. InternalStats::InternalCFStatsType InternalCFStat(
  46. WriteStallCause cause, WriteStallCondition condition) {
  47. switch (cause) {
  48. case WriteStallCause::kMemtableLimit: {
  49. switch (condition) {
  50. case WriteStallCondition::kDelayed:
  51. return InternalStats::MEMTABLE_LIMIT_DELAYS;
  52. case WriteStallCondition::kStopped:
  53. return InternalStats::MEMTABLE_LIMIT_STOPS;
  54. case WriteStallCondition::kNormal:
  55. break;
  56. }
  57. break;
  58. }
  59. case WriteStallCause::kL0FileCountLimit: {
  60. switch (condition) {
  61. case WriteStallCondition::kDelayed:
  62. return InternalStats::L0_FILE_COUNT_LIMIT_DELAYS;
  63. case WriteStallCondition::kStopped:
  64. return InternalStats::L0_FILE_COUNT_LIMIT_STOPS;
  65. case WriteStallCondition::kNormal:
  66. break;
  67. }
  68. break;
  69. }
  70. case WriteStallCause::kPendingCompactionBytes: {
  71. switch (condition) {
  72. case WriteStallCondition::kDelayed:
  73. return InternalStats::PENDING_COMPACTION_BYTES_LIMIT_DELAYS;
  74. case WriteStallCondition::kStopped:
  75. return InternalStats::PENDING_COMPACTION_BYTES_LIMIT_STOPS;
  76. case WriteStallCondition::kNormal:
  77. break;
  78. }
  79. break;
  80. }
  81. default:
  82. break;
  83. }
  84. return InternalStats::INTERNAL_CF_STATS_ENUM_MAX;
  85. }
  86. InternalStats::InternalDBStatsType InternalDBStat(
  87. WriteStallCause cause, WriteStallCondition condition) {
  88. switch (cause) {
  89. case WriteStallCause::kWriteBufferManagerLimit: {
  90. switch (condition) {
  91. case WriteStallCondition::kStopped:
  92. return InternalStats::kIntStatsWriteBufferManagerLimitStopsCounts;
  93. default:
  94. break;
  95. }
  96. break;
  97. }
  98. default:
  99. break;
  100. }
  101. return InternalStats::kIntStatsNumMax;
  102. }
  103. bool isCFScopeWriteStallCause(WriteStallCause cause) {
  104. uint32_t int_cause = static_cast<uint32_t>(cause);
  105. uint32_t lower_bound =
  106. static_cast<uint32_t>(WriteStallCause::kCFScopeWriteStallCauseEnumMax) -
  107. kNumCFScopeWriteStallCauses;
  108. uint32_t upper_bound =
  109. static_cast<uint32_t>(WriteStallCause::kCFScopeWriteStallCauseEnumMax) -
  110. 1;
  111. return lower_bound <= int_cause && int_cause <= upper_bound;
  112. }
  113. bool isDBScopeWriteStallCause(WriteStallCause cause) {
  114. uint32_t int_cause = static_cast<uint32_t>(cause);
  115. uint32_t lower_bound =
  116. static_cast<uint32_t>(WriteStallCause::kDBScopeWriteStallCauseEnumMax) -
  117. kNumDBScopeWriteStallCauses;
  118. uint32_t upper_bound =
  119. static_cast<uint32_t>(WriteStallCause::kDBScopeWriteStallCauseEnumMax) -
  120. 1;
  121. return lower_bound <= int_cause && int_cause <= upper_bound;
  122. }
  123. const std::string& WriteStallStatsMapKeys::TotalStops() {
  124. static const std::string kTotalStops = "total-stops";
  125. return kTotalStops;
  126. }
  127. const std::string& WriteStallStatsMapKeys::TotalDelays() {
  128. static const std::string kTotalDelays = "total-delays";
  129. return kTotalDelays;
  130. }
  131. const std::string&
  132. WriteStallStatsMapKeys::CFL0FileCountLimitDelaysWithOngoingCompaction() {
  133. static const std::string ret =
  134. "cf-l0-file-count-limit-delays-with-ongoing-compaction";
  135. return ret;
  136. }
  137. const std::string&
  138. WriteStallStatsMapKeys::CFL0FileCountLimitStopsWithOngoingCompaction() {
  139. static const std::string ret =
  140. "cf-l0-file-count-limit-stops-with-ongoing-compaction";
  141. return ret;
  142. }
  143. std::string WriteStallStatsMapKeys::CauseConditionCount(
  144. WriteStallCause cause, WriteStallCondition condition) {
  145. std::string cause_condition_count_name;
  146. std::string cause_name;
  147. if (isCFScopeWriteStallCause(cause) || isDBScopeWriteStallCause(cause)) {
  148. cause_name = WriteStallCauseToHyphenString(cause);
  149. } else {
  150. assert(false);
  151. return "";
  152. }
  153. const std::string& condition_name =
  154. WriteStallConditionToHyphenString(condition);
  155. cause_condition_count_name.reserve(cause_name.size() + 1 +
  156. condition_name.size());
  157. cause_condition_count_name.append(cause_name);
  158. cause_condition_count_name.append("-");
  159. cause_condition_count_name.append(condition_name);
  160. return cause_condition_count_name;
  161. }
  162. } // namespace ROCKSDB_NAMESPACE