gem5介绍

gem5是M5和GEMS结合产生的一个新的模拟器

  • 一个事件驱动的模拟器框架
  • 预定义模型集合

  • 面向对象、灵活可用
  • python语言
  • 多种CPU、ISA支持
    • GEM5支持四种不同的CPU模型:AtomicSimple,TimingSimple,In-Order,Out-Order(O3)。
  • 多处理器、多系统支持
  • 可配置CPU模型
  • 插件化的存储系统: 使用Ruby
  • 设备模型: Linux,Android
  • Boot启动真实的系统: Linux Android
  • ISAs

AtomicSimple是最简单规模的模型,一个cycle完成一条指令的执行,memory 模型比较理想化,访存操作为原子性操作。适用于快速功能模拟。

TimingSimple模拟器也是无流水线的模拟,但是使用了存储器访问时序模型,用以统计存储器访问延迟。

In-Order模型是gem5模拟的新特性,流水级为默认五级流水:取值、译码、执行、访存、写回。并且模拟了cache部件、执行部件、分支预测部件等。

O3模拟器时流水级模拟,O3模拟器模拟了乱序执行和超标量执行的指令间依赖,以及运行在多CPU上的并发执行的多线程。默认7级流水:取值、译码、重命名、发射、执行、写回、提交。模拟了物理寄存器文件、IO、LSQ、ROB功能部件池等。主要参数为流水管道间延迟、硬件线程数、IQ/LSQ/ROB项数、FU延迟、物理寄存器重命名、分支预测、访存依赖预测等。

gem5安装

# 1. 安装库文件
sudo apt-get install mercurial scons swig gcc m4 python python-dev libgoogle-perftools-dev g++ zlib1g

# 2. 下载gem5源码
hg clone http://repo.gem5.org/gem5-stable

# 3. 编译架构
cd ~/gem5-stable
# //切换至刚刚下载的gem5-stable目录
scons build/ALPHA/gem5.opt
# //编译gem5的ALPHA架构仿真

#4. SE模式下执行测试程序
cd ~/gem5-stable
# //进入gem5源码根目录
build/ALPHA/gem5.opt configs/example/se.py -c tests/test-progs/hello/bin/alpha/linux/hello

编译

  • 编译指令: scons build/<config>/<binary> -jx (x = 编译进程数)
    • 一般是_
    • ALPHA_SE Alpha syscall emulation
    • ALPHA_FS Alpha full system
    • 其他ISAs: ARM, MIPS, POWER, SPARC, X86
    • 也可以是Ruby protocol, 和自定义的configs
    • gem5.debug - debug编译, symbols tracing和assert
    • gem5.opt - 优化编译, symbols tracing assert
    • gem5.fast - 优化编译, 没有debugging symbols tracing和assertions
    • gem5.prof - gem5.fast+profiling 支持

配置和运行

仿真

build/ALPHA/gem5.opt --help

# - Usage : gem5.opt [gem5 options] script.py [script options]
# 例如

build/ALPHA/gem5.opt configs/example/se.py --cpu-type=detailed --caches --cmd=tests/test-progs/hello/bin/alpha/linux/hello

遇到的一个错误 fatal: minor must be used with caches, 解决方案是在命令中加上--caches