This is the artifact for the paper “Scalable Address Spaces using Concurrent Interval Skiplist”, accepted to the 31st Symposium on Operating Systems Principles (SOSP '25). It includes our modified Linux kernel as well as the benchmarks used in the paper.
For the complete Linux kernel tree, please refer to this repository.
Run
cd scripts && sudo ./install-all.sh
to install all required components (requires ~65 GiB of disk space). On our 48-core machine, this process takes about 1.5 hours and performs the following steps:
- Runs
install-packages.shto install required packages.
Note: this script uses
apt-getand is compatible only with Ubuntu/Debian. For other distributions, editinstall-packages.shto use the appropriate package manager.
- Runs
install-kernels.shto install the Linux kernels used in our evaluation. This script sequentially executesinstall-linux-6.8.0.sh,install-linux-6.8.0-debug.sh,install-linux-ivm.sh, andinstall-linux-ivm-debug.sh. - Runs
install-benchmarks.shto install the benchmarks. This script sequentially executesinstall-apache.sh,install-ds_benchmark.sh,install-leveldb.sh,install-lmbench.sh,install-metis.sh,install-microbench.sh,install-psearchy.sh, andinstall-parsec-benchmark.sh.
Alternatively, you may also install components individually by running the corresponding scripts.
To reproduce the figures in the paper, first boot into one of the newly installed kernels.
The following kernels are installed by install-kernels.sh:
Linux 6.8.0— baselineLinux 6.8.0-debug— baseline with debug tools enabledLinux 6.8.0-interval-vm+— our customized kernelLinux 6.8.0-interval-vm-debug+— our customized kernel with debug tools enabled
On Ubuntu, simply run one of the set-boot-kernel-as-*.sh in scripts to set the default boot kernel, and then execute sudo reboot.
These scripts update GRUB_DEFAULT in /etc/default/grub and run sudo update-grub.
For other distributions, edit /etc/default/grub manually and add:
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10 # Gives 10 seconds to choose
This enables selecting the desired kernel at boot.
After booting into one of the new kernels, run:
./run-bench.sh
This script automatically detects the current kernel and executes the required benchmarks to produce results for the figures.
See run-bench.sh for details.
Approximate runtime on our machine:
Linux 6.8.0: 30 hoursLinux 6.8.0-interval-vm+: 24 hoursLinux 6.8.0-debug: 19 hoursLinux 6.8.0-interval-vm-debug+: 9 hours
Alternatively, you can run individual benchmarks by navigating to one of the benchmark directories (apache, ds_benchmark, leveldb, lmbench, lockstat, metis, microbench, psearchy, parsec-benchmark) and executing:
sudo python3 bench.py
Exception: When booted with Linux 6.8.0-interval-vm-debug+, use:
sudo ./bench_debug.sh
instead of sudo python3 bench.py.
Note that this script is available only in the apache and microbench directories.
After benchmarks complete, run:
python3 plot.py
in each benchmark directory to generate the plots as PDF files.
Exception: lmbench does not provide a plot.py. Instead, run:
python3 compare.py
to view results.
For each benchmark, we provide:
- a summary of its purpose,
- the kernels under which it should be run,
- the command to execute it,
- the runtime on our machine, and
- instructions for comparing the results with the figures in the paper.
All benchmark results are stored in the results directory within each benchmark's directory.
- Evaluates Apache web server using wrk with two configurations: 1) single process, 2) default.
- Run under:
Linux 6.8.0,Linux 6.8.0-interval-vm+, orLinux 6.8.0-interval-vm-debug+ - Command:
sudo python3 bench.pyforLinux 6.8.0andLinux 6.8.0-interval-vm+sudo ./bench_debug.shforLinux 6.8.0-interval-vm-debug+
- Runtime: 2.5 hours for
bench.py, 7 hours forbench_debug.sh - Compare:
apache.pdfto Fig. 15a, andresults/default_results.csvto Fig. 16.
- Evaluates data structures: maple tree (
mp) and interval skiplist (isl) across operations (Query, Alloc, Map). - Run under:
Linux 6.8.0 - Command:
sudo python3 bench.py - Runtime: 1 hour
- Compare
latency.pdfto Fig. 12a, andQuery.pdf,Alloc.pdf,Map.pdfto Fig. 12b.
- Evaluates LevelDB using
db_benchwith thereadrandombenchmark. - Run under:
Linux 6.8.0orLinux 6.8.0-interval-vm+ - Command:
sudo python3 bench.py - Runtime: 6.5 hours for
Linux 6.8.0, 1 hour forLinux 6.8.0-interval-vm+ - Compare
leveldb.pdfto Fig. 15b.
- Runs the lmbench suite multiple times.
- Run under:
Linux 6.8.0orLinux 6.8.0-interval-vm+ - Command:
sudo python3 bench.py - Runtime: 6 hours
- Compare the output of
python3 compare.pyto Fig. 13.
- Runs apache, metis, psearchy, and leveldb while using
lock_statto measurewait time / total time. - Run under:
Linux 6.8.0-debug - Command:
sudo python3 bench.py - Runtime: 24 hours
- Compare
wasted_time_graph.pdfto Fig. 1.
- Evaluates Metis Map-Reduce with the
wrmembenchmark (4GiB input). - Run under:
Linux 6.8.0orLinux 6.8.0-interval-vm+ - Command:
sudo python3 bench.py - Runtime: 3.5 hours
- Compare
metis.pdfto Fig. 15c.
- Evaluates address space operations with microbenchmarks.
- Run under:
Linux 6.8.0,Linux 6.8.0-interval-vm+, orLinux 6.8.0-interval-vm-debug+ - Command:
sudo python3 bench.pyforLinux 6.8.0andLinux 6.8.0-interval-vm+sudo ./bench_debug.shforLinux 6.8.0-interval-vm-debug+
- Runtime: 1.5 hours for
bench.py, 2 hours forbench_debug.sh - Compare
Alloc.pdfandAlloc + Fault + Modify.pdfto Fig. 14.
- Evaluates text indexing using Psearchy on the
Linux 6.8.0source tree. - Run under:
Linux 6.8.0orLinux 6.8.0-interval-vm+ - Command:
sudo python3 bench.py - Runtime: 5 hours
- Compare
psearchy.pdfto Fig. 15d.
- Evaluates the overall performance of various multithreaded applications.
- Run under:
Linux 6.8.0orLinux 6.8.0-interval-vm+ - Command:
sudo python3 bench.py - Runtime: 4 hours
- Compare
parsec.pdfto Fig. 16.
Run:
cd scripts && sudo ./uninstall-all.sh
Our artifact was evaluated in the following environment:
- Motherboard: Supermicro X11DPG-OT-CPU
- CPU: Dual-socket Intel Xeon Gold 6248R @ 3.0 GHz (48 cores)
- Memory: 384 GiB
- OS: Ubuntu 24.04.1 LTS
This artifact is distributed under GPL-2.0, except where otherwise noted. Some benchmarks are derived from prior benchmarks, which retain their original licenses. Where applicable, those licenses are included in the artifact.