Victima: Drastically Increasing Address Translation Reach by Leveraging Underutilized Cache Resources
This repository provides all the necessary files and instructions to reproduce the results of our MICRO '23 paper.
Konstantinos Kanellopoulos, Hong Chul Nam, F. Nisa Bostanci, Rahul Bera, Mohammad Sadrosadati, Rakesh Kumar, Davide-Basilio Bartolini, Onur Mutlu "Victima: Drastically Increasing Address Translation Reach by Leveraging Underutilized Cache Resources ", MICRO'23. Paper PDF
Please use the following citation to cite Victima if the repository is useful for you.
@inproceedings{kanellopoulos2023victima,
title={{Victima: Drastically Increasing Address Translation Reach by Leveraging Underutilized Cache Resources}},
author={Konstantinos Kanellopoulos, Hong Chul Nam, F. Nisa Bostanci, Rahul Bera, Mohammad Sadrosadati, Rakesh Kumar, Davide-Basilio Bartolini and Onur Mutlu},
year={2023},
booktitle={MICRO}
}
Structure of the repo:
-
Hardware Requirements
- Container images, infrastructure, and hardware details.
-
Software Requirements
- Container images and included software.
-
Software Requirements for Containerized Execution
- Software and installation instructions.
-
Launching Experiments
- Commands for reproducing figures and tables.
-
Parsing Results and Plot Creation
- Location of results and plot creation commands.
-
Reusability using MLCommons
- MLCommons interface support and evaluation instructions.
- We will be using docker images to execute the experiments. All docker images have been created for X86-64 architectures so you need an X86-64 system.
- The experiments have been executed using a slurm based infrastructure. We strongly suggest executing the experiments using such an infrastructure.
- Each experiments takes ~5-10 hours to finish and requires about ~5-13GB of free memory.
- The dataset we used requires ~10GB of storage space.
Hardware infrastructure used:
1) Nodes used: Intel(R) Xeon(R) Gold 5118 CPU @ 2.30GHz
2) Slurm version: slurm-wlm 21.08.5
We have prepared container images which are uploaded publicly in Docker hub under the tags:
#Contains all the simulator dependencies
1. kanell21/artifact_evaluation:victima
#Contains all python dependencies to reproduce the results of Table 2 and create all the plots
2. kanell21/artifact_evaluation:victima_ptwcp_v1.1
These images contain all the necessary software to run the experiments such as:
- Sniper simulator dependencies
- Python dependencies for Pytorch, Matplotlib, Seaborn etc.
We need:
- Docker/Podman
- curl
- tar
- Debian-based Linux distribution
We used the following versions/distributions in our experiments:
- Docker version 20.10.23, build 7155243
- Podman 3.4.4
- curl 7.81.0
- tar (GNU tar) 1.34
- Kernel: 5.15.0-56-generic
- Dist: Ubuntu SMP 22.04.1 LTS (Jammy Jellyfish)
To install docker/podman execute the following script:
kanellok@safari:~/Victima$ sh install_container.sh docker
or
kanellok@safari:~/Victima$ sh install_container.sh podman
You need to cd back to the cloned repository since we executed:
su - $USER
to refresh the permissions.
1. Execute all the experiments of Victima to reproduce the figures of
the paper
2. Reproduce Table 2 which requires Neural Network inference
If your infrastructure supports Slurm:
kanellok@safari:~/$ cd Victima
kanellok@safari:~/Victima$ sh artifact.sh --slurm docker #(or podman)
If you need to run without a job manager (which we do not recommend)
kanellok@safari:~/$ cd Victima
kanellok@safari:~/Victima$ sh artifact.sh --native docker #(or podman)
1. Installs dependencies and Docker/Podman
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \sc
lsb-release \
tar
# Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
2. Downloads the container image to run the experiments
docker/podman pull docker.io/kanell21/artifact_evaluation:victima
3. Compiles the simulator
docker/podman run --rm -v $PWD:/app/ docker.io/kanell21/artifact_evaluation:victima /bin/bash -c "cd /app/sniper && make clean && make -j4"
4. Creates a ./jobfile with all the slurm commands and decompresses the traces
docker/podman run --rm -v $PWD:/app/ kanell21/artifact_evaluation:victima python /app/scripts/launch_jobs.py
tar -xzf traces.tar.gz
#!/bin/bash
sbatch -J tlb_base_ideal_bc --output=./results/tlb_base_ideal_bc.out --error=./results/tlb_base_ideal_bc.err docker_wrapper.sh "docker run --rm -v /mnt/panzer/kanellok/victima_ae:/app/ kanell21/artifact_evaluation:victima /app/sniper/run-sniper -s stop-by-icount:500000000 --genstats --power -d /app/results/tlb_base_ideal_bc -c /app/sniper/config/virtual_memory_configs/radix.cfg -g --perf_model/stlb/size=1536 -g --perf_model/stlb/associativity=12 -g --perf_model/tlb/l2_access_penalty=12 --traces=/app/traces/bc.sift"
sbatch -J tlb_base_ideal_bc --output=./results/tlb_base_ideal_bc.out --error=./results/tlb_base_ideal_bc.err docker_wrapper.sh "docker run --rm -v /mnt/panzer/kanellok/victima_ae:/app/ kanell21/artifact_evaluation:victima /app/sniper/run-sniper -s stop-by-icount:500000000 --genstats --power -d /app/results/tlb_base_ideal_bc -c /app/sniper/config/virtual_memory_configs/radix.cfg -g --perf_model/stlb/size=1536 -g --perf_model/stlb/associativity=12 -g --perf_model/tlb/l2_access_penalty=12 --traces=/app/traces/bc.sift"
..
5. Submits the experiments to slurm
source jobfile
6. Runs the neural network inference experiments and outputs Table 2 in
``` bash
docker pull kanell21/artifact_evaluation:victima_ptwcp_v1.1
docker run kanell21/artifact_evaluation:victima_ptwcp_v1.1
All the results of the experiments are stored under ./results.
Execute the following command to:
1. Parse the results of the experiments. All the results in tabular
format can be found under:
/Victima/plots_in_tabular.txt
2. Create all the plots of the paper. All the plots can be found under:
/Victima/plots/
3. Create csv with Table 2 under:
/Victima/plots/table2.csv
kanellok@safari:~/victima_artifact$ sh ./scripts/produce_plots.sh docker #(or podman)
1. Creates a CSV file which contains all the raw results
docker/podman run --rm -v $PWD:/app/ docker.io/kanell21/artifact_evaluation:victima_ptwcp_v1.1 python3 /app/scripts/create_csv.py
If one of the jobs is still running, the scripts/list_of_experiments.py
gets invoked to print the status of the jobs ( Experiment name, Status {Running,Completed}, Time ) and informs about how many have been completed and how many are still running. The create_csv.py exits if all the jobs are not completed.
2. Creates all the plots under ./plots and outputs all plots in tabular format in ./plots_in_tabular.txt
docker/podman run --rm -v $PWD:/app/ docker.io/kanell21/artifact_evaluation:victima_ptwcp_v1.1 python3 /app/scripts/create_plots.py > plots_in_tabular.txt
We added support to evaluate Victima using the MLCommons CM automation language.
Make sure you have install CM. Follow this guide to install it.
Next install reusable MLCommons automations:
cm pull repo mlcommons@ck
Pull this repository via CM:
cm pull repo CMU-SAFARI@Victima
The core CM script for Victima will be available under /CM/repos/CMU-SAFARI@Victima/script/reproduce-micro-2023-paper-victima
It is described by _cm.yaml
and several native scripts.
Perform the following steps to evaluate Victima with MLCommons CM automation language:
- This command will install system dependencies for Docker and require sudo (skip it if you have Docker installed):
cmr "reproduce micro 2023 victima _install_deps"
- This command will prepare and run all experiments via Docker:
cmr "reproduce micro 2023 victima _run"
You can specify --job_manager and --container if needed:
cmr "reproduce micro 2023 victima _run" --job_manager=native|slurm --contianer=docker|podman
- In case of successful execution of a previous command, this command will generate plots to help you validate results from the article:
cmr "reproduce micro 2023 victima _plot"
The CM scripts for Victima will be available under /CM/repos/CMU-SAFARI@Victima/script/
script
|_install_dep |_produce-plots |_run-experiments
Perform the following steps to evaluate Victima with MLCommons:
- This command will install system dependencies for Docker/Podman and require sudo (skip it if you have Docker/Podman installed):
cm run script micro-2023-461:install_dep --env.CONTAINER_461="docker" #(or "podman")
- This command will prepare and run all experiments via the container:
#For slurm-based execution:
cm run script micro-2023-461:run-experiments --env.EXEC_MODE_461="--slurm" --env.CONTAINER_461="docker" #(or "podman")
#For native execution:
cm run script micro-2023-461:run-experiments --env.EXEC_MODE_461="--native" --env.CONTAINER_461="docker" #(or "podman")
- In case of successful execution of the previous command, this command will generate the the plots of the paper:
cm run script micro-2023-461:produce-plots --env.CONTAINER_461="docker" #(or "podman")