Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions src/v/utils/delta_for.h
Original file line number Diff line number Diff line change
Expand Up @@ -1006,12 +1006,13 @@ class deltafor_frame
template<class PredT>
const_iterator pred_search(value_t value) const {
PredT pred;
for (auto it = begin(); it != end(); ++it) {
auto end_it = end();
for (auto it = begin(); it != end_it; ++it) {
if (pred(*it, value)) {
return it;
}
}
return end();
return end_it;
}

std::array<value_t, buffer_depth> _head{};
Expand Down Expand Up @@ -1509,12 +1510,13 @@ class deltafor_column<value_t, details::delta_xor, max_frame_size>
/// Find first value that matches the predicate
const_iterator pred_search(
value_t value, std::regular_invocable<value_t, value_t> auto pred) const {
for (auto it = this->begin(); it != this->end(); ++it) {
auto end_it = this->end();
for (auto it = this->begin(); it != end_it; ++it) {
if (pred(*it, value)) {
return it;
}
}
return this->end();
return end_it;
}
};

Expand Down Expand Up @@ -1556,14 +1558,15 @@ class deltafor_column<value_t, details::delta_delta<value_t>, max_frame_size>
}
index += it->size();
}
auto end_it = this->end();
if (it != this->_frames.end()) {
auto start = const_iterator(it, this->_frames.end(), 0, index);
for (; start != this->end(); ++start) {
for (; start != end_it; ++start) {
if (pred(*start, value)) {
return start;
}
}
}
return this->end();
return end_it;
}
};
25 changes: 18 additions & 7 deletions src/v/utils/tests/delta_for_bench.cc
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,16 @@ void append_tx_test(StoreT& store, int test_scale) {
}

template<class StoreT>
void find_test(StoreT& store) {
size_t find_test(StoreT& store) {
constexpr size_t batch = 10;
auto target = *store.last_value();
perf_tests::start_measuring_time();
auto it = store.find(*store.last_value());
perf_tests::do_not_optimize(it);
for (size_t i = 0; i < batch; i++) {
auto it = store.find(target);
perf_tests::do_not_optimize(it);
}
perf_tests::stop_measuring_time();
return batch;
}

template<class StoreT>
Expand Down Expand Up @@ -173,9 +178,11 @@ PERF_TEST(deltafor_bench, xor_column_append_tx2) {
append_tx_test(column, 4097);
}

PERF_TEST(deltafor_bench, xor_frame_find_4K) { find_test(xor_frame_4K); }
PERF_TEST(deltafor_bench, xor_frame_find_4K) { return find_test(xor_frame_4K); }

PERF_TEST(deltafor_bench, xor_column_find_4K) { find_test(xor_column_4K); }
PERF_TEST(deltafor_bench, xor_column_find_4K) {
return find_test(xor_column_4K);
}

PERF_TEST(deltafor_bench, xor_frame_at_4K) { at_test(xor_frame_4K); }

Expand Down Expand Up @@ -209,9 +216,13 @@ PERF_TEST(deltafor_bench, delta_column_append_tx2) {
append_tx_test(column, 4097);
}

PERF_TEST(deltafor_bench, delta_frame_find_4K) { find_test(delta_frame_4K); }
PERF_TEST(deltafor_bench, delta_frame_find_4K) {
return find_test(delta_frame_4K);
}

PERF_TEST(deltafor_bench, delta_column_find_4K) { find_test(delta_column_4K); }
PERF_TEST(deltafor_bench, delta_column_find_4K) {
return find_test(delta_column_4K);
}

PERF_TEST(deltafor_bench, delta_column_find_4M) { at_test(delta_column_4M); }

Expand Down