This repository contains the artifact for reproducing our SOSP'25 paper "Aeolia: Fast and Secure Userspace Interrupt-Based Storage Stack".
The experimental results of Aeolia mainly include two parts: AeoDriver related experiment and AeoFS related experiment.
|---- Aeolia-src (The source code of Aeolia)
|---- AeoDriver
|---- AeoFS
|---- AeoTrusted
|---- benchmarks (Source code of workload applications)
|---- kernel
|---- aeolia-kernel-orig-6.12 (The original linux 6.12 kernel)
|---- aeolia-kernel-uintr (Modified linux 6.12 kernel supporting UINTR)
|---- scripts (Main evaluation scripts)
|---- scripts-driver (Script for driver experiment)
|---- scripts-fs (Script for fs experiment)
|---- dep.sh (Scripts to install dependency)
Aeolia requires an Intel CPU with the UINTR feature (Intel Xeon 4th Gen or later). The Linux kernel needs to be customized to support UINTR. Please refer to the eval-motivation README for instructions on replacing the kernel. Additionally, since some experiments require temporary modifications to the kernel code, it is highly recommended to use a dedicated server. The server used for the experiments in the paper is configured with 1000 GB of memory and an Optane SSD 5800X.
$ ./dep.sh
- Clone this repo first :
git clone [email protected]:TELOS-syslab/Aeolia.git
export LOCAL_AE_DIR=$(pwd)
echo "export LOCAL_AE_DIR=$(pwd)" >> ~/.bashrc
# change bashrc to other profiles you use.Note that the NVMe-related variables in Aeolia/AeoDriver/scripts/env.sh should be replaced by your setup.
1.2.1 Origin kernel
revert to the origin 6.12 kernel
bash ./scripts/scripts-driver/build_1.sh && sudo reboot
# after reboot, then
bash ./scripts/scripts-driver/eval-baseline.sh # this evaluation will take around 1.5 hours1.2.2 Aeolia
Change kernel to Aeolia Kernel
# this shell will call a menuconfig, please enable the userinterrupt (UINTR) in the main menu, and SCHED_CLASS_EXT (location: General setup -> Extensible Scheduling Class)
bash ./scripts/scripts-driver/build_2.sh && sudo reboot
# after reboot, then
bash ./scripts/scripts-driver/eval-aeolia.sh # this evaluation will take around 45 minutes
bash ./scripts/scripts-driver/fig.shGenerated figures could be found in directory Aeolia-src/AeoDriver/fig/
cd ${LOCAL_AE_DIR}/kernel/aeolia-kernel-uintr
cp /boot/config-$(uname -r) ./.config
sudo make olddefconfig
# please enable UINTR on the main menu, it's called User Interrupts (UINTR)
sudo make menuconfig
sudo make -j$(nproc)
sudo make modules_install -j$(nproc)
sudo make install
# enter the scripts folder
cd ${LOCAL_AE_DIR}/scripts/scripts-fs# build the aeolia system under kernel w/ uintr
sudo -E bash figure14.sh
sudo -E bash figure15.shsudo -E bash figure16.sh
sudo -E bash figure18.shsudo -E bash table7.shsudo python3 clean_data.py
# Table 7 in table7/leveldb_performance.csv
sudo python3 plot_fs_single_thread.py # figure 14
sudo python3 plot_fs_multi_threads.py # figure 15
sudo python3 plot_fs_fxmark.py # figure 16
sudo python3 plot_fs_filebench.py # figure 18