IODA artifact includes the following components:
iodaFEMU
: IODA-enhanced SSD controlleriodaLinux
: IODA-enahnced Linux kernel (based on Linux v4.15)iodaVM
: a QEMU VM image hosting utilities to run IODA experiments
All the experiments will run inside iodaVM
, where it uses iodaLinux
as the guest OS and manages a NVMe SSD exposed by iodaFEMU
.
-
This artifact is mainly setup for reproducing
Figure 5
(and correspondinglyFigure 6
) in our submission, which contains IODA results of 9 trace workloads, each under 6 IODA modes (Base
,IOD_1
,IOD_2
,IOD_3
,IODA
, andIdeal
) -
To simplify the evaluation process, we encourage you to use our pre-compiled Linux kernel
bzImage
ofiodaLinux
(already shipped withiodaVM
) to save time. -
All the experiments are done on
Emulab D430
nodes, tested underUbuntu 16.04.1 LTS, GCC: 5.4.0
andUbuntu 20.04 LTS, GCC: 9.3.0
(recommended).- If you choose to use other types of servers, please make sure it has at least 32 cores, 64GB DRAM, and 80GB disk space, and better stick to a similar host OS environment as mentioned above.
-
Estimated time to finish all these experiments:
10-20 hours
To showcase the steps to setup and run IODA experiments, please refer to our screencast at https://asciinema.org/a/431726. We encourage you to watch the video first before following the detailed instructions below.
Setup an Emulab D430 server, ssh into it. If you don't have Emulab/CloudLab access, please let us know on hotcrp and we can help spin up a server under our account and provide you the access.
Clone the repo and download IODA VM image file:
mkdir -p ~/git
cd ~/git
git clone https://github.com/huaicheng/IODA-SOSP21-AE.git
ln -s IODA-SOSP21-AE ae
cd ae
export IODA_AE_TOPDIR=$(pwd)
cd images
./download-ioda-vm-image.sh
cd ${IODA_AE_TOPDIR}
At this point directory hierarchy should be like this:
├── build.sh # Script to build IODA
├── images
│ ├── download-ioda-vm-image.sh
│ └── ioda.qcow2 # IODA VM image
├── README.md # README with detailed instructions
├── rtk # Plotting toolkit
│ ├── all.sh
│ ├── clear.sh
│ ├── dat
│ ├── eps
│ ├── plot
│ ├── script
│ └── w.txt
├── run-vm.sh # Script to run IODA VM
├── src
│ ├── iodaFEMU # IODA-enhanced FEMU SSD controller
│ └── iodaLinux # IODA-enhanced Linux kernel (v4.15)
└── utils
├── iodaExp # Utilities to run IODA experiments in IODA VM (the VM already has it setup)
└── ioda-pkgdep.sh # Script to install IODA dependencies
$ sudo ./build.sh
This script will install IODA dependencies, and build iodaFEMU and iodaLinux. The compiled binaries are:
- iodaFEMU:
src/iodaFEMU/build-femu/x86_64-softmmu/qemu-system-x86_64
- iodaLinux:
src/iodaLinux/arch/x86/boot/bzImage
First, start IODA VM and enter the guest OS:
cd ${IODA_AE_TOPDIR}
./run-vm.sh
FEMU will start booting and keep printing output for about 30-60 seconds. Once the guest OS is up, ssh into it using the following account
username: huaicheng
password: ii
Specifically, do the following
$ ssh -p10101 huaicheng@localhost
# then input the password
Note: From now on, all the operations are done in the VM.
We provide some automation scripts in the VM to simplify the process to run the experiments:
$ cd iodaExp
$ source ioda-env.sh # setup IODA env variables
$ cd traceExp
$ ss # this will create an RAID-5 array and age the FEMU SSDs
$ source r.sh # r.sh defines several functions to run experiments in batch, check it out
# A test run, let's run a "test" workload under all IODA modes, after it finishes, the latency log files are under "sosp21-ae-rst/"
$ run_sgl_all test
# Now, to run all experiments in batch: (this will take >10hours to finish, please wait patiently)
$ run_bat_all
# After it finishes, similarly check all the raw latency logs under "sosp21-ae-rst" and use them for plotting
The rtk
contains scripts to plot the latency CDFs using gnuplot
. If the
server you use for running IODA experiments doesn't have GUI, you could
consider copying the rtk
folder to a desktop Linux machine with gnuplot
installed.
The rtk
folder contains the latency percentile data used in the paper. To
replot the graph, simply run cd rtk; gnuplot plot/all.plt
. The output
figure is eps/all.eps
.
After you have finished all the experiments, first copy out the corresponding
read latency log files to rtk/raw/xxx
. For example, copy
tpcc-{base,iod1,iod2,iod3,ioda,ideal}-rd_lat.log
from the IODA VM to
rtk/raw/tpcc/tpcc-{base,iod1,iod2,iod3,ioda,ideal}.log
. Then, run cd rtk; ./all.sh tpcc
to refresh the percentile data. Repeat this step for all
the workloads. Then, gnuplot plot/all.plt
again to generate the final
figure.
Check eps/all.eps
for the new results.