文章目录
本文参考
http://www.m5sim.org/Source_Code
https://blog.csdn.net/qq_40918707/article/details/105511535
ivy_reny的gem5专栏
Gem5的安装配置可以参考我的博客ubuntu18.04 配置 gem5
本文默认已经完成了GEM5的编译
Gem5
gem5提供了多种CPU模型、系统模型以及存储器模型。
- CPU模型:Atomic、Timing、In- order、O3(Out of Order)
- 系统模型:SE(System-callemulation)、FS(Full System)
- 存储模型:Classic、Ruby。
GEM5特征
1、GEM5的设计特征
面向对象、Python集成、领域特定语言DSL、标准化接口
面向对象和python集成
- GEM5用C++和python混合编写
- GEM5中所有主要的仿真单元都称为SimObject,它们使用相同的方法进行配置、初始化、统计与序列化(checkpoint)
- SimObject包括具体的硬件单元模型比如处理器核、cache、互联单元与设备,也包括更为抽象的比如负载和与之相关联的用于系统调用仿真的处理内容。
- 每个SimObject由两个类表示,一个Python类,一个C++类。Python类定义SimObject参数并进行基于脚本的配置。C++类包含了SimObject状态与剩余的行为,包括关键性能的仿真模型。
- 对于不同的组件SimObject,GEM5中使用Python进行集成,即Python负责初始化、配置和模拟控制。仿真器一开始就立即执行Python代码;标准的main()函数、命令行处理与启动代码都是用Python编写的。
领域特定语言DSL我也不是很了解
标准化接口
- 标准化接口主要是包括端口(port)接口和消息缓冲接口(message buffer)
- 端口用来连接两个内存对象(memory object)。在Classic内存系统中,端口接口连接包括CPU到cache、cache到总线、以及总线到设备和存储器的所有内存对象。
- 端口支持三种访问数据的机制,即timing、atomic和functional,以及用来确定拓扑结构和调试的接口。
- Timing模型用于建模存储器访问的时序细节,请求通过消息发送给存储系统,而响应则是通过其它消息异步地返回;
- Atomic模型用于获取时序信息,但并非基于消息,发生atomic调用(通过函数调用),同步地实现操作的状态改变,这种方式性能更高但是精度较低,因为没有对消息的互操作进行建模;
- Functional模型对模拟器状态进行更新,而并不改变任何时序信息,用于debug、系统调用仿真与初始化。
2、GEM5系统模型
GEM5支持两种不同的系统模型:SE(syscall emulation)和FS(full system)模型
SE:
- SE模型能够仿真大部分操作系统级服务,能够取得很好功能模拟加速比
- 运行独立的程序或者MP上的程序集
- 建模用户可见的ISA加上共同的系统调用
- 模拟系统调用,特别是通过调用主机OS
- 简化地址转换模型,没有调度
FS:
- FS模型模拟完整的全系统,包括OS,运行在用户态和核心态的线程调度以及各种设备。能够精确模拟系统时间等开销
- 为启动操作系统
- 建模裸硬件ÿ