1
0
mirror of https://github.com/Zygo/bees.git synced 2025-05-17 21:35:45 +02:00

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 <bees@furryterror.org>
This commit is contained in:
Zygo Blaxell 2024-12-22 21:50:34 -05:00
parent d4900cc5d5
commit 231593bfbc
2 changed files with 6 additions and 3 deletions

View File

@ -241,7 +241,7 @@ BeesContext::dedup(const BeesRangePair &brp_in)
BEESCOUNT(dedup_try); BEESCOUNT(dedup_try);
BEESNOTE("waiting to dedup " << brp); 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" 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())); << " 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); BEESLOGWARN("NO Dedup! " << brp);
} }
lock.reset();
bees_throttle(dedup_timer.age(), "dedup"); bees_throttle(dedup_timer.age(), "dedup");
return rv; return rv;
} catch (const std::system_error &e) { } catch (const std::system_error &e) {
@ -993,7 +994,7 @@ BeesContext::resolve_addr_uncached(BeesAddress addr)
struct rusage usage_after; struct rusage usage_after;
{ {
BEESNOTE("waiting to resolve addr " << addr << " with LOGICAL_INO"); 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 // Get this thread's system CPU usage
DIE_IF_MINUS_ONE(getrusage(RUSAGE_THREAD, &usage_before)); 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)); DIE_IF_MINUS_ONE(getrusage(RUSAGE_THREAD, &usage_after));
const auto resolve_timer_age = resolve_timer.age(); const auto resolve_timer_age = resolve_timer.age();
BEESCOUNTADD(resolve_ms, resolve_timer_age * 1000); BEESCOUNTADD(resolve_ms, resolve_timer_age * 1000);
lock.reset();
bees_throttle(resolve_timer_age, "resolve_addr"); bees_throttle(resolve_timer_age, "resolve_addr");
} }

View File

@ -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"); 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()); BEESNOTE("Resolving bytenr " << to_hex(bytenr) << " refs " << log_ino.m_iors.size());
BEESTOOLONG("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(); const auto resolve_age = resolve_timer.age();
BEESCOUNTADD(extent_ms, resolve_age * 1000); BEESCOUNTADD(extent_ms, resolve_age * 1000);
lock.reset();
bees_throttle(resolve_age, "extent_map"); bees_throttle(resolve_age, "extent_map");
} }