The gem5 Simulator

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuiliusheng/article/details/83279003

The gem5 Simulator

  1. 摘要:
    • gem5结合了M5和GEMS两者的最好的方面,M5提供了高度可配置的模拟框架,支持多种ISAs和CPU模型;GEMS补充了M5的特性,提供了详细而灵活的内存系统,包括多种cache 一致性协议和互连模型
    • gem5支持的商业ISAs:ARM, ALPHA, MIPS, POWER, SPARC, X86,并且支持在x86,ARM,ALPHA上启动linux
    • 贡献单位:AMD, ARM, HP, MIPS, Princeton, MIT, Michigan大学,Texas大学,Wisconsin大学
  2. gem5的三个目标:灵活,可用性高,高度协作
    • 灵活性:好的模拟器的基础。gem5提供了许多的功能和组件,涵盖了广泛的速度和精度之间的权衡
      • CPU模型:gem5提供了四种CPU模型,对应着不同等级的速度和精度。AtomicSimple是一个最小的IPC为1的CPU模型(单周期处理器);TimeingSimple类似于前者,但是增加了存储访问的延迟的模拟;InOrder是一个按序流水线CPU模型;O3是一个乱序流水线模型。后两者都是execute-in-execute(指令的执行只在执行阶段,此时所有的相关都已经被解决)的设计
      • System模式:每个执行驱动的CPU模型都支持两种模式。SE(系统调用仿真)模式通过模拟大部分的系统调用,避免了对外设和OS进行建模的需要;FS(全系统)模式对一个完整系统,包括OS和外设,进行了建模,支持执行用户和内核指令
      • 存储系统:支持两种存储系统模型:classic和ruby。classic模型(M5)快速,配置简单;ruby模型(gems)灵活,精确,支持cache一致性
    • 可用性:gem5的许可证是基于BSD的,所以很友好
    • 高度协作:gem5社区非常活跃,有很多协作技术可以促进gem5的使用和开发。
  3. gem5的设计特点
    • 面对对象的设计:提供了非常好的灵活性
      • 每个主要的模拟组件都是SimObjects,共享了配置、初始化、统计和序列化(检查点)的公共行为
      • SimObjects包括了具体的硬件组件,例如cores,caches,互连元素和外设,也包括了一些抽象实体,例如用于系统调用模拟的工作负载及其关联的流程上下文
      • 所有的SimObject对象都由两种类表示,python类和c++类
      • Python类的定义指定了SimObject的参数,并且可以在配置脚本文件中使用
      • C++类包含了SimObject的状态和其它行为,同时包括了关键性能的仿真模型
    • 集成python:15%的python代码。python代码主要包括SimObjects的初始化,配置和仿真控制
      • 模拟器在启动时立即开始执行python代码
      • 标准的main函数使用python编写,所有的命令行处理和启动代码都是python代码
    • 特定领域的语言
      • gem5提供了两种特定领域的语言,一种用于描述ISA(M5),另一种用于描述cache的一致性协议(GEMS)
      • ISA DSL:用于统一二进制指令的解码和它们的语义规范。gem5通过使用一个通用的C++基类来描述指令,从而实现了ISA的独立。每种ISA会重新基类中继承的方法,例如execute()。ISA描述语言允许用户简洁地指定所需的c++代码。
      • cache coherence DSL:SLICC是一种DSL,用于灵活的实现cache一致性协议。SLICC将cache,mem,DMA控制器定义为单独的per-memory-block的状态机,这些状态机组合称为整个的协议。gem5中的SLICC将协议定义为一组状态、事件、转换和操作,同时将状态机特定的逻辑和协议无关的组件(例如cache)绑定在一起。gem5的SLICC会自动生成python和c++文件,同时也支持局部变量,以简化编程提高性能
    • 标准的接口:端口接口和消息缓冲接口
      • 端口接口:连接内存对象,包括cpu和caches,caches到总线,总线到外设和内存。该接口支持三种机制来访问数据,1) timing模式,用来建模带有详细时序的内存访问,会有request和response的消息机制;2) atomic模式,用来获取时序信息,但是没有消息机制,状态会直接发生变化;3) 功能模式,存储操作不会改变时序信息
      • 消息缓冲接口:Ruby使用端口接口来连接cpu和外设,同时使用消息缓冲接口连接Ruby内部对象。两个接口非常类似
  4. gem5的模拟能力
    • ISAs:支持多种ISAs,同时不需要为每一种ISAs设置一种专用的CPU模型和存储模型
    • 执行模式:SE/FS。
      • SE模式中,当程序执行系统调用时,gem5会捕捉到,同时模拟调用,通常是传递给主机操作系统。SE模式下,没有线程调度器,线程必须静态的映射到cores,因此会限制多线程应用
      • FS模式中,gem5提供了一个适合运行操作系统的裸机环境,包括中断,异常等,并不是所有ISAs都支持此模式。FS相对于SE,精度更高,可以执行更多类型的负载。
    • CPU模型:AtomicSimple,TimingSimple,InOrder,O3。前两者是非流水线,一周期完成一条指令。在InOrder模式下,可以配置硬件支持的线程数量。在O3模式下,可以支持超标量结构和SMT。
    • 缓存一致性协议:支持多种类型的基于失效的一致性协议,从监听到目录协议,以及两者之间的一些点
      • cache的一致性逻辑和存储系统中的其它部分是分开的
      • 支持的一致性协议的基本单位是cache-block
      • SLICC目前支持AMD Opteron的基于广播的一致性协议和CMP的目录协议
    • 互连网络:Ruby内存模型支持大量的互连拓扑结构,同时包括两种不同的网络模型。组件之间的链接使用一个简单的python文件声明,然后通过最短路径分析创建路由表。在确定链接和路由表后,根据不同的网络模型进行实现。两种网络模型为:
      • Simple网络模型只对链接,路由延迟和链路带宽,并没有对路由器资源争用和流量控制建模
      • Garnet网络模型对路由建立了详细的模型,包括相关的资源竞争和流量控制
    • 外设:包括简单的定时器到复杂的网络接口控制器。通过使用基类来封装公共设备接口,以避免代码重复,简化实现。
    • 多系统建模:例如通过网络互连的系统,使用TCP/IP通信。

猜你喜欢

转载自blog.csdn.net/shuiliusheng/article/details/83279003