/* * */ #define ENABLE_TIMER #include #include "framework/DynamicExtension.h" #include "shard/ISAMTree.h" #include "query/rangecount.h" #include "framework/interface/Record.h" #include #include "psu-util/timer.h" typedef de::Record Rec; typedef de::ISAMTree ISAM; typedef de::rc::Query Q; typedef de::DynamicExtension Ext; std::atomic inserts_done = false; void query_thread(Ext *extension, size_t n) { gsl_rng *rng = gsl_rng_alloc(gsl_rng_mt19937); size_t range = n*.0001; de::rc::Parms *q = new de::rc::Parms(); while (!inserts_done.load()) { size_t start = gsl_rng_uniform_int(rng, n - range); q->lower_bound = start; q->upper_bound = start + range; auto res = extension->query(q); auto r = res.get(); usleep(100); } gsl_rng_free(rng); delete q; } void insert_thread(Ext *extension, size_t n, gsl_rng *rng) { size_t reccnt = 0; Rec r; for (size_t i=0; iinsert(r)) { usleep(1); } } inserts_done.store(true); } int main(int argc, char **argv) { if (argc < 3) { fprintf(stderr, "insert_query_tput reccnt query_threads\n"); exit(EXIT_FAILURE); } size_t n = atol(argv[1]); size_t qthread_cnt = atol(argv[2]); auto extension = new Ext(1000, 12000, 8); gsl_rng * rng = gsl_rng_alloc(gsl_rng_mt19937); /* warmup structure w/ 10% of records */ size_t warmup = .1 * n; Rec r; for (size_t i=0; iinsert(r)) { usleep(1); } } extension->await_next_epoch(); TIMER_INIT(); std::vector qthreads(qthread_cnt); TIMER_START(); std::thread i_thrd(insert_thread, extension, n - warmup, rng); for (size_t i=0; i