blob: dfc1c8dc759dfd2fa1102c84339be9cfc6543952 [file] [log] [blame] [view]
---
title: PARSEC
tags:
- x86
- fullsystem
layout: default
permalink: resources/parsec
shortdoc: >
Resources to build a disk image with the [parsec workloads](https://parsec.cs.princeton.edu/).
author: ["Mahyar Samani"]
license: BSD-3-Clause
---
This document includes instructions on how to create an Ubuntu 18.04 disk-image with PARSEC benchmark installed. The disk-image will be compatible with the gem5 simulator.
This is how the `src/parsec-tests/` directory will look like if all the artifacts are created correctly.
```
parsec/
|___ gem5/ # gem5 folder
|
|___ disk-image/
| |___ shared/
| |___ parsec/
| |___ parsec-image/
| | |___ parsec # the disk image will be here
| |___ parsec.json # the Packer script
| |___ parsec-install.sh # the script to install PARSEC
| |___ post-installation.sh # the script to install m5
| |___ runscript.sh # script to run each workload
| |___ parsec-benchmark # the parsec benchmark suite
|
|___ configs
| |___ system # system config directory
| |___ run_parsec.py # gem5 run script
|
|___ configs-mesi-two-level
| |___ system # system config directory
| |___ run_parsec_mesi_two_level.py # gem5 run script
|
|___ README.md
```
Notice that there are two sets of system configuration directories and run scripts. For further detail on the config files look [here](#gem5-run-scripts).
## Building the disk image
In order to build the disk-image for PARSEC tests with gem5, build the m5 utility in `src/parsec-tests/` using the following:
```sh
git clone https://gem5.googlesource.com/public/gem5
cd gem5/util/m5
scons build/x86/out/m5
```
We use packer to create our disk-image. The instructions on how to install packer is shown below:
```sh
cd disk-image
wget https://releases.hashicorp.com/packer/1.6.0/packer_1.6.0_linux_amd64.zip
unzip packer_1.6.0_linux_amd64.zip
```
In order to build the disk-image first the script needs to be validated. Run the following command to validate `disk-image/parsec/parsec.json`.
```sh
./packer validate parsec/parsec.json
```
After the script has been successfuly validated you can create the disk-image by runnning:
```sh
./packer build parsec/parsec.json
```
You can find the disk-image in `parsec/parsec-image/parsec`.
## gem5 run scripts
There are two sets of run scripts and system configuration files in the directory. The scripts found in `configs` use the classic memory system while the scripts in `configs-mesi-two-level` use the ruby memory system with MESI_Two_Level cache coherency protocol. The parameters used in the both sets of experiments are explained below:
* **kernel**: The path to the linux kernel. We have verified capatibility with kernel version 4.19.83 which you can download at <http://dist.gem5.org/dist/v21-0/kernels/x86/static/vmlinux-4.19.83>. More information on building kernels for gem5 can be around in `src/linux-kernel`.
* **disk**: The path to the PARSEC disk-image.
* **cpu**: The type of cpu to use. There are two supported options: `kvm` (KvmCPU) and `timing` (TimingSimpleCPU).
* **benchmark**: The PARSEC workload to run. They include `blackscholes`, `bodytrack`, `canneal`, `dedup`, `facesim`, `ferret`, `fluidanimate`, `freqmine`, `raytrace`, `streamcluster`, `swaptions`, `vips`, `x264`. For more information on the workloads can be found at <https://parsec.cs.princeton.edu/>.
* **size**: The size of the chosen workload. Valid sizes are `simsmall`, `simmedium`, and `simlarge`.
* **num_cpus**: The number of cpus to simulate. When using `configs`, the only valid option is `1`. When using `configs-mesi-two-level` the number of supported cpus is show in the table below:
| CPU Model | Core Counts |
|-----------------|-------------|
| KvmCPU | 1,2,8 |
| TimingSimpleCPU | 1,2 |
Below are the examples of running an experiment with the two configurations.
```sh
<gem5 X86 binary> configs/run_parsec.py <kernel> <disk> <cpu> <benchmark> <size> <num_cpus>
<gem5 X86_MESI_Two_Level binary> configs-mesi-two-level/run_parsec.py <kernel> <disk> <cpu> <benchmark> <size> <num_cpus>
```
## Working Status
The working status of PARSEC runs for gem5-20 has been documented [here](https://www.gem5.org/documentation/benchmark_status/gem5-20#parsec-tests).