data.histogram->inc(x, y);
}
-pair<uint64_t, uint64_t> PerfCounters::get_tavg_ms(int idx) const
+pair<uint64_t, uint64_t> PerfCounters::get_tavg_ns(int idx) const
{
if (!m_cct->_conf->perf)
return make_pair(0, 0);
if (!(data.type & PERFCOUNTER_LONGRUNAVG))
return make_pair(0, 0);
pair<uint64_t,uint64_t> a = data.read_avg();
- return make_pair(a.second, a.first / 1000000ull);
+ return make_pair(a.second, a.first);
}
void PerfCounters::reset()
const std::string &counter = "") {
dump_formatted_generic(f, schema, true, counter);
}
- pair<uint64_t, uint64_t> get_tavg_ms(int idx) const;
+ pair<uint64_t, uint64_t> get_tavg_ns(int idx) const;
const std::string& get_name() const;
void set_name(std::string s) {
i != osd_stat.end();
++i) {
tab << i->first;
- tab << i->second.os_perf_stat.os_commit_latency;
- tab << i->second.os_perf_stat.os_apply_latency;
+ tab << i->second.os_perf_stat.os_commit_latency_ns / 1000000ull;
+ tab << i->second.os_perf_stat.os_apply_latency_ns / 1000000ull;
tab << TextTable::endrow;
}
(*ss) << tab;
void BlueStore::BSPerfTracker::update_from_perfcounters(
PerfCounters &logger)
{
- os_commit_latency.consume_next(
- logger.get_tavg_ms(
+ os_commit_latency_ns.consume_next(
+ logger.get_tavg_ns(
l_bluestore_commit_lat));
- os_apply_latency.consume_next(
- logger.get_tavg_ms(
+ os_apply_latency_ns.consume_next(
+ logger.get_tavg_ns(
l_bluestore_commit_lat));
}
}
struct BSPerfTracker {
- PerfCounters::avg_tracker<uint64_t> os_commit_latency;
- PerfCounters::avg_tracker<uint64_t> os_apply_latency;
+ PerfCounters::avg_tracker<uint64_t> os_commit_latency_ns;
+ PerfCounters::avg_tracker<uint64_t> os_apply_latency_ns;
objectstore_perf_stat_t get_cur_stats() const {
objectstore_perf_stat_t ret;
- ret.os_commit_latency = os_commit_latency.current_avg();
- ret.os_apply_latency = os_apply_latency.current_avg();
+ ret.os_commit_latency_ns = os_commit_latency_ns.current_avg();
+ ret.os_apply_latency_ns = os_apply_latency_ns.current_avg();
return ret;
}
void FileStore::FSPerfTracker::update_from_perfcounters(
PerfCounters &logger)
{
- os_commit_latency.consume_next(
- logger.get_tavg_ms(
+ os_commit_latency_ns.consume_next(
+ logger.get_tavg_ns(
l_filestore_journal_latency));
- os_apply_latency.consume_next(
- logger.get_tavg_ms(
+ os_apply_latency_ns.consume_next(
+ logger.get_tavg_ns(
l_filestore_apply_latency));
}
static int get_block_device_fsid(CephContext* cct, const string& path,
uuid_d *fsid);
struct FSPerfTracker {
- PerfCounters::avg_tracker<uint64_t> os_commit_latency;
- PerfCounters::avg_tracker<uint64_t> os_apply_latency;
+ PerfCounters::avg_tracker<uint64_t> os_commit_latency_ns;
+ PerfCounters::avg_tracker<uint64_t> os_apply_latency_ns;
objectstore_perf_stat_t get_cur_stats() const {
objectstore_perf_stat_t ret;
- ret.os_commit_latency = os_commit_latency.current_avg();
- ret.os_apply_latency = os_apply_latency.current_avg();
+ ret.os_commit_latency_ns = os_commit_latency_ns.current_avg();
+ ret.os_apply_latency_ns = os_apply_latency_ns.current_avg();
return ret;
}
void objectstore_perf_stat_t::dump(Formatter *f) const
{
- f->dump_unsigned("commit_latency_ms", os_commit_latency);
- f->dump_unsigned("apply_latency_ms", os_apply_latency);
+ // *_ms values just for compatibility.
+ f->dump_float("commit_latency_ms", os_commit_latency_ns / 1000000.0);
+ f->dump_float("apply_latency_ms", os_apply_latency_ns / 1000000.0);
+ f->dump_unsigned("commit_latency_ns", os_commit_latency_ns);
+ f->dump_unsigned("apply_latency_ns", os_apply_latency_ns);
}
void objectstore_perf_stat_t::encode(bufferlist &bl) const
{
- ENCODE_START(1, 1, bl);
- encode(os_commit_latency, bl);
- encode(os_apply_latency, bl);
+ uint32_t commit_latency_ms = os_commit_latency_ns / 1000000;
+ uint32_t apply_latency_ms = os_apply_latency_ns / 1000000;
+ ENCODE_START(2, 1, bl);
+ encode(commit_latency_ms, bl); // for compatibility with older monitor.
+ encode(apply_latency_ms, bl); // for compatibility with older monitor.
+ encode(os_commit_latency_ns, bl);
+ encode(os_apply_latency_ns, bl);
ENCODE_FINISH(bl);
}
void objectstore_perf_stat_t::decode(bufferlist::iterator &bl)
{
- DECODE_START(1, bl);
- decode(os_commit_latency, bl);
- decode(os_apply_latency, bl);
+ DECODE_START(2, bl);
+ uint32_t commit_latency_ms;
+ uint32_t apply_latency_ms;
+ decode(commit_latency_ms, bl);
+ decode(apply_latency_ms, bl);
+ if (struct_v >= 2) {
+ decode(os_commit_latency_ns, bl);
+ decode(os_apply_latency_ns, bl);
+ } else {
+ os_commit_latency_ns = commit_latency_ms * (uint64_t) 1000000;
+ os_apply_latency_ns = apply_latency_ms * (uint64_t) 1000000;
+ }
DECODE_FINISH(bl);
}
{
o.push_back(new objectstore_perf_stat_t());
o.push_back(new objectstore_perf_stat_t());
- o.back()->os_commit_latency = 20;
- o.back()->os_apply_latency = 30;
+ o.back()->os_commit_latency_ns = 20000000;
+ o.back()->os_apply_latency_ns = 30000000;
}
// -- osd_stat_t --
* current perf information about the osd
*/
struct objectstore_perf_stat_t {
- // cur_op_latency is in ms since double add/sub are not associative
- uint32_t os_commit_latency;
- uint32_t os_apply_latency;
+ // cur_op_latency is in ns since double add/sub are not associative
+ uint64_t os_commit_latency_ns;
+ uint64_t os_apply_latency_ns;
objectstore_perf_stat_t() :
- os_commit_latency(0), os_apply_latency(0) {}
+ os_commit_latency_ns(0), os_apply_latency_ns(0) {}
bool operator==(const objectstore_perf_stat_t &r) const {
- return os_commit_latency == r.os_commit_latency &&
- os_apply_latency == r.os_apply_latency;
+ return os_commit_latency_ns == r.os_commit_latency_ns &&
+ os_apply_latency_ns == r.os_apply_latency_ns;
}
void add(const objectstore_perf_stat_t &o) {
- os_commit_latency += o.os_commit_latency;
- os_apply_latency += o.os_apply_latency;
+ os_commit_latency_ns += o.os_commit_latency_ns;
+ os_apply_latency_ns += o.os_apply_latency_ns;
}
void sub(const objectstore_perf_stat_t &o) {
- os_commit_latency -= o.os_commit_latency;
- os_apply_latency -= o.os_apply_latency;
+ os_commit_latency_ns -= o.os_commit_latency_ns;
+ os_apply_latency_ns -= o.os_apply_latency_ns;
}
void dump(Formatter *f) const;
void encode(bufferlist &bl) const;
data['num_osd_in'] = num_in
osd_fill = list()
- osd_apply_latency = list()
- osd_commit_latency = list()
+ osd_apply_latency_ns = list()
+ osd_commit_latency_ns = list()
osd_stats = self.get('osd_stats')
for osd in osd_stats['osd_stats']:
if osd['kb'] == 0:
continue
osd_fill.append((float(osd['kb_used']) / float(osd['kb'])) * 100)
- osd_apply_latency.append(osd['perf_stat']['apply_latency_ms'])
- osd_commit_latency.append(osd['perf_stat']['commit_latency_ms'])
+ osd_apply_latency_ns.append(osd['perf_stat']['apply_latency_ns'])
+ osd_commit_latency_ns.append(osd['perf_stat']['commit_latency_ns'])
try:
data['osd_max_fill'] = max(osd_fill)
pass
try:
- data['osd_latency_apply_max'] = max(osd_apply_latency)
- data['osd_latency_apply_min'] = min(osd_apply_latency)
- data['osd_latency_apply_avg'] = avg(osd_apply_latency)
+ data['osd_latency_apply_max'] = max(osd_apply_latency_ns) / 1000000.0 # ns -> ms
+ data['osd_latency_apply_min'] = min(osd_apply_latency_ns) / 1000000.0 # ns -> ms
+ data['osd_latency_apply_avg'] = avg(osd_apply_latency_ns) / 1000000.0 # ns -> ms
- data['osd_latency_commit_max'] = max(osd_commit_latency)
- data['osd_latency_commit_min'] = min(osd_commit_latency)
- data['osd_latency_commit_avg'] = avg(osd_commit_latency)
+ data['osd_latency_commit_max'] = max(osd_commit_latency_ns) / 1000000.0 # ns -> ms
+ data['osd_latency_commit_min'] = min(osd_commit_latency_ns) / 1000000.0 # ns -> ms
+ data['osd_latency_commit_avg'] = avg(osd_commit_latency_ns) / 1000000.0 # ns -> ms
except ValueError:
pass