mirror of
				https://github.com/Zygo/bees.git
				synced 2025-11-03 19:50:34 +01: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:
		@@ -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");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user