gem5学习0——模拟器简介

来源:互联网 发布:淘宝被盗号了怎么办 编辑:程序博客网 时间:2024/05/16 12:46

    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上加载操作系统。
1.  GEM5目标

    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是一个开源社区项目,任何有志之士都可以贡献自己的力量。
2.  GEM5结构特征
    GEM5的设计特征包括4个方面:面向对象、Python集成、领域特定语言DSL、标准化接口。
Ø 面向对象
    整个项目采用面向对象的模块化设计,用C++和Python语言编写(其中85%是C++)。正是这个原因,使得gem5具备高度的灵活性。
    GEM5中所有主要的仿真单元都称为SimObject,它们使用相同的方法进行配置、初始化、统计与序列化(检查点)。SimObject包括具体的硬件单元模型比如处理器核、cache、互联单元与设备,也包括更为抽象的比如负载和与之相关联的用于系统调用仿真的处理内容。
    每个SimObject由两个类表示,一个Python类,一个C++类。Python类定义SimObject参数并进行基于脚本的配置。C++类包含了SimObject状态与剩余的行为,包括关键性能的仿真模型。
Ø Python集成
    对于不同的组件SimObject,GEM5中使用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文件,此外允许局部变量以简化编程与提升性能。
Ø 标准化接口
    标准化接口主要是包括端口(port)接口和消息缓冲接口(message buffer)。
    端口用来连接两个内存对象(memory object)。在Classic内存系统中,端口接口连接包括CPU到cache、cache到总线、以及总线到设备和存储器的所有内存对象。
    端口支持三种访问数据的机制,即timing、atomic和functional,以及用来确定拓扑结构和调试的接口。
Timing模型用于建模存储器访问的时序细节,请求通过消息发送给存储系统,而响应则是通过其它消息异步地返回;
Atomic模型用于获取时序信息,但并非基于消息,发生atomic调用(通过函数调用),同步地实现操作的状态改变,这种方式性能更高但是精度较低,因为没有对消息的互操作进行建模
Functional模型对模拟器状态进行更新,而并不改变任何时序信息,用于debug、系统调用仿真与初始化。

Ruby使用端口接口连接CPU和设备,并且在内部添加了消息缓冲来连接Ruby对象。消息缓冲同端口一样提供了标准的通信接口,然而消息缓冲在一些细节上不同于消息typing和storage。

3.  GEM5系统模型
    GEM5支持两种不同的系统模型:SE(syscall emulation)和FS(full system)模型。
Ø  SE模型
    SE模型能够仿真大部分操作系统级服务,能够取得很好功能模拟加速比。
Ø  FS模型
    FS模型模拟完整的全系统,包括OS,运行在用户态和核心态的线程调度以及各种设备。能够精确模拟系统时间等开销。
4.  CPU 模型
    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,译码,中断处理
    基于时间缓冲的通信机制
    外部接口
5.  支持ISA种类详解
    如前面所述,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位处理器核。
6.  存储器系统
    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大小,带宽,链接延迟等参数。

7. 互联网络

Ruby存储模型支持庞大阵列的互联拓扑,包括两个不同的网络模型:Simple网络与Garnet网络。
Simple网络对链路、路由延迟与链路带宽进行建模,但并不建模路由资源竞争与流控。
Garnet网络详细建模路由微架构,包括所有相关的资源竞争与流控时序。

8. 设备

GEM5仿真器支持多种IO设备,目前实现了NIC、IDE控制器、帧缓冲、DMA引擎、UART与中断控制器。
建模多系统。这是通过实例化另一套对象(CPU、存储器、I/O设备等)来实现的。用户通过网络接口连接这些系统来创建通过TCP/IP通信的主/从机对。
9.  模拟器运行适用环境
Ø  运行平台
    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)
10.  GEM5不足与完善
    功耗模型,目前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.

0 0