The BLinkTree-benchmark stores 8
byte numeric keys and values.
Call ./bin/blinktree_benchmark -h
for help and parameters.
- Workload specifications are done by files in
workloads_specification/
. - Call
make ycsb-a
andmake ycsb-c
to generate workloads A and C. - Workload files are stored in
workloads/
- Use
./bin/blinktree_benchmark -f <fill-file> <mixed-file>
to pass the desired workload. - Default (if not specified) is
-f workloads/fill_randint_workloada workloads/mixed_randint_workloada
.
- The first argument is the number of cores:
./bin/blinktree_benchmark 1
for using a single core../bin/blinktree_benchmark 1:24
for using cores1
up to24
.
-i <NUMBER>
specifies the number of repetitions of each workload.-s <NUMBER>
steps of the cores:-s 1
will increase the used cores by one (core ids:0,1,2,3,4,5,6,7,..,23
).-s 2
will skip every second core (core ids:0,1,3,5,7,..23
).
-pd <NUMBER>
specifies the prefetch distance.-p
or--perf
will activate performance counter (result will be printed to console and output file).--latched
will enable latches for synchronization (default off).--exclusive
forces the tasks to access tree nodes exclusively (e.g. by using spinlocks or core-based sequencing) (default off).--sync4me
will use built-in synchronization selection to choose the matching primitive based on annotations.-o <FILE>
will write the results in json format to the given file.
After started, the benchmark will print a summary of configured cores and workload:
core configuration:
1: 0
2: 0 1
4: 0 1 2 3
workload: fill: 5m / readonly: 5m
Here, we configured the benchmark to use one to four cores; each line of the core configuration displays the number of cores and the core identifiers.
Following, the benchmark will be started and print the results for every iteration:
1 1 0 1478 ms 3.38295e+06 op/s
1 1 1 1237 ms 4.04204e+06 op/s
2 1 0 964 ms 5.18672e+06 op/s
2 1 1 675 ms 7.40741e+06 op/s
4 1 0 935 ms 5.34759e+06 op/s
4 1 1 532 ms 9.3985e+06 op/s
- The first column is the number of used cores.
- The second column displays the iteration of the benchmark (configured by
-i X
). - Thirdly, the phase-identifier will be printed:
0
for initialization phase (which will be only inserts) and1
for the workload phase (which is read-only here). - After that, the time and throughput are written.
- If
--perf
is enabled, the output will be extended by some perf counters, which are labeled (like throughput).
When using -o FILE
, the results will be written to the given file, using JSON
format.
The plot script scripts/plot_blinktree_benchmark INPUT_FILE [INPUT_FILE ...]
will aggregate and plot the results using one or more of those JSON
files.
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o optimistic.json
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p --sync4me -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o sync4me.json
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p --latched -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o rwlocked.json
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p --exclusive -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o core-sequenced.json
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p --latched --exclusive -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o spinlocked.json