From 231593bfbc5f2d3e120ca619781df2078244ecc4 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Sun, 22 Dec 2024 21:50:34 -0500 Subject: [PATCH] throttle: don't hold the multilock during throttle Release the lock before entering the throttle sleep, so that other threads can still run. Signed-off-by: Zygo Blaxell --- src/bees-context.cc | 6 ++++-- src/bees-roots.cc | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/bees-context.cc b/src/bees-context.cc index b02aa95..da7ae71 100644 --- a/src/bees-context.cc +++ b/src/bees-context.cc @@ -241,7 +241,7 @@ BeesContext::dedup(const BeesRangePair &brp_in) BEESCOUNT(dedup_try); BEESNOTE("waiting to dedup " << brp); - const auto lock = MultiLocker::get_lock("dedupe"); + auto lock = MultiLocker::get_lock("dedupe"); BEESLOGINFO("dedup: src " << pretty(brp.first.size()) << " [" << to_hex(brp.first.begin()) << ".." << to_hex(brp.first.end()) << "] {" << first_addr << "} " << name_fd(brp.first.fd()) << "\n" << " dst " << pretty(brp.second.size()) << " [" << to_hex(brp.second.begin()) << ".." << to_hex(brp.second.end()) << "] {" << second_addr << "} " << name_fd(brp.second.fd())); @@ -262,6 +262,7 @@ BeesContext::dedup(const BeesRangePair &brp_in) BEESLOGWARN("NO Dedup! " << brp); } + lock.reset(); bees_throttle(dedup_timer.age(), "dedup"); return rv; } catch (const std::system_error &e) { @@ -993,7 +994,7 @@ BeesContext::resolve_addr_uncached(BeesAddress addr) struct rusage usage_after; { BEESNOTE("waiting to resolve addr " << addr << " with LOGICAL_INO"); - const auto lock = MultiLocker::get_lock("logical_ino"); + auto lock = MultiLocker::get_lock("logical_ino"); // Get this thread's system CPU usage DIE_IF_MINUS_ONE(getrusage(RUSAGE_THREAD, &usage_before)); @@ -1010,6 +1011,7 @@ BeesContext::resolve_addr_uncached(BeesAddress addr) DIE_IF_MINUS_ONE(getrusage(RUSAGE_THREAD, &usage_after)); const auto resolve_timer_age = resolve_timer.age(); BEESCOUNTADD(resolve_ms, resolve_timer_age * 1000); + lock.reset(); bees_throttle(resolve_timer_age, "resolve_addr"); } diff --git a/src/bees-roots.cc b/src/bees-roots.cc index 26c4936..2cd70b8 100644 --- a/src/bees-roots.cc +++ b/src/bees-roots.cc @@ -592,7 +592,7 @@ BeesScanModeExtent::create_extent_map(const uint64_t bytenr, const ProgressTrack { BEESNOTE("waiting to create extent map for " << to_hex(bytenr) << " with LOGICAL_INO"); - const auto lock = MultiLocker::get_lock("logical_ino"); + auto lock = MultiLocker::get_lock("logical_ino"); BEESNOTE("Resolving bytenr " << to_hex(bytenr) << " refs " << log_ino.m_iors.size()); BEESTOOLONG("Resolving bytenr " << to_hex(bytenr) << " refs " << log_ino.m_iors.size()); @@ -608,6 +608,7 @@ BeesScanModeExtent::create_extent_map(const uint64_t bytenr, const ProgressTrack const auto resolve_age = resolve_timer.age(); BEESCOUNTADD(extent_ms, resolve_age * 1000); + lock.reset(); bees_throttle(resolve_age, "extent_map"); }