"Average finishing state latency");
b.add_time_avg(l_bluestore_state_done_lat, "state_done_lat",
"Average done state latency");
+ b.add_time_avg(l_bluestore_commit_lat, "commit_lat",
+ "Average commit latency");
b.add_time_avg(l_bluestore_compress_lat, "compress_lat",
"Average compress latency");
b.add_time_avg(l_bluestore_decompress_lat, "decompress_lat",
}
unsigned n = txc->osr->parent->shard_hint.hash_to_shard(m_finisher_num);
if (txc->oncommit) {
+ logger->tinc(l_bluestore_commit_lat, ceph_clock_now(g_ceph_context) - txc->start);
finishers[n]->queue(txc->oncommit);
txc->oncommit = NULL;
}
throttle_bytes.put(txc->bytes);
}
+void BlueStore::BSPerfTracker::update_from_perfcounters(
+ PerfCounters &logger)
+{
+ os_commit_latency.consume_next(
+ logger.get_tavg_ms(
+ l_bluestore_commit_lat));
+ os_apply_latency.consume_next(
+ logger.get_tavg_ms(
+ l_bluestore_commit_lat));
+}
+
void BlueStore::_txc_finish(TransContext *txc)
{
dout(20) << __func__ << " " << txc << " onodes " << txc->onodes << dendl;
l_bluestore_state_wal_cleanup_lat,
l_bluestore_state_finishing_lat,
l_bluestore_state_done_lat,
+ l_bluestore_commit_lat,
l_bluestore_compress_lat,
l_bluestore_decompress_lat,
l_bluestore_csum_lat,
void log_state_latency(PerfCounters *logger, int state) {
utime_t lat, now = ceph_clock_now(g_ceph_context);
- lat = now - start;
+ lat = now - last_stamp;
logger->tinc(state, lat);
start = now;
+ last_stamp = now;
}
OpSequencerRef osr;
uint64_t seq = 0;
utime_t start;
+ utime_t last_stamp;
uint64_t last_nid = 0; ///< if non-zero, highest new nid we allocated
uint64_t last_blobid = 0; ///< if non-zero, highest new blobid we allocated
wal_txn(NULL),
ioc(this),
start(ceph_clock_now(g_ceph_context)) {
+ last_stamp = start;
}
~TransContext() {
delete wal_txn;
return num_objects * 300; //assuming per-object overhead is 300 bytes
}
+ struct BSPerfTracker {
+ PerfCounters::avg_tracker<uint64_t> os_commit_latency;
+ PerfCounters::avg_tracker<uint64_t> os_apply_latency;
+
+ objectstore_perf_stat_t get_cur_stats() const {
+ objectstore_perf_stat_t ret;
+ ret.os_commit_latency = os_commit_latency.avg();
+ ret.os_apply_latency = os_apply_latency.avg();
+ return ret;
+ }
+
+ void update_from_perfcounters(PerfCounters &logger);
+ } perf_tracker;
+
objectstore_perf_stat_t get_cur_stats() override {
- return objectstore_perf_stat_t();
+ perf_tracker.update_from_perfcounters(*logger);
+ return perf_tracker.get_cur_stats();
}
int queue_transactions(