From b015711b7c15e7286653975fc2e2490e89e75c16 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 29 Oct 2024 10:42:22 -0700 Subject: [PATCH] Fix write metrics for interleaved implementation --- ConflictSet.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 1b77010..7765b58 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -4099,6 +4099,7 @@ struct Context { Node *root; InternalVersionT writeVersion; Result *results; + int64_t iterations = 0; }; PRESERVE_NONE void keepGoing(Job *job, Context *context) { @@ -4142,6 +4143,7 @@ template void iter(Job *job, Context *context) { context->results[job->index] = {job->n, job->remaining}; MUSTTAIL return complete(job, context); } + ++context->iterations; job->continuation = iterTable[child->getType()]; __builtin_prefetch(job->n); MUSTTAIL return keepGoing(job, context); @@ -4731,6 +4733,8 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { // are done inProgress->continuation(inProgress, &context); + writeContext.accum.insert_iterations += context.iterations; + // Phase 2: Perform insertions. Nodes may be upsized during this phase, but // old nodes get forwarding pointers installed and are released after // phase 2. @@ -4791,6 +4795,11 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { } } + for (int i = 0; i < count; ++i) { + const auto &w = writes[i]; + writeContext.accum.write_bytes += w.begin.len + w.end.len; + } + #if __has_attribute(preserve_none) && __has_attribute(musttail) bool allPointWrites = true; for (int i = 0; i < count; ++i) { @@ -4807,7 +4816,6 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl { } else { for (int i = 0; i < count; ++i) { const auto &w = writes[i]; - writeContext.accum.write_bytes += w.begin.len + w.end.len; 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) {