mirror of
https://github.com/mmueller41/mxtasking.git
synced 2026-01-21 12:42:57 +01:00
BLinkTree Benchmark
The BLinkTree-benchmark stores 8 byte numeric keys and values.
Call ./bin/blinktree_benchmark -h for help and parameters.
How to generate YCSB workload
- Workload specifications are done by files in
workloads_specification/. - Call
make ycsb-aandmake ycsb-cto 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.
Important CLI arguments
- The first argument is the number of cores:
./bin/blinktree_benchmark 1for using a single core../bin/blinktree_benchmark 1:24for using cores1up to24.
-i <NUMBER>specifies the number of repetitions of each workload.-s <NUMBER>steps of the cores:-s 1will increase the used cores by one (core ids:0,1,2,3,4,5,6,7,..,23).-s 2will skip every second core (core ids:0,1,3,5,7,..23).
-pd <NUMBER>specifies the prefetch distance.-por--perfwill activate performance counter (result will be printed to console and output file).--latchedwill enable latches for synchronization (default off).--exclusiveforces the tasks to access tree nodes exclusively (e.g. by using spinlocks or core-based sequencing) (default off).--sync4mewill 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.
Understanding the output
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:
0for initialization phase (which will be only inserts) and1for the workload phase (which is read-only here). - After that, the time and throughput are written.
- If
--perfis enabled, the output will be extended by some perf counters, which are labeled (like throughput).
Plot the results
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.
Examples
Running workload A using optimistic synchronization
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o optimistic.json
Running workload A using best matching synchronization
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p --sync4me -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o sync4me.json
Running workload A using reader/writer-locks
./bin/blinktree_benchmark 1: -s 2 -i 3 -pd 3 -p --latched -f workloads/fill_randint_workloada workloads/mixed_randint_workloada -o rwlocked.json
Running workload A using core-based sequencing
./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
Running workload A using spin-locks
./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