These artifacts contain all the tools and scripts needed to reproduce the paper’s two main result sets:
- Efficiency results (storage, area, power, access energy via CACTI)
- Performance results (end-to-end simulations via Ramulator 2)
- All commands in a glance
- System Requirements
- Directory Layout
- Efficiency Results
- Performance Results
- Citation
Assumes Python ≥ 3.8 and build tools installed (see below).
# 1) Install Python deps
python -m pip install pyyaml numpy pandas matplotlib
# 2) Efficiency (Tables 5 & 6)
cd scripts
python generate_efficiency_results.py --table5
python generate_efficiency_results.py --table6
# 3) Performance (Figures 11–13)
cd ../ramulator2 && mkdir -p _build && cd _build && cmake .. && make -j$(nproc)
cd ../../scripts
python run_experiments.py --run-artifact-all
python run_experiments.py --run-artifact-all --multi-core
python extract_results.py --figure11
python extract_results.py --figure12
python extract_results.py --figure13CHaRM itself does not add extra requirements beyond those needed by Ramulator 2. The following setup was tested.
- OS: Ubuntu 22.04.5 LTS
- gcc/g++: 12.3.0
- CMake: 3.22.1
- Python: ≥ 3.8 (tested with 3.10.12)
Python packages (install via pip):
python -m pip install pyyaml numpy pandas matplotlib.
├── ramulator2/ # Ramulator2 simulator
├── scripts/ # All orchestration & plotting scripts + CACTI
│ ├── generate_efficiency_results.py
│ ├── run_experiments.py
│ ├── extract_results.py
│ ├── cacti/ # CACTI binary, configs, and results (the generate_efficiency_results.py handles this)
│ └── results/ # Generated outputs go here
└── README.md # This file
The efficiency experiments report storage, area, power, and access energy using CACTI.
Run from the scripts/ directory:
cd scripts
python generate_efficiency_results.py --helpusage: generate_efficiency_results.py [-h] [--mitigation MITIGATION] [--athresh ATHRESH] [--table5] [--table6]
scripts to generate efficiency results
options:
-h, --help show this help message and exit
--mitigation MITIGATION
Mitigation technique(s), comma-separated. Choices: CHaRM, ABACUS, Hydra. (default: CHaRM)
--athresh ATHRESH Activaton threshold(s), comma-separated (default: 512)
--table5 generate and extract results for table 5 (default: disabled)
--table6 generate and extract results for table 6 (default: disabled)
python generate_efficiency_results.py --table5
python generate_efficiency_results.py --table6The contents of the tables will be written in the terminal.
Follow these steps to build Ramulator2, run simulations, and extract plots.
cd ramulator2
mkdir -p _build && cd _build
cmake ..
make -j$(nproc)After building, return to the root and then into scripts/.
Before starting the simulation, you need to download the required benchmarks and application traces. We use traces for three benchmark suites: SPEC CPU2017, YCSB, TPC.
Please use the artifact package on Zenodo to download the traces.
in order to extract the traces:
cd ../../scripts
tar -xzf cputraces.tar.gzOnce the traces are extracted, you are set to start the simulations, using the following script:
python run_experiments.py --helpusage: run_experiments.py [-h] [--mitigation MITIGATION] [--athresh ATHRESH] [--llc-size LLC_SIZE] [--multi-core] [--run-artifact-all]
scripts to launch simulations
options:
-h, --help show this help message and exit
--mitigation MITIGATION
Mitigation technique(s), comma-separated. Choices: NoDefence, CHaRM, ABACUS, Hydra, PARA. (default: NoDefence)
--athresh ATHRESH Activaton threshold(s), comma-separated (default: 512)
--llc-size LLC_SIZE Last Level Cache size per core in MB (default: 4) -- defined values: 1, 2, 4, 8
--multi-core Enable multi-core mode (default: disabled)
--run-artifact-all Run all the simulations for artifact evaluation (default: disabled)
Run the paper’s main experiments (Figures 11–13):
# Single-core set
python run_experiments.py --run-artifact-all
# Multi-core set
python run_experiments.py --run-artifact-all --multi-coreSimulations will be executed in batches (each batch runs all workloads for a specific mitigation and activation threshold); the scripts show the progress.
python extract_results.py --helpusage: extract_results.py [-h] [--mitigation MITIGATION] [--athresh ATHRESH] [--llc-size LLC_SIZE] [--multi-core] [--bar-plot] [--box-plot] [--figure11] [--figure12] [--figure13]
scripts to extract and generate plots of the simulation results
options:
-h, --help show this help message and exit
--mitigation MITIGATION
Mitigation technique(s), comma-separated. Choices: NoDefence, CHaRM, ABACUS, Hydra, PARA. (default: NoDefence)
--athresh ATHRESH Activaton threshold(s), comma-separated. (default: 512)
--llc-size LLC_SIZE Last Level Cache size per core in MB (default: 4)
--multi-core Enable multi-core mode (default: disabled)
--bar-plot generating a bar plot (default: disabled)
--box-plot generating a box plot (default: disabled)
--figure11 extract results for figure 11 (default: disabled)
--figure12 extract results for figure 12 (default: disabled)
--figure13 extract results for figure 13 (default: disabled)
Generate the plots for the paper figures:
python extract_results.py --figure11
python extract_results.py --figure12
python extract_results.py --figure13Plots are written under scripts/results/XXMBLLC/, where XX is the LLC size used for the simulations.
For the default 4 MB LLC:
scripts/results/4MBLLC/figure11.png
scripts/results/4MBLLC/figure12.png
scripts/results/4MBLLC/figure13.png
To cite CHaRM in research papers, use the following bibtex entry:
@inproceedings{hajiabadi_charm_2025,
title = {{CHaRM: Checkpointed and Hashed Counters for Flexible and Efficient Rowhammer Mitigation}},
booktitle = {{CCS}},
author = {Hajiabadi, Ali and Marazzi, Michele and Razavi, Kaveh},
year = {2025}
}