This project depends on confznsplusplus, which is included as a Git submodule.
Clone the repository with:
git clone --recurse-submodules <your-repo-url>
cd SilentZNS-bench
If you already cloned without submodules, run:
git submodule update --init --recursive
- CPU with support for at least 32 threads
- At least 64 GB of memory
- It is strongly recommended to run experiments on bare-metal hardware (not inside a VM) for accurate performance results
MOSEK is required for building the allocation components.
Download MOSEK from: https://www.mosek.com/downloads/
Extract it to a location of your choice, for example: /path/to/mosek
Add the following to your shell (or .bashrc):
export MOSEK_ROOT="/path/to/mosek"
export MOSEK_PLATFORM="$MOSEK_ROOT/11.0/tools/platform/linux64x86"
export MOSEKLM_LICENSE_FILE="/path/to/mosek/license/mosek.lic"
export LD_LIBRARY_PATH="$MOSEK_PLATFORM/bin:$LD_LIBRARY_PATH"
Run: ls $MOSEK_PLATFORM/bin
Navigate to the FEMU build directory:
cd confznsplusplus/build-femu
Build FEMU (if not already built):
./femu-compile.sh
Follow the steps below to prepare your virtual machine environment.
Create your VM image by following the official ConfZNS++ setup guide (recommended OS: Ubuntu 22.04):
https://github.com/BU-DiSC/confznsplusplus/tree/15f52ff88651ed3e8746da7e17f6076d3f4c0bcb?tab=readme-ov-file#installation
Inside the VM, install the required libraries:
libzbdlibnvme
Set the NVMe device scheduler to mq-deadline:
echo mq-deadline | sudo tee /sys/block/<nvme-device>/queue/scheduler
OSIMGF=/path/to/femu.qcow2
Ensure that SSH access is configured between the host and the VM. This is required for running experiments and transferring results.
Edit the top section of the script /raw-bench/run.sh:
EXP_ID=2
SSD_ID=0
PARALLEL_ZONES=8
DEVICE_PATH="/dev/nvme0n1"
HOST_BASE_DIR="/path/to/VLDB"
SSH_PORT=8080
VM_USER="your_vm_username"
VM_HOST="localhost"
EXP_ID: experiment type
0 = all
1 = interference
2 = occupancy
6 = allocation
SSD_ID: selects SSD configuration (defined in script)
DEVICE_PATH: NVMe device inside VM
Example: /dev/nvme0n1
HOST_BASE_DIR: root directory containing:
raw-bench/
confznsplusplus/
VM_USER, SSH_PORT: VM access credentials
chmod +x run.sh
./run.sh
Results are copied back to:
raw-bench/
├── exp_allocation/new_results/
├── exp_interference/results/
├── exp_occupancy/new_results/
└── exp_rw_bench/new_results/
You can generate plots with scripts from raw-bench/plotting