GEM5仿真器(概要)

来源:互联网 发布:unity3d摄像机自动缩放 编辑:程序博客网 时间:2024/05/22 01:28
GEM5是一款模块化的离散事件驱动全系统模拟器,它结合了M5(多处理器模拟器)和GEMS(存储层次模拟器)中最优秀的部分,是一款高度可配置、集成多种ISA和多种CPU模型的体系结构模拟器。GEM5已经能够支持多种商用ISA,包括X86、ARM、ALPHA、MIPS、Power、SPARC等,并且能够在X86、ARM、ALPHA上加载LINUX操作系统。
1.GEM5的灵活性
设计思想从高层概念变成具体设计的过程中,架构工程师需要一种能够在多个细节层次上实现系统的工具,从而平衡仿真速度与精确度的关系。GEM5通过提供多种CPU模型、系统模型以及存储器模型以实现这种灵活性。
CPU模型:AtomicSimple、TimingSimple、In-order、O3(Out of Order)
系统模型:SE(System-call Emulation)、FS(Full System)

存储器模型:Classic、Ruby

2.设计特性
①全面地面向对象设计
GEM5中所有主要的仿真单元都称为SimObject,它们使用相同的方法进行配置、初始化、统计与序列化(检查点)。SimObject包括具体的硬件单元模型比如处理器核、cache、互联单元与设备,也包括更为抽象的比如负载和与之相关联的用于系统调用仿真的处理内容。
每个SimObject用1个Python类与1个C++类表示。Python类定义SimObject参数并进行基于脚本的配置。C++类包含了SimObject状态与剩余的行为,包括关键性能的仿真模型。
②Python集成
Python提供初始化、配置与仿真控制。仿真器一开始就立即执行Python代码;标准的main()函数、命令行处理与启动代码都是用Python编写的。

③面向范围语言(DSL)
对于特定的任务,DSL使用相同风格表达多种解法。GEM5两种DSL:ISA DSL(继承自M5)与Cache一致性DSL(继承自GEMS)。
ISA DSL统一了二进制指令的编码与各种ISA的语法说明。CPU模型用共同的C++基类来描述指令以实现与多种ISA的无关性。ISA DSL帮助我们以一种简洁的方式实现需要的C++代码。从而支持多种ISA,比如Alpha、x86、SPARC。
Cache一致性DSL,即SLICC(继承自GEMS),用于实现多种cache一致性协议。SLICC定义cache、存储器与DMA控制器为存储块状态机一起组成了整个协议。通过用高层语言定义控制逻辑来使得不同协议能够使用相同的底层状态机,这样减少了编程工作量。GEM5版本的SLICC与GEMS版本十分相似,将协议定义为状态、事件、交易与动作的集合。所不同的是该语言由Python编写而非C++,所有配置参数被设为输入参数并由SLICC自动产生合适的C++与Python文件,此外允许局部变量以简化编程与提升性能。

④标准接口
有2种接口:端口接口与消息缓冲接口
端口接口用于连接两个存储对象。端口支持三种访问数据机制(timing、atomic、functional)。在Classic存储系统中,端口接口连接包括CPU到cache、cache到bus、bus到设备与存储器。Timing模型用于建模存储器访问的时序细节,请求通过消息发送给存储系统,也期望通过消息异步地收到响应;Atomic模型用于获取时序信息,但并非基于消息,发生atomic调用(通过函数调用),同步地实现操作的状态改变;Functional模型并不改变任何时序信息而改变仿真器状态,用于debug、系统调用仿真与初始化。
Ruby利用端口接口连接CPU与设备并在Ruby对象之间增加消息缓冲。

3.仿真能力
能够进行多种ISA、CPU模型、一致性协议、互联网络、设备与多系统的仿真。
ISA。包括Alpha、ARM、MIPS、Power、SPARC与x86。
执行模型。运行于2种模式:系统调用仿真(SE)与完全系统(FS)。SE模式,GEM5仿真大部分共同的系统调用(比如read())。FS模式,GEM5仿真足以运行操作系统的环境。
CPU模型。包括AtomicSimple、TimingSimple、In-order、O3(Out of Order)。 AtomicSimple、TimingSimple是无流水线的CPU模型,在每个周期进行取指、译码、执行与完成单指令。但是TimingSimple模型建模了存储访问时序。 In-order强调指令时序与仿真精度,拥有有序流水线。O3模拟了乱序执行与超标量执行架构中指令间的依赖,以及运行在多CPU中并发执行的多个线程。
Cache一致性协议。SLICC使得GEM5的Ruby存储模型实现多种不同的基于失效的Cache一致性协议。

互联网络。Ruby存储模型支持庞大阵列的互联拓扑,包括两个不同的网络模型:Simple网络与Garnet网络。Simple网络对链路、路由延迟与链路带宽进行建模,但并不建模路由资源竞争与流控。Garnet网络详细建模路由微架构,包括所有相关的资源竞争与流控时序。
设备。GEM5仿真器支持多种IO设备,目前实现了NIC、IDE控制器、帧缓冲、DMA引擎、UART与中断控制器。
建模多系统。这是通过实例化另一套对象(CPU、存储器、I/O设备等)来实现的。用户通过网络接口连接这些系统来创建通过TCP/IP通信的主/从机对。

4.GEM5需要完善的工作
①功耗模型。目前GEM5需要外挂功耗模型才能进行功耗仿真。
②实现对各种ISA的完全支持。
③提高并行化水平。目前GEM5在性能上与Simics尚存在差距。
④检查点的导入。目前GEM5速度明显不如某些基于二进制翻译的模拟器。

英文原文:The GEM5 Simulator

原创粉丝点击