Skip to content

Commit

Permalink
Merge pull request ceph#5539 from wonzhq/flush-mode-stat
Browse files Browse the repository at this point in the history
mon: show # of PGs at high flush mode in the command output

Reviewed-by: Sage Weil <[email protected]>
  • Loading branch information
liewegas committed Aug 20, 2015
2 parents aeb80d0 + 9e58c62 commit 6468ffb
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 30 deletions.
93 changes: 69 additions & 24 deletions src/mon/PGMap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1204,32 +1204,77 @@ void PGMap::cache_io_rate_summary(Formatter *f, ostream *out,
{
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";
}
bool have_output = false;

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";
have_output = true;
}
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_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 {
if (have_output)
*out << ", ";
*out << pretty_si_t(evict) << "B/s evict";
have_output = true;
}
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";
}
}
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 {
if (have_output)
*out << ", ";
*out << pretty_si_t(promote) << "op/s promote";
have_output = true;
}
}
if (pos_delta.stats.sum.num_flush_mode_low) {
if (f) {
f->dump_int("num_flush_mode_low", pos_delta.stats.sum.num_flush_mode_low);
} else {
if (have_output)
*out << ", ";
*out << pretty_si_t(pos_delta.stats.sum.num_flush_mode_low) << "PG(s) flushing";
have_output = true;
}
}
if (pos_delta.stats.sum.num_flush_mode_high) {
if (f) {
f->dump_int("num_flush_mode_high", pos_delta.stats.sum.num_flush_mode_high);
} else {
if (have_output)
*out << ", ";
*out << pretty_si_t(pos_delta.stats.sum.num_flush_mode_high) << "PG(s) flushing (high)";
have_output = true;
}
}
if (pos_delta.stats.sum.num_evict_mode_some) {
if (f) {
f->dump_int("num_evict_mode_some", pos_delta.stats.sum.num_evict_mode_some);
} else {
if (have_output)
*out << ", ";
*out << pretty_si_t(pos_delta.stats.sum.num_evict_mode_some) << "PG(s) evicting";
have_output = true;
}
}
if (pos_delta.stats.sum.num_evict_mode_full) {
if (f) {
f->dump_int("num_evict_mode_full", pos_delta.stats.sum.num_evict_mode_full);
} else {
if (have_output)
*out << ", ";
*out << pretty_si_t(pos_delta.stats.sum.num_evict_mode_full) << "PG(s) evicting (full)";
have_output = true;
}
}
}
Expand Down
22 changes: 20 additions & 2 deletions src/osd/ReplicatedPG.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11511,10 +11511,18 @@ bool ReplicatedPG::agent_choose_mode(bool restart, OpRequestRef op)
<< " -> "
<< TierAgentState::get_flush_mode_name(flush_mode)
<< dendl;
if (flush_mode == TierAgentState::FLUSH_MODE_HIGH)
if (flush_mode == TierAgentState::FLUSH_MODE_HIGH) {
osd->agent_inc_high_count();
if (agent_state->flush_mode == TierAgentState::FLUSH_MODE_HIGH)
info.stats.stats.sum.num_flush_mode_high = 1;
} else if (flush_mode == TierAgentState::FLUSH_MODE_LOW) {
info.stats.stats.sum.num_flush_mode_low = 1;
}
if (agent_state->flush_mode == TierAgentState::FLUSH_MODE_HIGH) {
osd->agent_dec_high_count();
info.stats.stats.sum.num_flush_mode_high = 0;
} else if (agent_state->flush_mode == TierAgentState::FLUSH_MODE_LOW) {
info.stats.stats.sum.num_flush_mode_low = 0;
}
agent_state->flush_mode = flush_mode;
}
if (evict_mode != agent_state->evict_mode) {
Expand All @@ -11531,6 +11539,16 @@ bool ReplicatedPG::agent_choose_mode(bool restart, OpRequestRef op)
requeue_ops(waiting_for_cache_not_full);
requeued = true;
}
if (evict_mode == TierAgentState::EVICT_MODE_SOME) {
info.stats.stats.sum.num_evict_mode_some = 1;
} else if (evict_mode == TierAgentState::EVICT_MODE_FULL) {
info.stats.stats.sum.num_evict_mode_full = 1;
}
if (agent_state->evict_mode == TierAgentState::EVICT_MODE_SOME) {
info.stats.stats.sum.num_evict_mode_some = 0;
} else if (agent_state->evict_mode == TierAgentState::EVICT_MODE_FULL) {
info.stats.stats.sum.num_evict_mode_full = 0;
}
agent_state->evict_mode = evict_mode;
}
uint64_t old_effort = agent_state->evict_effort;
Expand Down
41 changes: 38 additions & 3 deletions src/osd/osd_types.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1570,11 +1570,15 @@ void object_stat_sum_t::dump(Formatter *f) const
f->dump_int("num_evict", num_evict);
f->dump_int("num_evict_kb", num_evict_kb);
f->dump_int("num_promote", num_promote);
f->dump_int("num_flush_mode_high", num_flush_mode_high);
f->dump_int("num_flush_mode_low", num_flush_mode_low);
f->dump_int("num_evict_mode_some", num_evict_mode_some);
f->dump_int("num_evict_mode_full", num_evict_mode_full);
}

void object_stat_sum_t::encode(bufferlist& bl) const
{
ENCODE_START(12, 3, bl);
ENCODE_START(13, 3, bl);
::encode(num_bytes, bl);
::encode(num_objects, bl);
::encode(num_object_clones, bl);
Expand Down Expand Up @@ -1603,12 +1607,16 @@ void object_stat_sum_t::encode(bufferlist& bl) const
::encode(num_evict, bl);
::encode(num_evict_kb, bl);
::encode(num_promote, bl);
::encode(num_flush_mode_high, bl);
::encode(num_flush_mode_low, bl);
::encode(num_evict_mode_some, bl);
::encode(num_evict_mode_full, bl);
ENCODE_FINISH(bl);
}

void object_stat_sum_t::decode(bufferlist::iterator& bl)
{
DECODE_START_LEGACY_COMPAT_LEN(12, 3, 3, bl);
DECODE_START_LEGACY_COMPAT_LEN(13, 3, 3, bl);
::decode(num_bytes, bl);
if (struct_v < 3) {
uint64_t num_kb;
Expand Down Expand Up @@ -1685,6 +1693,17 @@ void object_stat_sum_t::decode(bufferlist::iterator& bl)
num_evict_kb = 0;
num_promote = 0;
}
if (struct_v >= 13) {
::decode(num_flush_mode_high, bl);
::decode(num_flush_mode_low, bl);
::decode(num_evict_mode_some, bl);
::decode(num_evict_mode_full, bl);
} else {
num_flush_mode_high = 0;
num_flush_mode_low = 0;
num_evict_mode_some = 0;
num_evict_mode_full = 0;
}
DECODE_FINISH(bl);
}

Expand Down Expand Up @@ -1717,6 +1736,10 @@ void object_stat_sum_t::generate_test_instances(list<object_stat_sum_t*>& o)
a.num_evict = 7;
a.num_evict_kb = 8;
a.num_promote = 9;
a.num_flush_mode_high = 0;
a.num_flush_mode_low = 1;
a.num_evict_mode_some = 1;
a.num_evict_mode_full = 0;
o.push_back(new object_stat_sum_t(a));
}

Expand Down Expand Up @@ -1750,6 +1773,10 @@ void object_stat_sum_t::add(const object_stat_sum_t& o)
num_evict += o.num_evict;
num_evict_kb += o.num_evict_kb;
num_promote += o.num_promote;
num_flush_mode_high += o.num_flush_mode_high;
num_flush_mode_low += o.num_flush_mode_low;
num_evict_mode_some += o.num_evict_mode_some;
num_evict_mode_full += o.num_evict_mode_full;
}

void object_stat_sum_t::sub(const object_stat_sum_t& o)
Expand Down Expand Up @@ -1782,6 +1809,10 @@ void object_stat_sum_t::sub(const object_stat_sum_t& o)
num_evict -= o.num_evict;
num_evict_kb -= o.num_evict_kb;
num_promote -= o.num_promote;
num_flush_mode_high -= o.num_flush_mode_high;
num_flush_mode_low -= o.num_flush_mode_low;
num_evict_mode_some -= o.num_evict_mode_some;
num_evict_mode_full -= o.num_evict_mode_full;
}

bool operator==(const object_stat_sum_t& l, const object_stat_sum_t& r)
Expand Down Expand Up @@ -1814,7 +1845,11 @@ bool operator==(const object_stat_sum_t& l, const object_stat_sum_t& r)
l.num_flush_kb == r.num_flush_kb &&
l.num_evict == r.num_evict &&
l.num_evict_kb == r.num_evict_kb &&
l.num_promote == r.num_promote;
l.num_promote == r.num_promote &&
l.num_flush_mode_high == r.num_flush_mode_high &&
l.num_flush_mode_low == r.num_flush_mode_low &&
l.num_evict_mode_some == r.num_evict_mode_some &&
l.num_evict_mode_full == r.num_evict_mode_full;
}

// -- object_stat_collection_t --
Expand Down
16 changes: 15 additions & 1 deletion src/osd/osd_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -1333,6 +1333,10 @@ struct object_stat_sum_t {
int64_t num_evict;
int64_t num_evict_kb;
int64_t num_promote;
int32_t num_flush_mode_high; // 1 when in high flush mode, otherwise 0
int32_t num_flush_mode_low; // 1 when in low flush mode, otherwise 0
int32_t num_evict_mode_some; // 1 when in evict some mode, otherwise 0
int32_t num_evict_mode_full; // 1 when in evict full mode, otherwise 0

object_stat_sum_t()
: num_bytes(0),
Expand All @@ -1355,7 +1359,9 @@ struct object_stat_sum_t {
num_flush_kb(0),
num_evict(0),
num_evict_kb(0),
num_promote(0)
num_promote(0),
num_flush_mode_high(0), num_flush_mode_low(0),
num_evict_mode_some(0), num_evict_mode_full(0)
{}

void floor(int64_t f) {
Expand Down Expand Up @@ -1388,6 +1394,10 @@ struct object_stat_sum_t {
FLOOR(num_evict);
FLOOR(num_evict_kb);
FLOOR(num_promote);
FLOOR(num_flush_mode_high);
FLOOR(num_flush_mode_low);
FLOOR(num_evict_mode_some);
FLOOR(num_evict_mode_full);
#undef FLOOR
}

Expand Down Expand Up @@ -1428,6 +1438,10 @@ struct object_stat_sum_t {
SPLIT(num_evict);
SPLIT(num_evict_kb);
SPLIT(num_promote);
SPLIT(num_flush_mode_high);
SPLIT(num_flush_mode_low);
SPLIT(num_evict_mode_some);
SPLIT(num_evict_mode_full);
#undef SPLIT
}

Expand Down

0 comments on commit 6468ffb

Please sign in to comment.