mon: PGMap: rework client IO rate calc and output

Create a function so we can use the same format when outputting per-pool
stats

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
This commit is contained in:
Joao Eduardo Luis 2013-10-03 01:09:16 +01:00
parent e3ba8e82ac
commit 2cd5320019
2 changed files with 78 additions and 33 deletions

View File

@ -885,6 +885,57 @@ void PGMap::pool_recovery_summary(Formatter *f, ostream *out,
recovery_summary(f, out, p->second.first);
}
void PGMap::client_io_rate_summary(Formatter *f, ostream *out,
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_rd ||
pos_delta.stats.sum.num_wr) {
if (pos_delta.stats.sum.num_rd) {
int64_t rd = (pos_delta.stats.sum.num_rd_kb << 10) / (double)delta_stamp;
if (f) {
f->dump_int("read_bytes_sec", rd);
} else {
*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)delta_stamp;
if (f) {
f->dump_int("write_bytes_sec", wr);
} else {
*out << pretty_si_t(wr) << "B/s wr, ";
}
}
int64_t iops = (pos_delta.stats.sum.num_rd + pos_delta.stats.sum.num_wr) / (double)delta_stamp;
if (f) {
f->dump_int("op_per_sec", iops);
} else {
*out << pretty_si_t(iops) << "op/s";
}
}
}
void PGMap::overall_client_io_rate_summary(Formatter *f, ostream *out) const
{
client_io_rate_summary(f, out, pg_sum_delta, stamp_delta);
}
void PGMap::pool_client_io_rate_summary(Formatter *f, ostream *out,
uint64_t poolid) const
{
hash_map<uint64_t,pair<pool_stat_t,utime_t> >::const_iterator p =
per_pool_sum_delta.find(poolid);
if (p == per_pool_sum_delta.end())
return;
hash_map<uint64_t,utime_t>::const_iterator ts =
per_pool_sum_deltas_stamps.find(p->first);
assert(ts != per_pool_sum_deltas_stamps.end());
client_io_rate_summary(f, out, p->second.first, ts->second);
}
/**
* update aggregated delta
*
@ -1054,39 +1105,13 @@ void PGMap::print_summary(Formatter *f, ostream *out) const
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.
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) {
if (!f)
*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 << 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;
if (f) {
f->dump_int("write_bytes_sec", wr);
} else {
*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 << pretty_si_t(iops) << "op/s";
*out << "\n";
}
}
ssr.clear();
ssr.str("");
overall_client_io_rate_summary(f, &ssr);
if (!f && ssr.str().length())
*out << " client io " << ssr.str() << "\n";
}

View File

@ -254,6 +254,26 @@ public:
void overall_recovery_rate_summary(Formatter *f, ostream *out) const;
void pool_recovery_rate_summary(Formatter *f, ostream *out,
uint64_t poolid) const;
/**
* Obtain a formatted/plain output for client I/O, source from stats for a
* given @p delta_sum pool over a given @p delta_stamp period of time.
*/
void client_io_rate_summary(Formatter *f, ostream *out,
pool_stat_t delta_sum,
utime_t delta_stamp) const;
/**
* Obtain a formatted/plain output for the overall client I/O, which is
* calculated resorting to @p pg_sum_delta and @p stamp_delta.
*/
void overall_client_io_rate_summary(Formatter *f, ostream *out) const;
/**
* Obtain a formatted/plain output for client I/O over a given pool
* with id @p pool_id. We will then obtain pool-specific data
* from @p per_pool_sum_delta.
*/
void pool_client_io_rate_summary(Formatter *f, ostream *out,
uint64_t poolid) const;
void print_summary(Formatter *f, ostream *out) const;
void print_oneline_summary(ostream *out) const;