From 080e73dd1f90163cea987ba3d3d56e3c1b7ddea7 Mon Sep 17 00:00:00 2001 From: Douglas Rumbaugh Date: Wed, 31 Jan 2024 20:57:40 -0500 Subject: Updated throughput bench to use SOSD --- benchmarks/include/data-proc.h | 14 ++++++++++++ benchmarks/insert_query_tput.cpp | 46 ++++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 21 deletions(-) (limited to 'benchmarks') diff --git a/benchmarks/include/data-proc.h b/benchmarks/include/data-proc.h index f758ed4..dbac671 100644 --- a/benchmarks/include/data-proc.h +++ b/benchmarks/include/data-proc.h @@ -10,6 +10,8 @@ #include "psu-ds/BTree.h" +#pragma once + typedef uint64_t key_type; typedef uint64_t value_type; typedef uint64_t weight_type; @@ -242,3 +244,15 @@ static bool build_delete_vec(std::vector &to_delete, std::vector &vec, siz td: return true; } + +static std::vector read_sosd_file(std::string &fname, size_t n) { + std::fstream file; + file.open(fname, std::ios::in | std::ios::binary); + + std::vector records(n); + for (size_t i=0; i @@ -20,23 +21,22 @@ typedef de::Record Rec; typedef de::ISAMTree ISAM; typedef de::irs::Query Q; typedef de::DynamicExtension Ext; +typedef de::irs::Parms QP; std::atomic inserts_done = false; -void query_thread(Ext *extension, size_t n) { +void query_thread(Ext *extension, std::vector *queries) { gsl_rng *rng = gsl_rng_alloc(gsl_rng_mt19937); - size_t range = n*.0001; + size_t total = 0; - int64_t total = 0; - - de::irs::Parms *q = new de::irs::Parms(); while (!inserts_done.load()) { - size_t start = gsl_rng_uniform_int(rng, n - range); - q->lower_bound = start; - q->upper_bound = start + range; - q->sample_size = 100; - q->rng = rng; - auto res = extension->query(q); + auto q_idx = gsl_rng_uniform_int(rng, queries->size()); + + auto q = (*queries)[q_idx]; + q.rng = rng; + q.sample_size = 1000; + + auto res = extension->query(&q); auto r = res.get(); total += r.size(); usleep(1); @@ -45,15 +45,14 @@ void query_thread(Ext *extension, size_t n) { fprintf(stderr, "%ld\n", total); gsl_rng_free(rng); - delete q; } -void insert_thread(Ext *extension, size_t n, gsl_rng *rng) { +void insert_thread(Ext *extension, size_t start, std::vector *records) { size_t reccnt = 0; Rec r; - for (size_t i=0; isize(); i++) { + r.key = (*records)[i]; + r.value = i; while (!extension->insert(r)) { usleep(1); @@ -65,22 +64,27 @@ void insert_thread(Ext *extension, size_t n, gsl_rng *rng) { int main(int argc, char **argv) { - if (argc < 3) { - fprintf(stderr, "insert_query_tput reccnt query_threads\n"); + if (argc < 5) { + fprintf(stderr, "insert_query_tput reccnt query_threads datafile queryfile\n"); exit(EXIT_FAILURE); } size_t n = atol(argv[1]); size_t qthread_cnt = atol(argv[2]); + std::string d_fname = std::string(argv[3]); + std::string q_fname = std::string(argv[4]); auto extension = new Ext(1000, 12000, 8, 0, 64); gsl_rng * rng = gsl_rng_alloc(gsl_rng_mt19937); + + auto data = read_sosd_file(d_fname, n); + auto queries = read_range_queries(q_fname, .001); /* warmup structure w/ 10% of records */ size_t warmup = .1 * n; Rec r; for (size_t i=0; iinsert(r)) { @@ -95,9 +99,9 @@ int main(int argc, char **argv) { std::vector qthreads(qthread_cnt); TIMER_START(); - std::thread i_thrd(insert_thread, extension, n - warmup, rng); + std::thread i_thrd(insert_thread, extension, warmup, &data); for (size_t i=0; i