This document aims to provide instructions to create a gem5-compatible disk image containing the SPEC 2017 benchmark suite and also to provide necessary configuration files.

Building the Disk Image

Creating a disk-image for SPEC 2017 requires the benchmark suite ISO file. More info about SPEC 2017 can be found at

In this tutorial, we assume that the file cpu2017-1.1.0.iso contains the SPEC benchmark suite, and we provide the scripts that are made specifically for SPEC 2017 version 1.1.0. Throughout the this document, the root folder is src/spec-2017/. All commands should be run from the assumed root folder.

The layout of the folder after the scripts are run is as follows,

  |___ gem5/                                   # gem5 folder
  |___ disk-image/
  |      |___ shared/
  |      |___ spec-2017/
  |             |___ spec-2017-image/
  |             |      |___ spec-2017          # the disk image will be generated here
  |             |___ spec-2017.json            # the Packer script
  |             |___ cpu2017-1.1.0.iso         # SPEC 2017 ISO (add here)
  |___ configs
  |      |___ system/
  |      |___                      # gem5 run script
  |___ vmlinux-4.19.83                         # Linux kernel, link to download provided below

First, to build m5 (required for interactions between gem5 and the system under simuations):

git clone
cd gem5
cd util/m5
scons build/x86/out/m5

We use Packer, an open-source automated disk image creation tool, to build the disk image. In the root folder,

cd disk-image
wget # download the packer binary
./packer validate spec-2017/spec-2017.json # validate the Packer script
./packer build spec-2017/spec-2017.json

gem5 Configuration Scripts

gem5 scripts which configure the system and run the simulation are available in configs/. The main script expects following arguments:

usage: [-h] [-l] [-z] kernel disk cpu benchmark size

-h: show this help message and exit.

-l, --no-copy-logs: optional, to not copy SPEC run logs to the host system, logs are copied by default, and are available in the result folder.

-z, --allow-listeners: optional, to turn on GDB listening ports, the ports are off by default.

kernel: required, a positional argument specifying the path to the Linux kernel. This has been tested with version 4.19.83, available at Info on building Linux kernels can be found in src/linux-kernels.

disk: required, a positional argument specifying the path to the disk image containing SPEC 2017 benchmark suite.

cpu: required, a positional argument specifying the name of either a detailed CPU model or KVM CPU model.

The available CPU models are,

cpu Corresponding CPU model in gem5
o3 DerivO3CPU
atomic AtomicSimpleCPU
timing TimingSimpleCPU

benchmark: required, a positional argument specifying the name of the SPEC 2017 to run. Listed below are valid options:

size: required, a positional argument specifying the input data size. Valid values are test, train, and ref.

As a minimum the following parameters must be specified:

<gem5 X86 binary> --outdir <output directory> configs/ <kernel> <disk> <cpu> <mem_sys> <benchmark> <size>

Note: --outdir is a required argument when running the gem5 binary with SPEC 2006.

Working Status

Status of these benchmarks runs with respect to gem5-20, linux kernel version 4.19.83 and gcc version 7.5.0 can be found here