Files
gem5/ext/sst/README.md
Melissa Jost eb07d3fcf4 misc: Update documentation and links for GitHub
This changes mentions of googlesource and Gerrit to instead
link to the gem5 GitHub repository, and updates the documentation
to reflect the GitHub review process.

Change-Id: I5dc1d9fcf6b96f9e5116802f938b7e3bb5b09567
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/71878
Maintainer: Bobby Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu>
2023-07-10 22:57:28 +00:00

115 lines
4.2 KiB
Markdown

# Using gem5 in an SST simulation
## Overview
This directory contains the library needed to use gem5 TimingSimpleCPU model in
an SST-driven simulation.
When compiled, the gem5 library for SST `libgem5.so` will be generated,
containing the `libgem5_*.so` as well as the gem5 Component and the
SST Responder SubComponent.
```text
On/Off-chip devs TimingSimpleCPU
^ ^ ^
| | |
v v v
==================================== [gem5::NonCoherentXBar]
^ [OutgoingRequestBridge]
gem5_system_port |
[OutgoingRequestBridge] ^ |
| |
[SSTResponder] v v [SSTResponder]
gem5 Component {SSTResponderSubComponent, SSTResponderSubComponent}
^ ^
| |
v v
================================== [SST Bus]
^
|
v
SST cache <----> SST memory
```
## Components and SubComponents
- gem5 Component has the following responsibilities,
- initializing the gem5 Python environment
- instantiating/setting-up the gem5 SimObjects as specified by the gem5
configuration
- connect every SSTResponderSubComponent to the corresponding
OutgoingRequestBridge
- handling a gem5 event queue (with all thread-synchronization barriers
removed)
- handling executions of gem5 events when it has clockTick yielded by SST
**Note:** there should only be one gem5 Component per process.
- SSTResponderSubComponent has the responsibity of receiving requests from
gem5, translating requests to an SST Request and sending it to SSTResponder.
Upon receiving a response from the memory interface, SSTResponderSubComponent
will translate the response to a gem5 Packet and send it to the its
OutgoingRequestBridge.
- SSTResponder is owned by SSTResponderSubComponent. The responder will receive
the request from the SubComponent and send it to the SST memory hierarchy.
## Installation
See `INSTALL.md`.
## Running an example simulation (RISCV)
Downloading the built bootloader containing a Linux Kernel and a workload,
```sh
wget http://dist.gem5.org/dist/develop/misc/riscv/bbl-busybox-boot-exit
```
Running the simulation
```sh
sst --add-lib-path=./ sst/example.py
```
The example SST system configuration will instantiate the gem5 system
as specified in the gem5 system configuration located at
`gem5/configs/example/sst/riscv_fs.py`. This configuration will download
the `bbl-busybox-boot-exit` resource, which contains an m5 binary, and
`m5 exit` will be called upon the booting process reaching the early userspace.
More information about building a bootloader containing a Linux Kernel and a
customized workload is available at
[https://github.com/gem5/gem5-resources/tree/stable/src/riscv-boot-exit-nodisk].
## Running an example simulation (Arm)
Download the prebuilt bootloader and Linux Kernel with embedded initramfs and
extract them under the $M5_PATH directory (make sure M5_PATH points to a valid
directory):
```sh
wget http://dist.gem5.org/dist/develop/arm/aarch-sst-20211207.tar.bz2
tar -xf aarch-sst-20211207.tar.bz2
# copying bootloaders
cp binaries/boot* $M5_PATH/binaries/
# copying Linux Kernel
cp binaries/vmlinux_exit.arm64 $M5_PATH/binaries/
```
`vmlinux_exit.arm64` contains an m5 binary, and `m5 exit` will be called upon
the booting process reaching the early userspace.
Run the simulation:
```sh
sst sst/arm_example.py
```
## Notes
- SwapReq from gem5 requires reading from memory and writing to memory.
We handle the request in SST in a way that, when SST gets the response
from memory, SST will send that response to gem5, while SST will send
a write request with modified data to memory.