Improve codegen for tracking check metrics
This commit is contained in:
@@ -2978,7 +2978,7 @@ struct CheckContext {
|
||||
const ConflictSet::ReadRange *queries;
|
||||
ConflictSet::Result *results;
|
||||
int64_t started;
|
||||
ReadContext *tls;
|
||||
ReadContext tls;
|
||||
#if !__has_attribute(musttail)
|
||||
CheckJob *job;
|
||||
bool done;
|
||||
@@ -3034,7 +3034,7 @@ static Continuation iterTable[] = {iter<Node0>, iter<Node3>, iter<Node16>,
|
||||
iter<Node48>, iter<Node256>};
|
||||
|
||||
void begin(CheckJob *job, CheckContext *context) {
|
||||
++context->tls->point_read_accum;
|
||||
++context->tls.point_read_accum;
|
||||
#if DEBUG_VERBOSE && !defined(NDEBUG)
|
||||
fprintf(stderr, "Check point read: %s\n", printable(key).c_str());
|
||||
#endif
|
||||
@@ -3104,11 +3104,11 @@ template <class NodeT> void iter(CheckJob *job, CheckContext *context) {
|
||||
}
|
||||
}
|
||||
|
||||
++context->tls->point_read_iterations_accum;
|
||||
++context->tls.point_read_iterations_accum;
|
||||
|
||||
if (job->maxV <= job->readVersion) {
|
||||
job->setResult(true);
|
||||
++context->tls->point_read_short_circuit_accum;
|
||||
++context->tls.point_read_short_circuit_accum;
|
||||
MUSTTAIL return complete(job, context);
|
||||
}
|
||||
|
||||
@@ -3162,7 +3162,7 @@ static Continuation iterTable[] = {iter<Node0>, iter<Node3>, iter<Node16>,
|
||||
iter<Node48>, iter<Node256>};
|
||||
|
||||
void begin(CheckJob *job, CheckContext *context) {
|
||||
++context->tls->prefix_read_accum;
|
||||
++context->tls.prefix_read_accum;
|
||||
#if DEBUG_VERBOSE && !defined(NDEBUG)
|
||||
fprintf(stderr, "Check prefix read: %s\n", printable(key).c_str());
|
||||
#endif
|
||||
@@ -3233,11 +3233,11 @@ template <class NodeT> void iter(CheckJob *job, CheckContext *context) {
|
||||
}
|
||||
}
|
||||
|
||||
++context->tls->prefix_read_iterations_accum;
|
||||
++context->tls.prefix_read_iterations_accum;
|
||||
|
||||
if (job->maxV <= job->readVersion) {
|
||||
job->setResult(true);
|
||||
++context->tls->prefix_read_short_circuit_accum;
|
||||
++context->tls.prefix_read_short_circuit_accum;
|
||||
MUSTTAIL return complete(job, context);
|
||||
}
|
||||
|
||||
@@ -3329,7 +3329,7 @@ PRESERVE_NONE void begin(CheckJob *job, CheckContext *context) {
|
||||
MUSTTAIL return job->continuation(job, context);
|
||||
}
|
||||
|
||||
++context->tls->range_read_accum;
|
||||
++context->tls.range_read_accum;
|
||||
job->remaining = job->begin.subspan(0, job->lcp);
|
||||
|
||||
if (job->remaining.size() == 0) {
|
||||
@@ -3371,11 +3371,11 @@ void common_prefix_iter(CheckJob *job, CheckContext *context) {
|
||||
job->remaining.size() -
|
||||
(1 + child->partialKeyLen));
|
||||
|
||||
++context->tls->range_read_iterations_accum;
|
||||
++context->tls.range_read_iterations_accum;
|
||||
|
||||
if (job->maxV <= job->readVersion) {
|
||||
job->setResult(true);
|
||||
++context->tls->range_read_short_circuit_accum;
|
||||
++context->tls.range_read_short_circuit_accum;
|
||||
MUSTTAIL return complete(job, context);
|
||||
}
|
||||
|
||||
@@ -3427,7 +3427,7 @@ PRESERVE_NONE void done_common_prefix_iter(CheckJob *job,
|
||||
}
|
||||
|
||||
if (!checkMaxBetweenExclusive(n, -1, job->remaining[0], job->readVersion,
|
||||
context->tls)) {
|
||||
&context->tls)) {
|
||||
job->setResult(false);
|
||||
MUSTTAIL return complete(job, context);
|
||||
}
|
||||
@@ -3466,7 +3466,7 @@ PRESERVE_NONE void done_common_prefix_iter(CheckJob *job,
|
||||
|
||||
if (!checkRangeStartsWith(n, job->begin.subspan(0, job->lcp),
|
||||
job->begin[job->lcp], job->end[job->lcp],
|
||||
job->readVersion, context->tls)) {
|
||||
job->readVersion, &context->tls)) {
|
||||
job->setResult(false);
|
||||
MUSTTAIL return complete(job, context);
|
||||
}
|
||||
@@ -3561,7 +3561,7 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) {
|
||||
}
|
||||
}
|
||||
|
||||
++context->tls->range_read_iterations_accum;
|
||||
++context->tls.range_read_iterations_accum;
|
||||
|
||||
if (job->maxV <= job->readVersion) {
|
||||
job->continuation = done_left_side_iter;
|
||||
@@ -3575,7 +3575,7 @@ PRESERVE_NONE void left_side_iter(CheckJob *job, CheckContext *context) {
|
||||
}
|
||||
|
||||
if (!checkMaxBetweenExclusive(n, job->remaining[0], 256, job->readVersion,
|
||||
context->tls)) {
|
||||
&context->tls)) {
|
||||
job->setResult(false);
|
||||
MUSTTAIL return complete(job, context);
|
||||
}
|
||||
@@ -3699,7 +3699,7 @@ PRESERVE_NONE void right_side_iter(CheckJob *job, CheckContext *context) {
|
||||
}
|
||||
}
|
||||
|
||||
++context->tls->range_read_iterations_accum;
|
||||
++context->tls.range_read_iterations_accum;
|
||||
|
||||
if (job->remaining.size() == 0) {
|
||||
job->continuation = down_left_spine;
|
||||
@@ -3713,7 +3713,7 @@ PRESERVE_NONE void right_side_iter(CheckJob *job, CheckContext *context) {
|
||||
}
|
||||
|
||||
if (!checkMaxBetweenExclusive(n, -1, job->remaining[0], job->readVersion,
|
||||
context->tls)) {
|
||||
&context->tls)) {
|
||||
job->setResult(false);
|
||||
MUSTTAIL return complete(job, context);
|
||||
}
|
||||
@@ -3779,18 +3779,16 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
return;
|
||||
}
|
||||
|
||||
ReadContext tls;
|
||||
tls.impl = this;
|
||||
int64_t check_byte_accum = 0;
|
||||
constexpr int kConcurrent = 16;
|
||||
CheckJob inProgress[kConcurrent];
|
||||
CheckContext context;
|
||||
context.tls.impl = this;
|
||||
context.count = count;
|
||||
context.oldestVersionFullPrecision = oldestVersionFullPrecision;
|
||||
context.root = root;
|
||||
context.queries = reads;
|
||||
context.results = result;
|
||||
context.tls = &tls;
|
||||
int64_t started = std::min(kConcurrent, count);
|
||||
context.started = started;
|
||||
for (int i = 0; i < started; i++) {
|
||||
@@ -3823,24 +3821,27 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
assert(reads[i].readVersion <= newestVersionFullPrecision);
|
||||
const auto &r = reads[i];
|
||||
check_byte_accum += r.begin.len + r.end.len;
|
||||
tls.commits_accum += result[i] == Commit;
|
||||
tls.conflicts_accum += result[i] == Conflict;
|
||||
tls.too_olds_accum += result[i] == TooOld;
|
||||
context.tls.commits_accum += result[i] == Commit;
|
||||
context.tls.conflicts_accum += result[i] == Conflict;
|
||||
context.tls.too_olds_accum += result[i] == TooOld;
|
||||
}
|
||||
|
||||
point_read_total.add(tls.point_read_accum);
|
||||
prefix_read_total.add(tls.prefix_read_accum);
|
||||
range_read_total.add(tls.range_read_accum);
|
||||
range_read_node_scan_total.add(tls.range_read_node_scan_accum);
|
||||
point_read_short_circuit_total.add(tls.point_read_short_circuit_accum);
|
||||
prefix_read_short_circuit_total.add(tls.prefix_read_short_circuit_accum);
|
||||
range_read_short_circuit_total.add(tls.range_read_short_circuit_accum);
|
||||
point_read_iterations_total.add(tls.point_read_iterations_accum);
|
||||
prefix_read_iterations_total.add(tls.prefix_read_iterations_accum);
|
||||
range_read_iterations_total.add(tls.range_read_iterations_accum);
|
||||
commits_total.add(tls.commits_accum);
|
||||
conflicts_total.add(tls.conflicts_accum);
|
||||
too_olds_total.add(tls.too_olds_accum);
|
||||
point_read_total.add(context.tls.point_read_accum);
|
||||
prefix_read_total.add(context.tls.prefix_read_accum);
|
||||
range_read_total.add(context.tls.range_read_accum);
|
||||
range_read_node_scan_total.add(context.tls.range_read_node_scan_accum);
|
||||
point_read_short_circuit_total.add(
|
||||
context.tls.point_read_short_circuit_accum);
|
||||
prefix_read_short_circuit_total.add(
|
||||
context.tls.prefix_read_short_circuit_accum);
|
||||
range_read_short_circuit_total.add(
|
||||
context.tls.range_read_short_circuit_accum);
|
||||
point_read_iterations_total.add(context.tls.point_read_iterations_accum);
|
||||
prefix_read_iterations_total.add(context.tls.prefix_read_iterations_accum);
|
||||
range_read_iterations_total.add(context.tls.range_read_iterations_accum);
|
||||
commits_total.add(context.tls.commits_accum);
|
||||
conflicts_total.add(context.tls.conflicts_accum);
|
||||
too_olds_total.add(context.tls.too_olds_accum);
|
||||
check_bytes_total.add(check_byte_accum);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user