/* * benchmarks/include/bench.h * * Copyright (C) 2023 Douglas Rumbaugh * * All rights reserved. Published under the Modified BSD License. * */ #pragma once #include "bench_utility.h" template static bool insert_tput_bench(DE &de_index, std::fstream &file, size_t insert_cnt, double delete_prop, std::vector &to_delete) { size_t delete_cnt = insert_cnt * delete_prop; size_t applied_deletes = 0; size_t applied_inserts = 0; std::vector insert_vec; std::vector delete_vec; insert_vec.reserve(BATCH); delete_vec.reserve(BATCH*delete_prop); size_t delete_idx = 0; bool continue_benchmark = true; size_t total_time = 0; while (applied_inserts < insert_cnt && continue_benchmark) { continue_benchmark = build_insert_vec(file, insert_vec, BATCH, delete_prop, to_delete); if (applied_deletes < delete_cnt) { build_delete_vec(to_delete, delete_vec, BATCH*delete_prop); delete_idx = 0; } if (insert_vec.size() == 0) { break; } if constexpr (PROGRESS) { progress_update((double) applied_inserts / (double) insert_cnt, "inserting:"); } auto insert_start = std::chrono::high_resolution_clock::now(); for (size_t i=0; i(insert_stop - insert_start).count(); } if constexpr (PROGRESS) { progress_update(1.0, "inserting:"); } size_t throughput = (((double) (applied_inserts + applied_deletes) / (double) total_time) * 1e9); fprintf(stdout, "%ld\t", throughput); reset_de_perf_metrics(); return continue_benchmark; } template static bool query_latency_bench(DE &de_index, std::vector queries, size_t trial_cnt=100) { char progbuf[25]; if constexpr (PROGRESS) { sprintf(progbuf, "querying:"); } size_t total_time = 0; size_t total_results = 0; for (size_t i=0; i(stop - start).count(); } progress_update(1.0, progbuf); size_t query_latency = total_time / (trial_cnt * queries.size()); fprintf(stdout, "%ld\t", query_latency); fflush(stdout); return true; } template static bool static_latency_bench(Shard *shard, std::vector queries, size_t trial_cnt=100) { char progbuf[25]; if constexpr (PROGRESS) { sprintf(progbuf, "querying:"); } size_t total_time = 0; size_t total_results = 0; for (size_t i=0; i states(1); auto start = std::chrono::high_resolution_clock::now(); for (size_t j=0; j(stop - start).count(); } progress_update(1.0, progbuf); size_t query_latency = total_time / (trial_cnt * queries.size()); fprintf(stdout, "%ld\t", query_latency); fflush(stdout); return true; }