From cc650b85e0e003e06a21557df1c83bce760dd688 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 1 Dec 2008 16:31:16 -0800 Subject: [PATCH] osd: clean up pg_stat, osd_stat summation, fields a bit --- src/mon/PGMap.h | 53 ++++++++-------------------------------- src/mon/PGMonitor.cc | 19 +++++++-------- src/osd/OSD.cc | 1 - src/osd/PG.cc | 1 + src/osd/osd_types.h | 58 +++++++++++++++++++++++++++++++++----------- 5 files changed, 64 insertions(+), 68 deletions(-) diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index c830481f71910..0edf4fcf08061 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -98,36 +98,23 @@ public: // aggregate stats (soft state) hash_map num_pg_by_state; - int64_t num_pg; - int64_t total_pg_num_bytes; - int64_t total_pg_num_kb; - int64_t total_pg_num_objects; - int64_t num_osd; - int64_t total_osd_kb; - int64_t total_osd_kb_used; - int64_t total_osd_kb_avail; - int64_t total_osd_num_objects; + int64_t num_pg, num_osd; + pg_stat_t pg_sum; + osd_stat_t osd_sum; set creating_pgs; // lru: front = new additions, back = recently pinged void stat_zero() { num_pg = 0; num_pg_by_state.clear(); - total_pg_num_bytes = 0; - total_pg_num_kb = 0; - total_pg_num_objects = 0; num_osd = 0; - total_osd_kb = 0; - total_osd_kb_used = 0; - total_osd_kb_avail = 0; - total_osd_num_objects = 0; + pg_sum = pg_stat_t(); + osd_sum = osd_stat_t(); } void stat_pg_add(pg_t pgid, pg_stat_t &s) { num_pg++; num_pg_by_state[s.state]++; - total_pg_num_bytes += s.num_bytes; - total_pg_num_kb += s.num_kb; - total_pg_num_objects += s.num_objects; + pg_sum.add(s); if (s.state & PG_STATE_CREATING) creating_pgs.insert(pgid); } @@ -135,43 +122,23 @@ public: num_pg--; if (--num_pg_by_state[s.state] == 0) num_pg_by_state.erase(s.state); - total_pg_num_bytes -= s.num_bytes; - total_pg_num_kb -= s.num_kb; - total_pg_num_objects -= s.num_objects; + pg_sum.sub(s); if (s.state & PG_STATE_CREATING) creating_pgs.erase(pgid); } void stat_osd_add(osd_stat_t &s) { num_osd++; - total_osd_kb += s.kb; - total_osd_kb_used += s.kb_used; - total_osd_kb_avail += s.kb_avail; - total_osd_num_objects += s.num_objects; + osd_sum.add(s); } void stat_osd_sub(osd_stat_t &s) { num_osd--; - total_osd_kb -= s.kb; - total_osd_kb_used -= s.kb_used; - total_osd_kb_avail -= s.kb_avail; - total_osd_num_objects -= s.num_objects; + osd_sum.sub(s); } - uint64_t total_pg_kb() { return total_pg_num_kb; } - uint64_t total_kb() { return total_osd_kb; } - uint64_t total_avail_kb() { return total_osd_kb_avail; } - uint64_t total_used_kb() { return total_osd_kb_used; } - PGMap() : version(0), last_osdmap_epoch(0), last_pg_scan(0), num_pg(0), - total_pg_num_bytes(0), - total_pg_num_kb(0), - total_pg_num_objects(0), - num_osd(0), - total_osd_kb(0), - total_osd_kb_used(0), - total_osd_kb_avail(0), - total_osd_num_objects(0) {} + num_osd(0) {} void encode(bufferlist &bl) { ::encode(version, bl); diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index e30d10ec5a8d8..3149635319d77 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -78,10 +78,10 @@ ostream& operator<<(ostream& out, PGMonitor& pm) return out << "v" << pm.pg_map.version << ": " << pm.pg_map.pg_stat.size() << " pgs: " << states << "; " - << kb_t(pm.pg_map.total_pg_kb()) << " data, " - << kb_t(pm.pg_map.total_used_kb()) << " used, " - << kb_t(pm.pg_map.total_avail_kb()) << " / " - << kb_t(pm.pg_map.total_kb()) << " free"; + << kb_t(pm.pg_map.pg_sum.num_kb) << " data, " + << kb_t(pm.pg_map.osd_sum.kb_used) << " used, " + << kb_t(pm.pg_map.osd_sum.kb_avail) << " / " + << kb_t(pm.pg_map.osd_sum.kb) << " avail"; } /* @@ -240,10 +240,10 @@ void PGMonitor::handle_statfs(MStatfs *statfs) reply = new MStatfsReply(mon->monmap->fsid, statfs->tid); // these are in KB. - reply->h.st.f_total = pg_map.total_kb(); - reply->h.st.f_free = pg_map.total_avail_kb(); - reply->h.st.f_avail = pg_map.total_avail_kb(); - reply->h.st.f_objects = pg_map.total_osd_num_objects; + reply->h.st.f_total = pg_map.osd_sum.kb; + reply->h.st.f_free = pg_map.osd_sum.kb_avail; + reply->h.st.f_avail = pg_map.osd_sum.kb_avail; + reply->h.st.f_objects = pg_map.pg_sum.num_objects; // reply mon->messenger->send_message(reply, statfs->get_orig_source_inst()); @@ -610,12 +610,11 @@ bool PGMonitor::preprocess_command(MMonCommand *m) << "\t" << st.acting << std::endl; } - ss << "osdstat\tobject\tkbused\tkbavail\tkb\thb in\thb out" << std::endl; + ss << "osdstat\tkbused\tkbavail\tkb\thb in\thb out" << std::endl; for (hash_map::iterator p = pg_map.osd_stat.begin(); p != pg_map.osd_stat.end(); p++) ss << p->first - << "\t" << p->second.num_objects << "\t" << p->second.kb_used << "\t" << p->second.kb_avail << "\t" << p->second.kb diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 7b1434f01b178..636799e5533f3 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1316,7 +1316,6 @@ void OSD::send_pg_stats() m->osd_stat.kb = stbuf.f_blocks * stbuf.f_bsize / 1024; m->osd_stat.kb_used = (stbuf.f_blocks - stbuf.f_bfree) * stbuf.f_bsize / 1024; m->osd_stat.kb_avail = stbuf.f_bavail * stbuf.f_bsize / 1024; - m->osd_stat.num_objects = stbuf.f_files; for (map::iterator p = heartbeat_from.begin(); p != heartbeat_from.end(); p++) m->osd_stat.hb_in.push_back(p->first); for (map::iterator p = heartbeat_to.begin(); p != heartbeat_to.end(); p++) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 846ccb22223e0..8da5a7a258523 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1405,6 +1405,7 @@ void PG::update_stats() pg_stats_stable.reported = osd->osdmap->get_epoch(); pg_stats_stable.state = state; pg_stats_stable.acting = acting; + pg_stats_stable.num_objects_missing_on_primary = missing.num_missing(); } else { pg_stats_valid = false; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index abed428f73743..ef376803c7dc7 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -260,20 +260,17 @@ inline ostream& operator<<(ostream& out, const eversion_t e) { * aggregate stats for an osd */ struct osd_stat_t { - int64_t kb; - int64_t kb_used, kb_avail; - int64_t num_objects; - int32_t snap_trim_queue_len, num_snap_trimming; + int64_t kb, kb_used, kb_avail; vector hb_in, hb_out; + int32_t snap_trim_queue_len, num_snap_trimming; - osd_stat_t() : kb(0), kb_used(0), kb_avail(0), num_objects(0), + osd_stat_t() : kb(0), kb_used(0), kb_avail(0), snap_trim_queue_len(0), num_snap_trimming(0) {} void encode(bufferlist &bl) const { ::encode(kb, bl); ::encode(kb_used, bl); ::encode(kb_avail, bl); - ::encode(num_objects, bl); ::encode(snap_trim_queue_len, bl); ::encode(num_snap_trimming, bl); ::encode(hb_in, bl); @@ -283,12 +280,27 @@ struct osd_stat_t { ::decode(kb, bl); ::decode(kb_used, bl); ::decode(kb_avail, bl); - ::decode(num_objects, bl); ::decode(snap_trim_queue_len, bl); ::decode(num_snap_trimming, bl); ::decode(hb_in, bl); ::decode(hb_out, bl); } + + void add(const osd_stat_t& o) { + kb += o.kb; + kb_used += o.kb_used; + kb_avail += o.kb_avail; + snap_trim_queue_len += o.snap_trim_queue_len; + num_snap_trimming += o.num_snap_trimming; + } + void sub(const osd_stat_t& o) { + kb -= o.kb; + kb_used -= o.kb_used; + kb_avail -= o.kb_avail; + snap_trim_queue_len -= o.snap_trim_queue_len; + num_snap_trimming -= o.num_snap_trimming; + } + }; WRITE_CLASS_ENCODER(osd_stat_t) @@ -296,7 +308,8 @@ inline bool operator==(const osd_stat_t& l, const osd_stat_t& r) { return l.kb == r.kb && l.kb_used == r.kb_used && l.kb_avail == r.kb_avail && - l.num_objects == r.num_objects && + l.snap_trim_queue_len == r.snap_trim_queue_len && + l.num_snap_trimming == r.num_snap_trimming && l.hb_in == r.hb_in && l.hb_out == r.hb_out; } @@ -309,7 +322,6 @@ inline bool operator!=(const osd_stat_t& l, const osd_stat_t& r) { inline ostream& operator<<(ostream& out, const osd_stat_t& s) { return out << "osd_stat(" << (s.kb_used) << "/" << s.kb << " KB used, " << s.kb_avail << " avail, " - << s.num_objects << " objects, " << "peers " << s.hb_in << "/" << s.hb_out << ")"; } @@ -359,9 +371,18 @@ struct pg_stat_t { __u64 num_kb; // in KB __u64 num_objects; __u64 num_object_clones; + __u64 num_objects_missing_on_primary; + __u64 num_objects_degraded; vector acting; + pg_stat_t() : reported(0), created(0), parent_split_bits(0), + state(0), + num_bytes(0), num_kb(0), + num_objects(0), num_object_clones(0), + num_objects_missing_on_primary(0), num_objects_degraded(0) + { } + void encode(bufferlist &bl) const { ::encode(version, bl); ::encode(reported, bl); @@ -373,6 +394,8 @@ struct pg_stat_t { ::encode(num_kb, bl); ::encode(num_objects, bl); ::encode(num_object_clones, bl); + ::encode(num_objects_missing_on_primary, bl); + ::encode(num_objects_degraded, bl); ::encode(acting, bl); } void decode(bufferlist::iterator &bl) { @@ -386,6 +409,8 @@ struct pg_stat_t { ::decode(num_kb, bl); ::decode(num_objects, bl); ::decode(num_object_clones, bl); + ::decode(num_objects_missing_on_primary, bl); + ::decode(num_objects_degraded, bl); ::decode(acting, bl); } @@ -394,12 +419,17 @@ struct pg_stat_t { num_kb += o.num_kb; num_objects += o.num_objects; num_object_clones += o.num_object_clones; + num_objects_missing_on_primary += o.num_objects_missing_on_primary; + num_objects_degraded += o.num_objects_degraded; + } + void sub(const pg_stat_t& o) { + num_bytes -= o.num_bytes; + num_kb -= o.num_kb; + num_objects -= o.num_objects; + num_object_clones -= o.num_object_clones; + num_objects_missing_on_primary -= o.num_objects_missing_on_primary; + num_objects_degraded -= o.num_objects_degraded; } - - pg_stat_t() : reported(0), created(0), parent_split_bits(0), - state(0), - num_bytes(0), num_kb(0), - num_objects(0), num_object_clones(0) {} }; WRITE_CLASS_ENCODER(pg_stat_t) -- 2.39.5