diff options
author | Sage Weil <sage@inktank.com> | 2013-08-15 13:45:37 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-15 13:45:37 -0700 |
commit | ba8f16984e848a46c6d6c3037a1ff2dcf59f472a (patch) | |
tree | 155781d5d895bfa18f6027031d69d13f3015fe57 | |
parent | 5b2828dc2ac76e711d22c32957dcde9bc0b20e51 (diff) | |
parent | 2cfcb77c7e2d565d7d53915d5813b5fb1ac9f7ea (diff) | |
download | ceph-ba8f16984e848a46c6d6c3037a1ff2dcf59f472a.tar.gz |
Merge pull request #501 from liewegas/wip-5906
gussy up ceph -s
Reviewed-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/include/types.h | 23 | ||||
-rw-r--r-- | src/mon/Monitor.cc | 13 | ||||
-rw-r--r-- | src/mon/PGMap.cc | 107 | ||||
-rw-r--r-- | src/mon/PGMap.h | 4 | ||||
-rw-r--r-- | src/osd/OSDMap.cc | 22 | ||||
-rw-r--r-- | src/osd/OSDMap.h | 3 |
6 files changed, 136 insertions, 36 deletions
diff --git a/src/include/types.h b/src/include/types.h index bed00175dd4..7e6ddb7117e 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -407,6 +407,29 @@ inline ostream& operator<<(ostream& out, const si_t& b) return out << b.v; } +struct pretty_si_t { + uint64_t v; + pretty_si_t(uint64_t _v) : v(_v) {} +}; + +inline ostream& operator<<(ostream& out, const pretty_si_t& b) +{ + uint64_t bump_after = 100; + if (b.v > bump_after << 60) + return out << (b.v >> 60) << " E"; + if (b.v > bump_after << 50) + return out << (b.v >> 50) << " P"; + if (b.v > bump_after << 40) + return out << (b.v >> 40) << " T"; + if (b.v > bump_after << 30) + return out << (b.v >> 30) << " G"; + if (b.v > bump_after << 20) + return out << (b.v >> 20) << " M"; + if (b.v > bump_after << 10) + return out << (b.v >> 10) << " K"; + return out << b.v << " "; +} + struct kb_t { uint64_t v; kb_t(uint64_t _v) : v(_v) {} diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 47488fc4f8b..cf10f911258 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -1829,13 +1829,14 @@ void Monitor::get_status(stringstream &ss, Formatter *f) f->close_section(); f->close_section(); } else { - ss << " cluster " << monmap->get_fsid() << "\n"; - ss << " health " << health << "\n"; - ss << " monmap " << *monmap << ", election epoch " << get_epoch() + ss << " cluster " << monmap->get_fsid() << "\n"; + ss << " health " << health << "\n"; + ss << " monmap " << *monmap << ", election epoch " << get_epoch() << ", quorum " << get_quorum() << " " << get_quorum_names() << "\n"; - ss << " osdmap " << osdmon()->osdmap << "\n"; - ss << " pgmap " << pgmon()->pg_map << "\n"; - ss << " mdsmap " << mdsmon()->mdsmap << "\n"; + if (mdsmon()->mdsmap.get_epoch() > 1) + ss << " mdsmap " << mdsmon()->mdsmap << "\n"; + osdmon()->osdmap.print_summary(NULL, ss); + pgmon()->pg_map.print_summary(NULL, &ss); } } diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 9da4bbc71d9..2595de506c0 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -746,7 +746,7 @@ void PGMap::recovery_summary(Formatter *f, ostream *out) const f->dump_string("degrated_ratio", b); } else { *out << pg_sum.stats.sum.num_objects_degraded - << "/" << pg_sum.stats.sum.num_object_copies << " degraded (" << b << "%)"; + << "/" << pg_sum.stats.sum.num_object_copies << " objects degraded (" << b << "%)"; } first = false; } @@ -766,7 +766,10 @@ void PGMap::recovery_summary(Formatter *f, ostream *out) const } first = false; } +} +void PGMap::recovery_rate_summary(Formatter *f, ostream *out) const +{ // make non-negative; we can get negative values if osds send // uncommitted stats and then "go backward" or if they are just // buggy/wrong. @@ -783,13 +786,10 @@ void PGMap::recovery_summary(Formatter *f, ostream *out) const f->dump_int("recovering_bytes_per_sec", bps); f->dump_int("recovering_keys_per_sec", kps); } else { - if (!first) - *out << "; "; - *out << " recovering " - << si_t(objps) << " o/s, " - << si_t(bps) << "B/s"; + *out << pretty_si_t(bps) << "B/s"; if (pos_delta.stats.sum.num_keys_recovered) - *out << ", " << si_t(kps) << " key/s"; + *out << ", " << pretty_si_t(kps) << "keys/s"; + *out << ", " << pretty_si_t(objps) << "objects/s"; } } } @@ -837,9 +837,9 @@ void PGMap::print_summary(Formatter *f, ostream *out) const f->dump_unsigned("count", p->second); f->close_section(); } else { - if (p != num_pg_by_state.begin()) - ss << ", "; - ss << p->second << " " << pg_state_string(p->first); + ss.setf(std::ios::right); + ss << " " << std::setw(7) << p->second << " " << pg_state_string(p->first) << "\n"; + ss.unsetf(std::ios::right); } } if (f) @@ -853,16 +853,30 @@ void PGMap::print_summary(Formatter *f, ostream *out) const f->dump_unsigned("bytes_avail", osd_sum.kb_avail * 4096ull); f->dump_unsigned("bytes_total", osd_sum.kb * 4096ull); } else { - string states = ss.str(); - *out << "v" << version << ": " - << pg_stat.size() << " pgs: " - << states << "; " - << prettybyte_t(pg_sum.stats.sum.num_bytes) << " data, " + *out << " pgmap v" << version << ": " + << pg_stat.size() << " pgs, " << pg_pool_sum.size() << " pools, " + << prettybyte_t(pg_sum.stats.sum.num_bytes) << " data, " + << pretty_si_t(pg_sum.stats.sum.num_objects) << "objects\n"; + *out << " " << kb_t(osd_sum.kb_used) << " used, " << kb_t(osd_sum.kb_avail) << " / " - << kb_t(osd_sum.kb) << " avail"; + << kb_t(osd_sum.kb) << " avail\n"; } + std::stringstream ssr; + recovery_summary(f, &ssr); + if (!f && ssr.str().length()) + *out << " " << ssr.str() << "\n"; + ssr.clear(); + ssr.str(""); + + if (!f) + *out << ss.str(); // pgs by state + + recovery_rate_summary(f, &ssr); + if (!f && ssr.str().length()) + *out << "recovery io " << ssr.str() << "\n"; + // make non-negative; we can get negative values if osds send // uncommitted stats and then "go backward" or if they are just // buggy/wrong. @@ -871,13 +885,13 @@ void PGMap::print_summary(Formatter *f, ostream *out) const if (pos_delta.stats.sum.num_rd || pos_delta.stats.sum.num_wr) { if (!f) - *out << "; "; + *out << " client io "; if (pos_delta.stats.sum.num_rd) { int64_t rd = (pos_delta.stats.sum.num_rd_kb << 10) / (double)stamp_delta; if (f) { f->dump_int("read_bytes_sec", rd); } else { - *out << si_t(rd) << "B/s rd, "; + *out << pretty_si_t(rd) << "B/s rd, "; } } if (pos_delta.stats.sum.num_wr) { @@ -885,21 +899,70 @@ void PGMap::print_summary(Formatter *f, ostream *out) const if (f) { f->dump_int("write_bytes_sec", wr); } else { - *out << si_t(wr) << "B/s wr, "; + *out << pretty_si_t(wr) << "B/s wr, "; } } int64_t iops = (pos_delta.stats.sum.num_rd + pos_delta.stats.sum.num_wr) / (double)stamp_delta; if (f) { f->dump_int("op_per_sec", iops); } else { - *out << si_t(iops) << "op/s"; + *out << pretty_si_t(iops) << "op/s"; + *out << "\n"; + } + } + +} + +void PGMap::print_oneline_summary(ostream *out) const +{ + std::stringstream ss; + + for (hash_map<int,int>::const_iterator p = num_pg_by_state.begin(); + p != num_pg_by_state.end(); + ++p) { + if (p != num_pg_by_state.begin()) + ss << ", "; + ss << p->second << " " << pg_state_string(p->first); + } + + string states = ss.str(); + *out << "v" << version << ": " + << pg_stat.size() << " pgs: " + << states << "; " + << prettybyte_t(pg_sum.stats.sum.num_bytes) << " data, " + << kb_t(osd_sum.kb_used) << " used, " + << kb_t(osd_sum.kb_avail) << " / " + << kb_t(osd_sum.kb) << " avail"; + + // make non-negative; we can get negative values if osds send + // uncommitted stats and then "go backward" or if they are just + // buggy/wrong. + pool_stat_t pos_delta = pg_sum_delta; + pos_delta.floor(0); + if (pos_delta.stats.sum.num_rd || + pos_delta.stats.sum.num_wr) { + *out << "; "; + if (pos_delta.stats.sum.num_rd) { + int64_t rd = (pos_delta.stats.sum.num_rd_kb << 10) / (double)stamp_delta; + *out << pretty_si_t(rd) << "B/s rd, "; + } + if (pos_delta.stats.sum.num_wr) { + int64_t wr = (pos_delta.stats.sum.num_wr_kb << 10) / (double)stamp_delta; + *out << pretty_si_t(wr) << "B/s wr, "; } + int64_t iops = (pos_delta.stats.sum.num_rd + pos_delta.stats.sum.num_wr) / (double)stamp_delta; + *out << pretty_si_t(iops) << "op/s"; } std::stringstream ssr; - recovery_summary(f, &ssr); - if (!f && ssr.str().length()) + recovery_summary(NULL, &ssr); + if (ssr.str().length()) *out << "; " << ssr.str(); + ssr.clear(); + ssr.str(""); + recovery_rate_summary(NULL, &ssr); + if (ssr.str().length()) + *out << "; " << ssr.str() " recovering"; } void PGMap::generate_test_instances(list<PGMap*>& o) diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 465531335d3..00aa01ed07b 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -172,7 +172,9 @@ public: void print_osd_perf_stats(std::ostream *ss) const; void recovery_summary(Formatter *f, ostream *out) const; + void recovery_rate_summary(Formatter *f, ostream *out) const; void print_summary(Formatter *f, ostream *out) const; + void print_oneline_summary(ostream *out) const; epoch_t calc_min_last_epoch_clean() const; @@ -182,7 +184,7 @@ WRITE_CLASS_ENCODER_FEATURES(PGMap::Incremental) WRITE_CLASS_ENCODER_FEATURES(PGMap) inline ostream& operator<<(ostream& out, const PGMap& m) { - m.print_summary(NULL, &out); + m.print_oneline_summary(&out); return out; } diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 36a43ff4b57..3b7b498eb27 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -1743,17 +1743,27 @@ void OSDMap::print_summary(Formatter *f, ostream& out) const "true" : "false"); f->close_section(); } else { - out << "e" << get_epoch() << ": " + out << " osdmap e" << get_epoch() << ": " << get_num_osds() << " osds: " << get_num_up_osds() << " up, " - << get_num_in_osds() << " in"; - if (test_flag(CEPH_OSDMAP_FULL)) - out << " full"; - else if (test_flag(CEPH_OSDMAP_NEARFULL)) - out << " nearfull"; + << get_num_in_osds() << " in\n"; + if (flags) + out << " flags " << get_flag_string() << "\n"; } } +void OSDMap::print_oneline_summary(ostream& out) const +{ + out << "e" << get_epoch() << ": " + << get_num_osds() << " osds: " + << get_num_up_osds() << " up, " + << get_num_in_osds() << " in"; + if (test_flag(CEPH_OSDMAP_FULL)) + out << " full"; + else if (test_flag(CEPH_OSDMAP_NEARFULL)) + out << " nearfull"; +} + bool OSDMap::crush_ruleset_in_use(int ruleset) const { for (map<int64_t,pg_pool_t>::const_iterator p = pools.begin(); p != pools.end(); ++p) { diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 0badd0abea3..2b0cbb8020c 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -606,6 +606,7 @@ private: public: void print(ostream& out) const; void print_summary(Formatter *f, ostream& out) const; + void print_oneline_summary(ostream& out) const; void print_tree(ostream *out, Formatter *f) const; string get_flag_string() const; @@ -621,7 +622,7 @@ WRITE_CLASS_ENCODER_FEATURES(OSDMap::Incremental) typedef std::tr1::shared_ptr<const OSDMap> OSDMapRef; inline ostream& operator<<(ostream& out, const OSDMap& m) { - m.print_summary(NULL, out); + m.print_oneline_summary(out); return out; } |