Fix point writes accounting
Previously it wouldn't count a singleton range write
This commit is contained in:
@@ -729,6 +729,8 @@ struct WriteContext {
|
|||||||
double entries_inserted_accum = 0;
|
double entries_inserted_accum = 0;
|
||||||
double nodes_allocated_accum = 0;
|
double nodes_allocated_accum = 0;
|
||||||
double nodes_released_accum = 0;
|
double nodes_released_accum = 0;
|
||||||
|
double point_writes_accum = 0;
|
||||||
|
double range_writes_accum = 0;
|
||||||
template <class T> T *allocate(int c) {
|
template <class T> T *allocate(int c) {
|
||||||
++nodes_allocated_accum;
|
++nodes_allocated_accum;
|
||||||
if constexpr (std::is_same_v<T, Node0>) {
|
if constexpr (std::is_same_v<T, Node0>) {
|
||||||
@@ -2949,6 +2951,7 @@ void destroyTree(Node *root) {
|
|||||||
void addPointWrite(Node *&root, std::span<const uint8_t> key,
|
void addPointWrite(Node *&root, std::span<const uint8_t> key,
|
||||||
InternalVersionT writeVersion, WriteContext *tls,
|
InternalVersionT writeVersion, WriteContext *tls,
|
||||||
ConflictSet::Impl *impl) {
|
ConflictSet::Impl *impl) {
|
||||||
|
++tls->point_writes_accum;
|
||||||
auto *n = insert<true>(&root, key, writeVersion, tls, impl);
|
auto *n = insert<true>(&root, key, writeVersion, tls, impl);
|
||||||
if (!n->entryPresent) {
|
if (!n->entryPresent) {
|
||||||
++tls->entries_inserted_accum;
|
++tls->entries_inserted_accum;
|
||||||
@@ -2978,6 +2981,7 @@ void addWriteRange(Node *&root, std::span<const uint8_t> begin,
|
|||||||
end.back() == 0) {
|
end.back() == 0) {
|
||||||
return addPointWrite(root, begin, writeVersion, tls, impl);
|
return addPointWrite(root, begin, writeVersion, tls, impl);
|
||||||
}
|
}
|
||||||
|
++tls->range_writes_accum;
|
||||||
const bool beginIsPrefix = lcp == int(begin.size());
|
const bool beginIsPrefix = lcp == int(begin.size());
|
||||||
auto remaining = begin.subspan(0, lcp);
|
auto remaining = begin.subspan(0, lcp);
|
||||||
|
|
||||||
@@ -3200,8 +3204,6 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double write_byte_accum = 0;
|
double write_byte_accum = 0;
|
||||||
int point_writes_accum = 0;
|
|
||||||
int range_writes_accum = 0;
|
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
const auto &w = writes[i];
|
const auto &w = writes[i];
|
||||||
write_byte_accum += w.begin.len + w.end.len;
|
write_byte_accum += w.begin.len + w.end.len;
|
||||||
@@ -3209,19 +3211,17 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
|||||||
auto end = std::span<const uint8_t>(w.end.p, w.end.len);
|
auto end = std::span<const uint8_t>(w.end.p, w.end.len);
|
||||||
if (w.end.len > 0) {
|
if (w.end.len > 0) {
|
||||||
keyUpdates += 3;
|
keyUpdates += 3;
|
||||||
++range_writes_accum;
|
|
||||||
addWriteRange(root, begin, end, InternalVersionT(writeVersion), &tls,
|
addWriteRange(root, begin, end, InternalVersionT(writeVersion), &tls,
|
||||||
this);
|
this);
|
||||||
} else {
|
} else {
|
||||||
keyUpdates += 2;
|
keyUpdates += 2;
|
||||||
++point_writes_accum;
|
|
||||||
addPointWrite(root, begin, InternalVersionT(writeVersion), &tls, this);
|
addPointWrite(root, begin, InternalVersionT(writeVersion), &tls, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memory_bytes.set(totalBytes);
|
memory_bytes.set(totalBytes);
|
||||||
point_writes_total.add(point_writes_accum);
|
point_writes_total.add(std::exchange(tls.point_writes_accum, 0));
|
||||||
range_writes_total.add(range_writes_accum);
|
range_writes_total.add(std::exchange(tls.range_writes_accum, 0));
|
||||||
nodes_allocated_total.add(std::exchange(tls.nodes_allocated_accum, 0));
|
nodes_allocated_total.add(std::exchange(tls.nodes_allocated_accum, 0));
|
||||||
nodes_released_total.add(std::exchange(tls.nodes_released_accum, 0));
|
nodes_released_total.add(std::exchange(tls.nodes_released_accum, 0));
|
||||||
entries_inserted_total.add(std::exchange(tls.entries_inserted_accum, 0));
|
entries_inserted_total.add(std::exchange(tls.entries_inserted_accum, 0));
|
||||||
|
Reference in New Issue
Block a user