friend class ceph::osd::scheduler::PGOpItem;
friend class ceph::osd::scheduler::PGPeeringItem;
friend class ceph::osd::scheduler::PGRecovery;
+ friend class ceph::osd::scheduler::PGRecoveryContext;
friend class ceph::osd::scheduler::PGRecoveryMsg;
friend class ceph::osd::scheduler::PGDelete;
"l_osd_recovery_scan_queue_latency",
"MOSDPGScan queue latency");
+ osd_plb.add_time_avg(
+ l_osd_recovery_queue_lat,
+ "l_osd_recovery_queue_latency",
+ "PGRecovery queue latency");
+ osd_plb.add_time_avg(
+ l_osd_recovery_context_queue_lat,
+ "l_osd_recovery_context_queue_latency",
+ "PGRecoveryContext queue latency");
+
osd_plb.add_u64(l_osd_loadavg, "loadavg", "CPU load");
osd_plb.add_u64(
l_osd_cached_crc, "cached_crc", "Total number getting crc from crc_cache");
l_osd_recovery_backfill_remove_queue_lat,
l_osd_recovery_scan_queue_lat,
+ l_osd_recovery_queue_lat,
+ l_osd_recovery_context_queue_lat,
+
l_osd_loadavg,
l_osd_cached_crc,
l_osd_cached_crc_adjusted,
PGRef& pg,
ThreadPool::TPHandle &handle)
{
+ osd->logger->tinc(
+ l_osd_recovery_queue_lat,
+ time_queued - ceph_clock_now());
osd->do_recovery(pg.get(), epoch_queued, reserved_pushes, priority, handle);
pg->unlock();
}
PGRef& pg,
ThreadPool::TPHandle &handle)
{
+ osd->logger->tinc(
+ l_osd_recovery_context_queue_lat,
+ time_queued - ceph_clock_now());
c.release()->complete(handle);
pg->unlock();
}
};
class PGRecovery : public PGOpQueueable {
+ utime_t time_queued;
epoch_t epoch_queued;
uint64_t reserved_pushes;
int priority;
uint64_t reserved_pushes,
int priority)
: PGOpQueueable(pg),
+ time_queued(ceph_clock_now()),
epoch_queued(epoch_queued),
reserved_pushes(reserved_pushes),
priority(priority) {}
};
class PGRecoveryContext : public PGOpQueueable {
+ utime_t time_queued;
std::unique_ptr<GenContext<ThreadPool::TPHandle&>> c;
epoch_t epoch;
int priority;
GenContext<ThreadPool::TPHandle&> *c, epoch_t epoch,
int priority)
: PGOpQueueable(pgid),
+ time_queued(ceph_clock_now()),
c(c), epoch(epoch), priority(priority) {}
std::ostream &print(std::ostream &rhs) const final {
return rhs << "PGRecoveryContext(pgid=" << get_pgid()