summaryrefslogtreecommitdiffstats
path: root/benchmarks/irs_bench.cpp
diff options
context:
space:
mode:
authorDouglas Rumbaugh <dbr4@psu.edu>2024-02-23 15:40:49 -0500
committerDouglas Rumbaugh <dbr4@psu.edu>2024-02-23 15:40:49 -0500
commit69f36c9b4f5df19f09156689b333afe29a017eed (patch)
treef908ce79c7844696b08cc52c78df3e880fa7c7e7 /benchmarks/irs_bench.cpp
parent0fcf63e9e47bae61b9f7289c157b28ec294c2e24 (diff)
downloaddynamic-extension-69f36c9b4f5df19f09156689b333afe29a017eed.tar.gz
Benchmark updates
Diffstat (limited to 'benchmarks/irs_bench.cpp')
-rw-r--r--benchmarks/irs_bench.cpp73
1 files changed, 17 insertions, 56 deletions
diff --git a/benchmarks/irs_bench.cpp b/benchmarks/irs_bench.cpp
index 49b1630..9895295 100644
--- a/benchmarks/irs_bench.cpp
+++ b/benchmarks/irs_bench.cpp
@@ -4,76 +4,32 @@
#define ENABLE_TIMER
-#include <thread>
-
#include "framework/DynamicExtension.h"
#include "shard/ISAMTree.h"
#include "query/irs.h"
#include "framework/interface/Record.h"
-#include "include/data-proc.h"
+#include "include/file_util.h"
#include <gsl/gsl_rng.h>
#include "psu-util/timer.h"
+#include "include/standard_benchmarks.h"
typedef de::Record<uint64_t, uint64_t> Rec;
-typedef de::ISAMTree<Rec> ISAM;
-typedef de::irs::Query<Rec, ISAM> Q;
-typedef de::DynamicExtension<Rec, ISAM, Q, de::LayoutPolicy::TEIRING, de::DeletePolicy::TOMBSTONE, de::SerialScheduler> Ext;
+typedef de::ISAMTree<Rec> Shard;
+typedef de::irs::Query<Rec, Shard> Q;
+typedef de::DynamicExtension<Rec, Shard, Q, de::LayoutPolicy::TEIRING, de::DeletePolicy::TOMBSTONE, de::SerialScheduler> Ext;
typedef de::irs::Parms<Rec> QP;
-void run_queries(Ext *extension, std::vector<QP> &queries, gsl_rng *rng) {
- size_t total;
- for (size_t i=0; i<queries.size(); i++) {
- auto q = &queries[i];
- q->rng = rng;
- q->sample_size = 1000;
-
- auto res = extension->query(q);
- auto r = res.get();
- total += r.size();
- }
-
- fprintf(stderr, "%ld\n", total);
-}
-
-size_t g_deleted_records = 0;
-double delete_proportion = 0.05;
-
-void insert_records(Ext *extension, size_t start,
- size_t stop,
- std::vector<int64_t> &records,
- std::vector<size_t> &to_delete,
- size_t &delete_idx,
- bool delete_records,
- gsl_rng *rng) {
- size_t reccnt = 0;
- Rec r;
- for (size_t i=start; i<stop; i++) {
- r.key = records[i];
- r.value = i;
-
- while (!extension->insert(r)) {
- usleep(1);
- }
-
- if (delete_records && gsl_rng_uniform(rng) <= delete_proportion && to_delete[delete_idx] <= i) {
- r.key = records[to_delete[delete_idx]];
- r.value = (int64_t) (to_delete[delete_idx]);
- while (!extension->erase(r)) {
- usleep(1);
- }
- delete_idx++;
- g_deleted_records++;
- }
- }
+void usage(char *progname) {
+ fprintf(stderr, "%s reccnt datafile queryfile", progname);
}
int main(int argc, char **argv) {
if (argc < 4) {
- fprintf(stderr, "irs_bench reccnt datafile queryfile\n");
+ usage(argv[0]);
exit(EXIT_FAILURE);
}
@@ -84,7 +40,7 @@ int main(int argc, char **argv) {
auto extension = new Ext(12000, 12001, 8, 0, 64);
gsl_rng * rng = gsl_rng_alloc(gsl_rng_mt19937);
- auto data = read_sosd_file(d_fname, n);
+ auto data = read_sosd_file<Rec>(d_fname, n);
std::vector<size_t> to_delete(n * delete_proportion);
size_t j=0;
for (size_t i=0; i<data.size() && j<to_delete.size(); i++) {
@@ -92,26 +48,31 @@ int main(int argc, char **argv) {
to_delete[j++] = i;
}
}
+ /* read in the range queries and add sample size and rng for sampling */
auto queries = read_range_queries<QP>(q_fname, .001);
+ for (auto q : queries) {
+ q.sample_size = 1000;
+ q.rng = rng;
+ }
/* warmup structure w/ 10% of records */
size_t warmup = .3 * n;
size_t delete_idx = 0;
- insert_records(extension, 0, warmup, data, to_delete, delete_idx, false, rng);
+ insert_records<Ext, Rec>(extension, 0, warmup, data, to_delete, delete_idx, false, rng);
extension->await_next_epoch();
TIMER_INIT();
TIMER_START();
- insert_records(extension, warmup, data.size(), data, to_delete, delete_idx, true, rng);
+ insert_records<Ext, Rec>(extension, warmup, data.size(), data, to_delete, delete_idx, true, rng);
TIMER_STOP();
auto insert_latency = TIMER_RESULT();
size_t insert_throughput = (size_t) ((double) (n - warmup) / (double) insert_latency * 1e9);
TIMER_START();
- run_queries(extension, queries, rng);
+ run_queries<Ext, QP>(extension, queries, rng);
TIMER_STOP();
auto query_latency = TIMER_RESULT() / queries.size();