什么是gem5?
gem5是一个模块化的离散事件驱动的计算机系统模拟器平台。这意味着:
- GEM5 的组件可以轻松重新排列、参数化、扩展或更换,以满足您的需求。
- 它将时间的流逝模拟为一系列离散事件。
- 它的预期用途是以各种方式模拟一个或多个计算机系统。
- 它不仅仅是一个模拟器;它是一个模拟器平台,可让您使用任意数量的预制组件来构建自己的模拟系统。
gem5 主要用 C++ 和 Python 编写,大多数组件都是在 BSD 风格的许可证下提供的。 它可以模拟一个完整的系统,其中设备和操作系统处于完整系统模式(FS 模式),或者仅用户空间程序,其中系统服务由模拟器在系统调用仿真模式(SE 模式)下直接提供。 对在 CPU 模型上执行 Alpha、ARM、MIPS、Power、SPARC、RISC-V 和 64 位 x86 二进制文件有不同级别的支持,包括两个简单的单个 CPI 模型、一个无序模型和一个按顺序流水线模型。 内存系统可以灵活地构建为缓存和横杆,也可以使用Ruby模拟器来构建,后者提供了更灵活的内存系统建模。
gem5 模拟器是用于计算机系统架构研究的模块化平台,包括系统级架构和处理器微架构。gem5 是一个社区主导的项目,采用开放式治理模式。
gem5 最初是为学术界的计算机体系结构研究而设计的,但它已经发展到学术界、工业界研究和教学的计算机系统设计中使用。
1.git仓库clone
当您在当前代码库之上构建新模型和新功能时,gem5 模拟器对于研究最有用。 因此,使用 gem5 的最常见方法是下载源代码并自行构建。
要下载 gem5,您可以使用 git 检出到当前稳定的分支。 如果你不熟悉版本控制或 git,git 书(免费在线提供)是了解有关 git 的更多信息并更习惯使用版本控制的好方法。 gem5 的规范版本托管在 GitHub 上。
git clone https://github.com/gem5/gem5
克隆源码后,可以使用 scons 构建 gem5。
2.Scon安装
scons是一个Python写的自动化构建工具,和GNU make相比优点明显:
1、 移植性:python能运行的地方,就能运行scons
2、 扩展性:理论上scons只是提供了python的类,scons使用者可以在这个类的基础上做所有python能做的事情。比如想把一个已经使用了Makefile大型工程切换到scons,就可以保留原来的Makefile,并用python解析Makefile中的编译选项、源/目标文件等,作为参数传递给scons,完成编译。
3、 智能:Scons继承了autoconf/automake的功能,自动解析系统的include路径、typedef等;“以全局的观点来看所有的依赖关系”
pip install scons # 最新版本
pip install scons==4.0.1 # 指定版本
pip install 'scons>=4.0.1' # 最小版本
3.编译gem5
构建 gem5 可能需要几分钟的时间,在大型服务器上需要几分钟,在笔记本电脑上需要 45 分钟。 gem5 必须建立在 Unix 平台上。 Linux 在每次提交时都会进行测试,有些人也能够使用 MacOS,尽管它没有定期测试。 强烈建议在虚拟机上运行时不要尝试编译 gem5。 在笔记本电脑上使用 VM 运行时,gem5 可能需要一个多小时才能编译。 构建 gem5 提供了有关构建 gem5 及其依赖关系的更多详细信息。
cd gem5
scons build/X86/gem5.opt -j <NUMBER OF CPUs ON YOUR PLATFORM>
至此gem5编译完成。
4.示例运行
现在您已经有了 gem5 二进制文件,您可以运行您的第一个模拟了! gem5 的接口是 Python 脚本。 gem5 二进制文件读取并执行提供的 Python 脚本,该脚本创建被测系统并执行模拟器。 在此示例中,脚本创建了一个非常简单的系统,并执行“hello world”二进制文件。 有关该脚本的更多信息,请参阅 Learning gem5 书籍的“简单配置”一章。
build/X86/gem5.opt configs/learning_gem5/part1/simple.py
运行此命令后,您将看到 gem5 的输出!