From: Zhiqiang Wang Date: Fri, 17 Jul 2015 02:38:43 +0000 (+0800) Subject: mon: show cache tier IO rate in 'osd pool stats' X-Git-Tag: v9.1.0~422^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e78e03d3919810fd129298fdb6b87db76003c6d7;p=ceph.git mon: show cache tier IO rate in 'osd pool stats' The cache tier IO rate includes the flush/evict bandwidth and the promote IOPS. Signed-off-by: Zhiqiang Wang --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 84545bff4020..4ac7a111b62e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3597,6 +3597,22 @@ bool OSDMonitor::preprocess_command(MMonCommand *m) if (!f && !rss.str().empty()) tss << " client io " << rss.str() << "\n"; + // dump cache tier IO rate for cache pool + const pg_pool_t *pool = osdmap.get_pg_pool(poolid); + if (pool->is_tier()) { + if (f) { + f->close_section(); + f->open_object_section("cache_io_rate"); + } + + rss.clear(); + rss.str(""); + + pg_map.pool_cache_io_rate_summary(f.get(), &rss, poolid); + if (!f && !rss.str().empty()) + tss << " cache tier io " << rss.str() << "\n"; + } + if (f) { f->close_section(); f->close_section(); diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index ada4db92fd03..261dd71fb5ea 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -1188,6 +1188,55 @@ void PGMap::pool_client_io_rate_summary(Formatter *f, ostream *out, client_io_rate_summary(f, out, p->second.first, ts->second); } +void PGMap::cache_io_rate_summary(Formatter *f, ostream *out, + const pool_stat_t& delta_sum, + utime_t delta_stamp) const +{ + pool_stat_t pos_delta = delta_sum; + pos_delta.floor(0); + if (pos_delta.stats.sum.num_flush || + pos_delta.stats.sum.num_evict || + pos_delta.stats.sum.num_promote) { + if (pos_delta.stats.sum.num_flush) { + int64_t flush = (pos_delta.stats.sum.num_flush_kb << 10) / (double)delta_stamp; + if (f) { + f->dump_int("flush_bytes_sec", flush); + } else { + *out << pretty_si_t(flush) << "B/s flush"; + } + } + if (pos_delta.stats.sum.num_evict) { + int64_t evict = (pos_delta.stats.sum.num_evict_kb << 10) / (double)delta_stamp; + if (f) { + f->dump_int("evict_bytes_sec", evict); + } else { + *out << ", " << pretty_si_t(evict) << "B/s evict"; + } + } + if (pos_delta.stats.sum.num_promote) { + int64_t promote = pos_delta.stats.sum.num_promote / (double)delta_stamp; + if (f) { + f->dump_int("promote_op_per_sec", promote); + } else { + *out << ", " << pretty_si_t(promote) << "op/s promote"; + } + } + } +} + +void PGMap::pool_cache_io_rate_summary(Formatter *f, ostream *out, + uint64_t poolid) const +{ + ceph::unordered_map >::const_iterator p = + per_pool_sum_delta.find(poolid); + if (p == per_pool_sum_delta.end()) + return; + ceph::unordered_map::const_iterator ts = + per_pool_sum_deltas_stamps.find(p->first); + assert(ts != per_pool_sum_deltas_stamps.end()); + cache_io_rate_summary(f, out, p->second.first, ts->second); +} + /** * update aggregated delta * diff --git a/src/mon/PGMap.h b/src/mon/PGMap.h index 733b2f0ebcbd..b89e52a5c344 100644 --- a/src/mon/PGMap.h +++ b/src/mon/PGMap.h @@ -334,6 +334,20 @@ public: */ void pool_client_io_rate_summary(Formatter *f, ostream *out, uint64_t poolid) const; + /** + * Obtain a formatted/plain output for cache tier IO, source from stats for a + * given @p delta_sum pool over a given @p delta_stamp period of time. + */ + void cache_io_rate_summary(Formatter *f, ostream *out, + const pool_stat_t& delta_sum, + utime_t delta_stamp) const; + /** + * Obtain a formatted/plain output for cache tier IO over a given pool + * with id @p pool_id. We will then obtain pool-specific data + * from @p per_pool_sum_delta. + */ + void pool_cache_io_rate_summary(Formatter *f, ostream *out, + uint64_t poolid) const; void print_summary(Formatter *f, ostream *out) const; void print_oneline_summary(Formatter *f, ostream *out) const;