Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 6 additions & 82 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,85 +225,7 @@ cd emt-linux-ecpt

You can find similar files in `/data/EMT/ecpt/running`.

### FPT setup

#### QEMU Setup
<!-- Clone QEMU and configure ECPT -->
<!-- ```bash
# get out of emt-linux-radix repo
cd ..;
git clone https://github.com/xlab-uiuc/qemu-emt.git qemu-fpt;
cd qemu-fpt;
git checkout execlog_addr_dump;

./configure_fpt_execlog.sh
make -j `nproc`
``` -->

```bash
# Clone QEMU repo and build with FPT softmmu support
./setup/setup_qemu_fpt.sh
```
Output folder `qemu-fpt`.

#### Linux Setup

```bash
# Clone Linux repo and build EMT-Linux with FPT (L4L3 L2L1) MMU driver
./setup/setup_linux_fpt_L4L3L2L1.sh
```
Output folder `emt-linux-fpt-L4L3L2L1`.

<!-- Clone emt-linux-fpt repo and qemu-fpt repo under the **same** folder.
```bash
# get out of QEMU repo
cd ..;

git clone https://github.com/xlab-uiuc/emt-linux.git emt-linux-fpt;
cd emt-linux-fpt;
git checkout FPT;
cp configs/general_interface_FPT_config .config;

make olddefconfig
make -j `nproc` LOCALVERSION=-gen-FPT
``` -->

#### Time to run [Est. time 2 hours]

```bash
cd emt-linux-fpt-L4L3L2L1
# dry run to print the command to execute.
# Double check architecture, thp config, image path, output directory
./run_bench.sh --arch fpt --flavor L4L3_L2L1 --thp never --out /data/EMT --dry

# real run
./run_bench.sh --arch fpt --flavor L4L3_L2L1 --thp never --out /data/EMT
```

By default FPT runs with L4L3 and L2L1 flatenned. If you wish to try L3L2 folding.

```bash
# Clone Linux repo and build EMT-Linux with FPT (L4L3 L2L1) MMU driver
./setup/setup_linux_fpt_L3L2.sh
```
Output folder `emt-linux-fpt-L3L2`.


<!-- ```bash
scripts/config --enable CONFIG_X86_64_FPT_L3L2
scripts/config --disable CONFIG_X86_64_FPT_L4L3L2L1

make -j `nproc` LOCALVERSION=-gen-FPT
``` -->

Then run benchmark with
```bash
# real run
cd emt-linux-fpt-L3L2;
./run_bench.sh --arch fpt --flavor L3L2 --thp never --out /data/EMT
```

## Procedures to Reproduce Fig 16 and Fig 20 (Appendix)
## Procedures to Reproduce Fig 16 and Fig 18

### Prequisite
Simulation Setup and Minimal Working Example
Expand All @@ -319,12 +241,14 @@ We aim to validate the following claims:

### Data Collection

Due to the long time to simulate all the benchmarks,
<!-- Due to the long time to simulate all the benchmarks,
we provide a script to run three representative benchmarks: `graphbig_bfs`, `gups`, and `redis`.
It collects data for two archictures (radix/ECPT) at two THP configurations (4KB/THP) and two application stages (running/loading)
It collects data for two archictures (radix/ECPT) at two THP configurations (4KB/THP) and two application stages (running/loading) -->

We are trying to integrate this artifact, which approached to Artifact Evaluation in OSDI'2025 and acquired all three badges (Available, Functional, and Reproduced), into the [system-intelligence-benchmark](https://github.com/sys-intelligence/system-intelligence-benchmark) to validate the its support of our artifact. For now, we only run one representative benchmark `graphbig_bfs` (one of ten available benchmarks). We provide a one-click script to run the benchmark across all configurations.

> Note (MUST READ):
> 1. The following experiment will take about 3 - 4 days to finish, please run it ahead of time.
> 1. Running `graphbig_bfs` spends several hours, please run it ahead of time. For a quick sanity check, you can run `graphbig_bfs_small`, a smaller version of `graphbig_bfs`, which typically takes only a few minutes.
> 2. Please run with tmux to avoid the script from being killed.
> 3. Please make sure `/data` is mounted with at least 500GB space.
One click run:
Expand Down
2 changes: 1 addition & 1 deletion VM-Bench
2 changes: 1 addition & 1 deletion analyze_data.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ while [[ $# -gt 0 ]]; do
echo "Error: --input requires a non-empty argument."
exit 1
fi
input_dir="$2"
input_dir=$(realpath "$2")
shift 2
;;
--ipc_stats)
Expand Down
18 changes: 9 additions & 9 deletions collect_data.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

output_dir="/data/EMT"
output_dir=$(realpath "/data/EMT")

while [[ $# -gt 0 ]]; do
key="$1"
Expand All @@ -15,7 +15,7 @@ while [[ $# -gt 0 ]]; do
echo "Error: --output requires a non-empty argument."
exit 1
fi
output_dir="$2"
output_dir=$2
shift 2
;;
*)
Expand All @@ -35,8 +35,8 @@ benchmarks=(
# "graphbig_dfs"
# "graphbig_dc"
# "graphbig_sssp"
"gups"
"redis"
# "gups"
# "redis"
)

commands=(
Expand All @@ -47,8 +47,8 @@ commands=(
# "cd rethinkVM_bench; ./run_scripts/simulation/graphbig_dfs.sh <stage>; /shutdown;"
# "cd rethinkVM_bench; ./run_scripts/simulation/graphbig_dc.sh <stage>; /shutdown;"
# "cd rethinkVM_bench; ./run_scripts/simulation/graphbig_sssp.sh <stage>; /shutdown;"
"cd rethinkVM_bench; ./run_scripts/simulation/gups.sh <stage>; /shutdown;"
"cd rethinkVM_bench/workloads; ./bin/bench_redis_st -- --recording-stage <stage>; /shutdown;"
# "cd rethinkVM_bench; ./run_scripts/simulation/gups.sh <stage>; /shutdown;"
# "cd rethinkVM_bench/workloads; ./bin/bench_redis_st -- --recording-stage <stage>; /shutdown;"
)

recording_stage=(
Expand All @@ -68,7 +68,7 @@ recording_stage_str_redis=(

thp_config=(
"never"
"always"
# "always"
)

archs=(
Expand All @@ -91,8 +91,8 @@ for arch in "${archs[@]}"; do
# fi
arch_stage_dir="${output_dir}/${arch}/${stage_str}"
file_prefix="${arch}_${thp}_${benchmark}_${stage_str}"
sudo mkdir -p $arch_stage_dir
sudo chmod 777 $arch_stage_dir
mkdir -p $arch_stage_dir
chmod 777 $arch_stage_dir

echo "./run_linux_free_cmd --arch $arch --thp $thp --cmd \"$command\" --out ${arch_stage_dir}/${file_prefix}_walk_log.bin --image ${image_path} --run-dynamorio"
if [[ $dry_run != true ]]; then
Expand Down
2 changes: 1 addition & 1 deletion ecpt_unified.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def post_process(ax, ylabel, sheetX, sheetY, datasheet, datadiv, transpose, name

ylabel2 = "Page Walk speedup"
sheetX2 = archs
sheetY2 = ["BFS", "GUPS", "Redis"]
sheetY2 = ["BFS"]
df_unified_radix_result = pd.read_csv(os.path.join(IPC_STATS_FOLDER, f'ipc_unified_{THP}_radix_result.csv'))
df_unified_ecpt_result = pd.read_csv(os.path.join(IPC_STATS_FOLDER, f'ipc_unified_{THP}_ecpt_result.csv'))
radix_page_walk_latency_4KB = df_unified_radix_result['page_walk_latency'].values
Expand Down
8 changes: 4 additions & 4 deletions ipc_with_inst.py
Original file line number Diff line number Diff line change
Expand Up @@ -454,8 +454,8 @@ def calc_running_ipc():
# "graphbig_tc",
# "graphbig_pagerank",
# "sysbench",
"gups",
"redis",
# "gups",
# "redis",
# "memcached",
# "postgres",
]
Expand Down Expand Up @@ -507,8 +507,8 @@ def calc_loading_end_ipc():
# "graphbig_tc",
# "graphbig_pagerank",
# "sysbench",
"gups",
"redis",
# "gups",
# "redis",
# "memcached",
# "postgres",
]
Expand Down
2 changes: 1 addition & 1 deletion setup/install_dependency.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y bash curl git man perl perl-doc sudo wget screen vim nano software-properties-common zip unzip tar rsync
sudo apt-get install -y python3 python3-dev python3-pip python3-venv python-is-python3
pip3 install pandas matplotlib IPython altair vl-convert-python
pip3 install pandas matplotlib IPython altair vl-convert-python --break-system-packages
sudo apt install htop
sudo apt install inkscape

Expand Down