如何在gem5中配置ruby协议

gem5模拟器中实现了一种更细节的内存子系统的模拟模型——Ruby。它建模了inclusive/exclusive cache,包含多种替换策略、一致性协议、互连网络、DMA和内存控制器,以及多种用于初始化内存请求和处理响应的排序器。

一般情况下,我们使用如下命令建立一个X86 gem5模拟器:

scons build/X86/gem5.debug -j$(nproc)

然后使用上述建立的X86 gem5模拟器运行fs.py配置文件,添加--ruby选项,可以运行带ruby内存模型的X86全系统仿真。

build/X86/gem5.debug configs/example/fs.py --kernel=x86-linux-kernel-5.4.49 --disk=x86-ubuntu-18.04-img --ruby --mem-type=DDR3_2133_8x8 -n=2

得到的结果配置文件如下(包含ruby对象):

如何在gem5中配置ruby协议_第1张图片

 同时,gem5提供了许多cache一致性协议,例如:CHI、MI、MOESI、MESI、Garnet_standalone等(configs/ruby文件夹下),而在fs.py的配置选项中并没有可以配置该协议的选项,预估是无法在仿真时添加配置选项来配置。那么该如何配置呢?


以下介绍配置CHI协议的过程。

1. 建立包含cache一致性协议的gem5模拟器

查看源码(configs/ruby/Ruby.py),如下:

发现该协议应该在建立gem5模拟器时就声明,添加选项PROTOCOL

scons build/X86/gem5.debug PROTOCOL=CHI -j$(nproc)

2. 运行仿真

上述包含cache一致性协议的gem5模拟器成功建立后,即可直接使用来运行全系统仿真。

build/X86/gem5.debug configs/example/fs.py --kernel=x86-linux-kernel-5.4.49 --disk=x86-ubuntu-18.04-img --mem-type=DDR3_2133_8x8 -n=2 --ruby

 得到的配置文件与之前无协议的配置文件的对比如下(部分):

如何在gem5中配置ruby协议_第2张图片

 会添加更多的组件,例如:sequencer、cache控制器等。

在CHI协议的源码中(configs/ruby/CHI.py),我发现针对该协议可以添加自定义的配置文件,但前提是网络拓扑需要配置为CustomMesh

如何在gem5中配置ruby协议_第3张图片

 然后我尝试配置一下在这里就发现源码由bug,需要修改源码才能正确运行,在此记录一下。

首先运行以下命令

build/X86/gem5.debug configs/example/fs.py --kernel=x86-linux-kernel-5.4.49 --disk=x86-ubuntu-18.04-img --mem-type=DDR3_2133_8x8 -n=2 --ruby --topology=CustomMesh --chi-config=configs/example/noc_config/2x4.py

p.s. --topology配置网络拓扑,选择CustomMesh的话必须添加--chi-config选项来配置网络参数,源码中提供了一个CHI协议配置文件示例configs/example/noc_config/2x4.py

然后发现无法运行,出现错误:

如何在gem5中配置ruby协议_第4张图片

根据提示查看源码( configs/topologies/CustomMesh.py):

 函数distributeNodes声明(在同一个文件中)如下:

如何在gem5中配置ruby协议_第5张图片

 因此可知,源码中确实是多传入了一个参数options,将其删掉即可:

 重新运行仿真,可成功建立ruby网络拓扑为CustomMesh的配置:

如何在gem5中配置ruby协议_第6张图片

其他的一些坑

  • 尝试建立带协议的NULL系统,发现建立的gem5模拟器无法正常使用,会出现缺少声明对象的错误,我猜测可能NULL系统无法添加cache一致性协议。但官网教程gem5: Garnet Synthetic Traffic中使用PROTOCOL=Garnet_standalone可以配置NULL gem5
scons build/NULL/gem5.debug PROTOCOL=Garnet_standalone
  • 配置选项--chi-config指定配置文件路径,主要包含num_rows、num_cols等一些参数的配置,对这个参数的理解参考文件configs/ruby/CHI_config.py。

你可能感兴趣的:(gem5学习,ruby,学习)