| --- |
| title: SPEC 2006 |
| tags: |
| - x86 |
| - fullsystem |
| layout: default |
| permalink: resources/spec-2006 |
| shortdoc: > |
| Resources to build a disk image with the [SPEC 2006 workloads](https://www.spec.org/cpu2006/). |
| license: Proprietary SPEC License |
| --- |
| |
| This document aims to provide instructions to create a gem5-compatible disk |
| image containing the SPEC 2006 benchmark suite. It also demonstrates how to |
| simulate the SPEC CPU2006 benchmarks using an example configuration script. |
| |
| ## Building the Disk Image |
| Creating a disk-image for SPEC 2006 requires the benchmark suite ISO file. |
| More info about SPEC 2006 can be found <https://www.spec.org/cpu2006/>. |
| |
| In this tutorial, we assume that the file `CPU2006v1.0.1.iso` contains the SPEC |
| benchmark suite, and we provide the scripts that are made specifically for |
| SPEC 2006 version 1.0.1. |
| Throughout the this document, the root folder is `src/spec-2006/`. |
| All commands should be run from this root folder. |
| |
| The layout of the folder after the scripts are run is as follows, |
| |
| ``` |
| spec-2006/ |
| |___ gem5/ # gem5 folder |
| | |
| |___ disk-image/ |
| | |___ build.sh # the script downloading packer binary and building the disk image |
| | |___ shared/ |
| | |___ spec-2006/ |
| | |___ spec-2006-image/ |
| | | |___ spec-2006 # the disk image will be generated here |
| | |___ spec-2006.json # the Packer script |
| | |___ CPU2006v1.0.1.iso # SPEC 2006 ISO (add here) |
| | |
| |___ vmlinux-4.19.83 # download link below |
| | |
| |___ README.md |
| ``` |
| |
| First, to build `m5` (required for interactions between gem5 and the guest): |
| |
| ```sh |
| git clone https://gem5.googlesource.com/public/gem5 |
| cd gem5 |
| cd util/m5 |
| scons build/x86/out/m5 |
| ``` |
| |
| We use [Packer](https://www.packer.io/), an open-source automated disk image |
| creation tool, to build the disk image. |
| In the root folder, |
| |
| ```sh |
| cd disk-image |
| ./build.sh # the script downloading packer binary and building the disk image |
| ``` |
| |
| ## Simulating SPEC CPU2006 using an example script |
| |
| An example script with a pre-configured system is available in the following directory within the gem5 repository: |
| |
| ``` |
| gem5/configs/example/gem5_library/x86-spec-cpu2006-benchmarks.py |
| ``` |
| |
| The example script specifies a system with the following parameters: |
| |
| * A `SimpleSwitchableProcessor` (`KVM` for startup and `TIMING` for ROI execution). There are 2 CPU cores, each clocked at 3 GHz. |
| * 2 Level `MESI_Two_Level` cache with 32 kB L1I and L1D size, and, 256 kB L2 size. The L1 cache(s) has associativity of 8, and, the L2 cache has associativity 16. There are 2 L2 cache banks. |
| * The system has 3 GB `SingleChannelDDR4_2400` memory. |
| * The script uses `x86-linux-kernel-4.19.83` and the disk image created from following the instructions in this `README.md`. |
| * The user inputs the path to the built disk image, along with the root partition. |
| * The script then uses `CustomResource` class to use the `spec-2006` disk-image. |
| |
| The example script must be run with the `X86_MESI_Two_Level` binary. To build: |
| |
| ```sh |
| git clone https://gem5.googlesource.com/public/gem5 |
| cd gem5 |
| scons build/X86/gem5.opt -j<proc> |
| ``` |
| Once compiled, you may use the example configuration file to run the SPEC CPU2006 benchmark programs using the following command: |
| |
| ```sh |
| # In the gem5 directory |
| build/X86/gem5.opt \ |
| configs/example/gem5_library/x86-spec-cpu2006-benchmarks.py \ |
| --image <path_to_built_spec-2006_disk_image> \ |
| --partition <root_partition_to_mount> \ |
| --benchmark <benchmark_program> \ |
| --size <workload_size> |
| ``` |
| |
| Description of the four arguments, provided in the above command are: |
| * **--image** refers to the full path of the the SPEC CPU2006 disk-image, built using the instructions specified above. |
| * **--partition** refers to the root partition of the disk-image to mount. If the disk has no partitions, then pass `--partition ""`. Otherwise, pass an integer specifying the partition number. Set `--partition 1` if the above instructions to build the disk-image are followed. |
| * **--benchmark**, which refers to one of 26 benchmark programs, provided in the SPEC CPU2006 Benchmark Suite. For more information on the workloads can be found at <https://www.spec.org/cpu2006/>. The list of benchmark programs include: |
| * 401.bzip2 |
| * 403.gcc |
| * 410.bwaves |
| * 416.gamess |
| * 429.mcf |
| * 433.milc |
| * 434.zeusmp |
| * 435.gromacs |
| * 436.cactusADM |
| * 437.leslie3d |
| * 444.namd |
| * 445.gobmk |
| * 453.povray |
| * 454.calculix |
| * 456.hmmer |
| * 458.sjeng |
| * 459.GemsFDTD |
| * 462.libquantum |
| * 464.h264ref |
| * 465.tonto |
| * 470.lbm |
| * 471.omnetpp |
| * 473.astar |
| * 481.wrf |
| * 482.sphinx3 |
| * 998.specrand |
| * 999.specrand |
| * **--size**, which refers to the workload size to simulate. Valid choices for `--size` are `test`, `train` and `ref`. |
| |
| The output directory, where the simulation statistics will be redirected to, will have a new folder named `speclogs_<Day><Month><Date><Hour><Minute><Second>`. The time is of execution is appended to avoid conflicts while coping the files. The output files, generated on the disk-image in the folder `speclogs` will be copied to this aforementioned directory. |