summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-08-15 13:45:37 -0700
committerSage Weil <sage@inktank.com>2013-08-15 13:45:37 -0700
commitba8f16984e848a46c6d6c3037a1ff2dcf59f472a (patch)
tree155781d5d895bfa18f6027031d69d13f3015fe57
parent5b2828dc2ac76e711d22c32957dcde9bc0b20e51 (diff)
parent2cfcb77c7e2d565d7d53915d5813b5fb1ac9f7ea (diff)
downloadceph-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.h23
-rw-r--r--src/mon/Monitor.cc13
-rw-r--r--src/mon/PGMap.cc107
-rw-r--r--src/mon/PGMap.h4
-rw-r--r--src/osd/OSDMap.cc22
-rw-r--r--src/osd/OSDMap.h3
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;
}