# samainsworth/gem5-triangel architecture

> Architecture diagram of the GitHub repository samainsworth/gem5-triangel, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/samainsworth/gem5-triangel
- Repository: https://github.com/samainsworth/gem5-triangel
- Video tour (about a minute): https://gitdiagram.com/samainsworth/gem5-triangel/video

## Overview

This repository is an artefact for reproducing Triangel temporal-prefetcher experiments using a modified gem5 simulator. The documented workflow prepares SPEC workloads and checkpoints, runs simulations with selected CPU, cache, memory, and prefetcher settings, then analyzes results against reported metrics. The graph preserves those documented stages and capabilities; run scripts, checkpoint-generation implementation, analysis internals, and the Triangel/Triage source paths are not present in the supplied tree, so their paths and uncertain internal wiring are left unspecified.

Main entry points: [`configs/common/Simulation.py`](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/Simulation.py) (Simulation orchestration), [`src/base/stats/storage.cc`](https://github.com/samainsworth/gem5-triangel/blob/stable/src/base/stats/storage.cc) (Simulation statistics), [`configs/common/CpuConfig.py`](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/CpuConfig.py) (CPU selection), [`configs/common/CacheConfig.py`](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/CacheConfig.py) (Cache configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Workload inputs"]
  node_spec["SPEC CPU2006"]
  node_checkpointing["Checkpoint generation"]
  node_checkpoints[("KVM checkpoints")]
  node_diskimage["Ubuntu disk image"]
end

subgraph group_simconfig["Simulation configuration"]
  node_cpu["CPU selection<br/>[CpuConfig.py]"]
  node_caches["Cache configuration<br/>[CacheConfig.py]"]
  node_memory["Memory configuration<br/>[MemConfig.py]"]
  node_simulation["Simulation orchestration<br/>[Simulation.py]"]
  node_ruby["Ruby protocols<br/>[Ruby.py]"]
end

subgraph group_runtime["Simulator runtime"]
  node_prefetch["Triangel prefetcher"]
  node_triage["Triage prefetcher"]
  node_gem5["Modified gem5"]
end

subgraph group_evaluation["Result evaluation"]
  node_simstats["Simulation statistics<br/>[storage.cc]"]
  node_analysis["Experiment analysis"]
  node_metrics["Reported metrics"]
end

node_researcher(("Experimenter"))

node_researcher -->|"prepares workloads"| node_spec
node_spec -->|"runs in"| node_checkpointing
node_researcher -->|"generates checkpoints"| node_checkpointing
node_checkpointing -->|"writes"| node_checkpoints
node_researcher -->|"starts experiments"| node_simulation
node_checkpoints -->|"restores from"| node_simulation
node_diskimage -->|"provides guest OS"| node_simulation
node_simulation -->|"configures"| node_cpu
node_simulation -->|"configures"| node_caches
node_simulation -->|"configures"| node_memory
node_simulation -->|"configures"| node_ruby
node_simulation -->|"runs"| node_gem5
node_gem5 -->|"supports"| node_prefetch
node_gem5 -->|"supports"| node_triage
node_gem5 -->|"records"| node_simstats
node_simstats -->|"supplies results"| node_analysis
node_analysis -->|"computes"| node_metrics
node_researcher -->|"validates results"| node_analysis

click node_cpu "https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/CpuConfig.py"
click node_caches "https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/CacheConfig.py"
click node_memory "https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/MemConfig.py"
click node_simulation "https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/Simulation.py"
click node_ruby "https://github.com/samainsworth/gem5-triangel/blob/stable/configs/ruby/Ruby.py"
click node_simstats "https://github.com/samainsworth/gem5-triangel/blob/stable/src/base/stats/storage.cc"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_spec,node_checkpointing,node_checkpoints,node_diskimage toneBlue
class node_cpu,node_caches,node_memory,node_simulation,node_ruby toneAmber
class node_prefetch,node_triage,node_gem5 toneMint
class node_simstats,node_analysis,node_metrics toneRose
class node_researcher toneIndigo
```

## Components

### Workload inputs

- **SPEC CPU2006**
- **Checkpoint generation**
- **KVM checkpoints**
- **Ubuntu disk image**

### Simulation configuration

- [CPU selection](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/CpuConfig.py): `configs/common/CpuConfig.py`
- [Cache configuration](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/CacheConfig.py): `configs/common/CacheConfig.py`
- [Memory configuration](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/MemConfig.py): `configs/common/MemConfig.py`
- [Simulation orchestration](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/common/Simulation.py): `configs/common/Simulation.py`
- [Ruby protocols](https://github.com/samainsworth/gem5-triangel/blob/stable/configs/ruby/Ruby.py): `configs/ruby/Ruby.py`

### Simulator runtime

- **Triangel prefetcher**
- **Triage prefetcher**
- **Modified gem5**

### Result evaluation

- [Simulation statistics](https://github.com/samainsworth/gem5-triangel/blob/stable/src/base/stats/storage.cc): `src/base/stats/storage.cc`
- **Experiment analysis**
- **Reported metrics**

### Other components

- **Experimenter**

## Connections

- Experimenter → SPEC CPU2006: prepares workloads
- SPEC CPU2006 → Checkpoint generation: runs in
- Experimenter → Checkpoint generation: generates checkpoints
- Checkpoint generation → KVM checkpoints: writes
- Experimenter → Simulation orchestration: starts experiments
- KVM checkpoints → Simulation orchestration: restores from
- Ubuntu disk image → Simulation orchestration: provides guest OS
- Simulation orchestration → CPU selection: configures
- Simulation orchestration → Cache configuration: configures
- Simulation orchestration → Memory configuration: configures
- Simulation orchestration → Ruby protocols: configures
- Simulation orchestration → Modified gem5: runs
- Modified gem5 → Triangel prefetcher: supports
- Modified gem5 → Triage prefetcher: supports
- Modified gem5 → Simulation statistics: records
- Simulation statistics → Experiment analysis: supplies results
- Experiment analysis → Reported metrics: computes
- Experimenter → Experiment analysis: validates results
