GEM5是一款模块化的离散事件驱动全系统模拟器,它结合了M5和GEMS中最优秀的部分,是一款高度可配置、集成多种ISA和多种CPU模型的体系结构模拟器。M5是由Michigan大学开发的一款开源的多处理机模拟器,受到了业内的广泛关注,很多高水平论文都采用M5作为研究工具。另一方面,Wisconsin推出的GEMS能够对储存层次进行详细而灵活的模拟,包括对多种不同的cache一致性协议和互联模型的支持。目前的GEM5是M5和GEMS的一个紧耦合版本。
GEM5已经能够支持多种商用ISA,包括X86、ARM、ALPHA、MIPS、Power、SPARC等,并且能够在X86、ARM、ALPHA上加载操作系统。
GEM5的目标包括三个方面:灵活性(Flexibility)、可用性(Availability)以及高度合作性(High level of collaboration)。
Ø 灵活性
所谓灵活性是指gem5提供了多种CPU模型,多种系统模型,以及多种存储模型。CPU模型从简单到复杂分别是Atomic、Timing、In- order、O3(Out of Order)。系统模型分为SE(System-call emulation)和FS(Full System)两种。存储模型分为Classic和Ruby两种。
Ø 可用性
所谓可用性是指GEM5采用基于BSD的license管理(BSD(Berkeley Software Distribution license),是自由软件(开源软件的一个子集)中使用最广泛的许可证之一),对不同类型的用户,包括学术研究人员、企业界的工程技术人员、学生等,都很友好。
Ø 高度合作性
所谓高度合作性是指GEM5是一个开源社区项目,任何有志之士都可以贡献自己的力量。
GEM5的设计特征包括4个方面:面向对象、Python集成、领域特定语言DSL、标准化接口。
Ø 面向对象
整个项目采用面向对象的模块化设计,用C++和Python语言编写(其中85%是C++)。正是这个原因,使得gem5具备高度的灵活性。gem5中的所有的主要组件都被看成一个SimObject,每个SimObject由两个类表示,一个Python类,一个C++类。
Ø Python集成
对于不同的组件SimObject,GEM5中使用Python进行集成,即Python负责初始化、配置和模拟控制。
Ø 领域特定语言DSL
为了提供定制硬件模块的功能,GEM5提供了两种DSL,一种用来指定ISA(继承自M5),一种用来指定cache一致性协议(继承自GEMS),也就是说用户可以自己定制ISA和cache一致性协议。
Ø 标准化接口
标准化接口主要是包括端口(port)接口和消息缓冲接口(messagebuffer)。在GEM5中,端口是一个用来连接两个内存对象(memory object)的接口。在Classic内存系统中,端口接口连接包括CPU到cache、cache到总线、以及总线到设备和内存的所有内存对象。
端口支持三种访问数据的机制,即timing、atomic和functional,以及用来确定拓扑结构和调试的接口。计时(Timing)模式用于对访存计时的详细建模。通过发送消息对内存系统进行请求,而响应则是通过其它消息异步地返回。原子(Atomic)模式用来获得一些计时信息,但不是基于消息的。当发生原子调用(通过功能调用),操作的状态立即同步地发生改变,这种方式性能更高但是精度较低,因为没有对消息的互操作进行建模。最后,功能访问对模拟器状态进行更新,而不改变任何计时信息。这些一般用来进行调试、系统调用模拟和初始化。Ruby使用端口接口连接CPU和设备,并且在内部添加了消息 缓冲来连接Ruby对象。消息缓冲同端口一样提供了标准的通信接口,然而消息缓冲在一些细节上不同于消息typing和storage。
GEM5支持两种不同的系统模型:SE(syscall emulation)和FS(full system)模型。
Ø SE模型
SE模型能够仿真大部分操作系统级服务,能够取得很好功能模拟加速比。
Ø FS模型
FS模型模拟完整的全系统,包括OS,运行在用户态和核心态的线程调度以及各种设备。能够精确模拟系统时间等开销。
GEM5支持四种不同的CPU模型:AtomicSimple,TimingSimple,In-Order,Out-Order(O3)。不同的CPU的模拟在速度和精确度之间的权衡不同。CPU四种模型可以在模型中任意切换,支持“热插拔”。
AtomicSimple是最简单规模的模型,一个cycle完成一条指令的执行,memory 模型比较理想化,访存操作为原子性操作。适用于快速功能模拟。
TimingSimple模拟器也是无流水线的模拟,但是使用了存储器访问时序模型,用以统计存储器访问延迟。
In-Order模型是GEM5模拟的新特性,流水级为默认五级流水:取值、译码、执行、访存、写回。并且模拟了cache部件、执行部件、分支预测部件等。
O3模拟器时流水级模拟,O3模拟器模拟了乱序执行和超标量执行的指令间依赖,以及运行在多CPU上的并发执行的多线程。默认7级流水:取值、译码、重命名、发射、执行、写回、提交。模拟了物理寄存器文件、IO、LSQ、ROB功能部件池等。主要参数为流水管道间延迟、硬件线程数、 IQ/LSQ/ROB项数、FU延迟、物理寄存器重命名、分支预测、访存依赖预测等。
以上四种CPU模型之所以被称为“热插拔”是因为CPUs共享通用部件和接口。
ü 参数定义
ü 共享部件:分支预测器,TLB,译码,中断处理
ü 基于时间缓冲的通信机制
ü 外部接口
如前面所述,GEM5支持种类繁多的体系平台,这使得模拟器模块化程度较高且易于在不同CPU之间切换。
Ø ALPHA
ALPHA是GEM5中最常用的ISA。这种体系结构基于DEC Tsunami 系统,能够启动未修改Linux2.4/2.6 kernels 和 FreeBSD,并且能够扩展至64核。
Ø ARM
模拟了Cortex-A9,支持Thumb,Thumb-2,VFPv3和NEON指令集。
Ø X86
模拟了64位x86 CPU,能够在SMP的配置模式下启动原始Linux kernel。
Ø SPARC
模拟了UltraSPARCT1处理器,能够启动Solaris操作系统。
Ø PowerPC
模拟了基于POWER ISAv2.06 B的32位处理器。
Ø MIPS
模拟了32位处理器核。
GEM5继承了M5和GEMS两种不同的存储器系统。M5的Classic mode存储器是最简单的模型,它提供了简洁快速的可配置性。GEMS的Ruby模型注重于精确度并且支持不同的cache一致性协议。
Ruby存储器模型:
Ø 灵活的存储器系统
丰富的配置选项,模拟了cache、一致性、互联等丰富内容。
快速的原型设计,领域特定语言SLICC用以维护一致性协议,组件的高度模块化。
Ø 详细的数据统计
Ø 详细的组件模拟
网络模拟、cache模拟、DDR2模拟等。
Ø 能够构建不同的存储器系统
CMPs、SMPs、SCMPs,1/2/3级cache,Pt2Pt/Torus/Mesh拓扑结构,MESI/MOESI一致性等。
Ø 每一个组件都是个体可配置
可以构建异构cache体系结构,适应cache大小,带宽,链接延迟等参数。
Ø 运行平台
Linux,BSD,MacOS,Solaris,etc.
小顶端机器,一些其它体系结构支持大顶端。
64-bit主机性能会更好。
Ø 支持工具
GCC/G++ 3.4.6+ 大部分情况下在4.3-4.5版本。
Python 2.4+
SCons 0.98.1+(http://www.scons.org)
SWIG 1.3.31+(http://www.swig.org)
功耗模型,目前GEMS和M5可以使用外挂的功耗模型,比如Orion和McPAT,但是gem5希望集成一个综合性的模块化的功耗模型。这凸显了功耗问题已经成为当前的体系机构研究和微处理器产业发展的瓶颈问题之一。
对各种ISA/CPU/memory模型的全面支持。目前的版本可能在某些配置下不能很好地运行。
并行化,显然目前GEM5的性能还不尽如人意。为此,需要做并行化的工作。
检查点导入,即使是用GEM5的简单CPU模型来进行模拟,其速度也明显慢于那些基于二进制翻译的模拟器,比如QEMU或者SimNowTM等等。模拟器中的状态检查点转移到GEM5中。用户可以将模拟快速推进到某个时刻点,然后再从这个时刻点开始继续模拟。如果采用类似KVM等虚拟机的话,可能获得比用二进制翻译器更高的性能。
参考文献:
[1]The gem5 Simulator, SIGARCH Computer Architecture News, CAN’11
[2]Binkert, N. L., Dreslinski, R. G., Hsu, L. R., Lim, K. T., Saidi, A. G., andReinhardt, S. K. The M5 Simulator: Modeling Networked Systems. IEEE Micro 26, 4(Jul/Aug 2006), 52-60.
[3]Martin, M. M. K., Sorin, D. J., Beckmann, B. M., Marty, M. R., Xu, M.,Alameldeen, A. R., Moore, K. E., Hill, M. D., and Wood, D. A. Multifacet'sgeneral execution-driven multiprocessor simulator (GEMS) toolset. SIGARCHComput. Archit. News 33, 4 (2005), 92-99.