This is the benchmarking code used to get the results presented in the paper "Oasis: Hiding the Cost of Querying Parquet Files in the Datapath". After cloning the repository, you have to initialize the DuckDB submodule with:
git submodule update --initTo build the benchmark:
mkdir build && cd build
cmake ..
make -j
cd ..This will produce four executables:
verifyfor verification against the Parquet extension of DuckDB.throughputfor throughput benchmarks with multiple clients submitting queries to the database as fast as possible.queriesfor per-query benchmarks with operator-level breakdown of runtime.columnsfor per-column scan benchmarks that run every column of every table as a single-column query (e.g.SELECT l_orderkey FROM lineitem).
To generate TPC-H scale factor 30 as Parquet files in the directory ./data/tpch-30, execute:
./scripts/generate.py -s 30To get more options, execute with -h. The ClickBench Parquet file can be downloaded with ./scripts/download_clickbench.sh.
To put data into tmpfs on the HACC cluster (the benchmark were run on hacc-box-01 and -02 of the HACC cluster):
sudo tmpfs-create -s 32 -n 1
cp -r ./data/tpch-30 /mnt/ramdiskTo run experiments, you have to build the DuckDB extension from the Oasis repo https://github.com/celeris-labs/oasis and put it into ./extension.
Then, you have to allocate 1GB huge pages, program the FPGA, and can execute the benchmark:
sudo hdev set hugepages -g 32 -n 1
../coyote/util/program_hacc_local.sh /scratch/<nethz-user>/bitstreams/oasis/<build-dir>/cyt_top.bit ../coyote/driver/build/coyote_driver.ko
./scripts/run.shNote: You should disable verbose logging in the Coyote driver because we otherwise fill the disk with interrupt log messages.