if (!m_cct->_conf->perf)
return;
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
if (!(data.type & PERFCOUNTER_U64))
return;
- data.u64 += amt;
+ data.u64.add(amt);
if (data.type & PERFCOUNTER_LONGRUNAVG)
- data.avgcount++;
+ data.avgcount.inc();
}
void PerfCounters::dec(int idx, uint64_t amt)
if (!m_cct->_conf->perf)
return;
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
assert(!(data.type & PERFCOUNTER_LONGRUNAVG));
if (!(data.type & PERFCOUNTER_U64))
return;
- assert(data.u64 >= amt);
- data.u64 -= amt;
+ data.u64.sub(amt);
}
void PerfCounters::set(int idx, uint64_t amt)
if (!m_cct->_conf->perf)
return;
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
if (!(data.type & PERFCOUNTER_U64))
return;
- data.u64 = amt;
+ data.u64.set(amt);
if (data.type & PERFCOUNTER_LONGRUNAVG)
- data.avgcount++;
+ data.avgcount.inc();
}
uint64_t PerfCounters::get(int idx) const
if (!m_cct->_conf->perf)
return 0;
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
const perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
if (!(data.type & PERFCOUNTER_U64))
return 0;
- return data.u64;
+ return data.u64.read();
}
void PerfCounters::tinc(int idx, utime_t amt)
if (!m_cct->_conf->perf)
return;
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
if (!(data.type & PERFCOUNTER_TIME))
return;
- data.u64 += amt.to_nsec();
+ data.u64.add(amt.to_nsec());
if (data.type & PERFCOUNTER_LONGRUNAVG)
- data.avgcount++;
+ data.avgcount.inc();
}
void PerfCounters::tset(int idx, utime_t amt)
if (!m_cct->_conf->perf)
return;
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
if (!(data.type & PERFCOUNTER_TIME))
return;
- data.u64 = amt.to_nsec();
+ data.u64.set(amt.to_nsec());
if (data.type & PERFCOUNTER_LONGRUNAVG)
assert(0);
}
if (!m_cct->_conf->perf)
return utime_t();
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
const perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
if (!(data.type & PERFCOUNTER_TIME))
return utime_t();
- return utime_t(data.u64 / 1000000000ull, data.u64 % 1000000000ull);
+ uint64_t v = data.u64.read();
+ return utime_t(v / 1000000000ull, v % 1000000000ull);
}
pair<uint64_t, uint64_t> PerfCounters::get_tavg_ms(int idx) const
if (!m_cct->_conf->perf)
return make_pair(0, 0);
- Mutex::Locker lck(m_lock);
assert(idx > m_lower_bound);
assert(idx < m_upper_bound);
const perf_counter_data_any_d& data(m_data[idx - m_lower_bound - 1]);
return make_pair(0, 0);
if (!(data.type & PERFCOUNTER_LONGRUNAVG))
return make_pair(0, 0);
- return make_pair(data.avgcount, data.u64/1000000);
+ return make_pair(data.avgcount.read(), data.u64.read()/1000000);
}
void PerfCounters::dump_formatted(Formatter *f, bool schema)
{
- Mutex::Locker lck(m_lock);
-
f->open_object_section(m_name.c_str());
perf_counter_data_vec_t::const_iterator d = m_data.begin();
perf_counter_data_vec_t::const_iterator d_end = m_data.end();
if (d->type & PERFCOUNTER_LONGRUNAVG) {
f->open_object_section(d->name);
if (d->type & PERFCOUNTER_U64) {
- f->dump_unsigned("avgcount", d->avgcount);
- f->dump_unsigned("sum", d->u64);
+ f->dump_unsigned("avgcount", d->avgcount.read());
+ f->dump_unsigned("sum", d->u64.read());
} else if (d->type & PERFCOUNTER_TIME) {
- f->dump_unsigned("avgcount", d->avgcount);
+ f->dump_unsigned("avgcount", d->avgcount.read());
+ uint64_t v = d->u64.read();
f->dump_format_unquoted("sum", "%"PRId64".%09"PRId64,
- d->u64 / 1000000000ull,
- d->u64 % 1000000000ull);
+ v / 1000000000ull,
+ v % 1000000000ull);
} else {
assert(0);
}
f->close_section();
} else {
+ uint64_t v = d->u64.read();
if (d->type & PERFCOUNTER_U64) {
- f->dump_unsigned(d->name, d->u64);
+ f->dump_unsigned(d->name, v);
} else if (d->type & PERFCOUNTER_TIME) {
f->dump_format_unquoted(d->name, "%"PRId64".%09"PRId64,
- d->u64 / 1000000000ull,
- d->u64 % 1000000000ull);
+ v / 1000000000ull,
+ v % 1000000000ull);
} else {
assert(0);
}
m_data.resize(upper_bound - lower_bound - 1);
}
-PerfCounters::perf_counter_data_any_d::perf_counter_data_any_d()
- : name(NULL),
- type(PERFCOUNTER_NONE),
- u64(0),
- avgcount(0)
-{
-}
-
PerfCountersBuilder::PerfCountersBuilder(CephContext *cct, const std::string &name,
int first, int last)
: m_perf_counters(new PerfCounters(cct, name, first, last))