From a1dfdf355cec9ffff55bfa239c4f09530834f601 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Fri, 9 Aug 2024 13:44:49 -0700 Subject: [PATCH] Use metrics to count change in entry count This lets us run gc slower safely --- ConflictSet.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 03f1c3a..5fa8624 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -3246,6 +3246,8 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { InternalVersionT::zero = tls.zero = oldestVersion; assert(writeVersion >= newestVersionFullPrecision); + assert(tls.accum.entries_erased == 0); + assert(tls.accum.entries_inserted == 0); if (oldestExtantVersion < writeVersion - kMaxCorrectVersionWindow) [[unlikely]] { @@ -3273,15 +3275,20 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { auto begin = std::span(w.begin.p, w.begin.len); auto end = std::span(w.end.p, w.end.len); if (w.end.len > 0) { - keyUpdates += 3; addWriteRange(root, begin, end, InternalVersionT(writeVersion), &tls, this); } else { - keyUpdates += 2; addPointWrite(root, begin, InternalVersionT(writeVersion), &tls, this); } } + // Run gc at least 150% the rate we're inserting entries + keyUpdates += + (std::max( + tls.accum.entries_inserted - tls.accum.entries_erased, 0) * + 3) >> + 1; + memory_bytes.set(totalBytes); point_writes_total.add(tls.accum.point_writes); range_writes_total.add(tls.accum.range_writes);