void OSD::heartbeat()
{
ceph_assert(ceph_mutex_is_locked_by_me(heartbeat_lock));
- dout(30) << "heartbeat" << dendl;
-
- auto load_for_logger = service.get_scrub_services().update_load_average();
- if (load_for_logger) {
- logger->set(l_osd_loadavg, load_for_logger.value());
- }
+ logger->set(
+ l_osd_loadavg,
+ 100.0 * service.get_scrub_services().update_load_average().value_or(0.0));
dout(30) << "heartbeat checking stats" << dendl;
// refresh peer list and osd stats
if (getloadavg(&loadavg, 1) != 1) {
return std::nullopt;
}
- return 100 * loadavg;
+ return loadavg;
}
return true;
}
- dout(10) << fmt::format(
+ dout(5) << fmt::format(
"loadavg {:.3f} >= max {:.3f} (#CPUs:{}) = no",
loadavg_per_cpu, conf->osd_scrub_load_threshold,
loadavg_cpu_count)
[[nodiscard]] bool scrub_time_permit(utime_t t) const;
/**
- * An external interface into the LoadTracker object. Used by
- * the OSD tick to update the load data in the logger.
+ * Fetch the 1-minute load average. Used by
+ * the OSD heartbeat handler to update a performance counter.
+ * Also updates the number of CPUs, required internally by the
+ * scrub queue.
*
- * \returns 100*(the decaying (running) average of the CPU load
- * over the last 24 hours) or nullopt if the load is not
- * available.
- * Note that the multiplication by 100 is required by the logger interface
+ * \returns the 1-minute element of getloadavg() or nullopt
+ * if the load is not available.
*/
std::optional<double> update_load_average();