Fix write metrics for interleaved implementation

This commit is contained in:
2024-10-29 10:42:22 -07:00
parent f27ca6d6af
commit b015711b7c

View File

@@ -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 <class NodeT> 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<const uint8_t>(w.begin.p, w.begin.len);
auto end = std::span<const uint8_t>(w.end.p, w.end.len);
if (w.end.len > 0) {