GEM5教程-互联网络

  • 一、如何调用网络
  • 1、简单的网络
  • 2、Garnet 网络
  • 二、拓扑结构
  • 1、相关的文件
  • 2、拓扑描述
  • 3、在每个拓扑中,每个链路和每个路由器都可以独立地传递一个覆盖默认值的参数(在BasicLink.py和BasicRouter.py中):
  • 三、路由
  • 1、基于表的路由(默认)
  • 2、自定义路由算法
  • 四、流量控制与路由器微体系结构
  • 1、简单网络
  • 2、Garnet
  • 3、Garnet2.0
  • GEM5系列教程索引


一、如何调用网络

1、简单的网络
./build/ALPHA/gem5.debug \
                  configs/example/ruby_random_test.py \
                  --num-cpus=16  \
                  --num-dirs=16  \
                  --network=simple
                  --topology=Mesh_XY  \
                  --mesh-rows=4

默认网络很简单,默认拓扑是crossbar

2、Garnet 网络
./build/ALPHA/gem5.debug \
                      configs/example/ruby_random_test.py  \
                      --num-cpus=16 \
                      --num-dirs=16  \
                      --network=garnet2.0 \
                      --topology=Mesh_XY \
                      --mesh-rows=4

二、拓扑结构

不同控制器之间的连接是通过python文件指定的。所有外部链路(控制器和路由器之间)都是双向的。所有内部链路(路由器之间)都是单向的——这允许每个链路上的每个方向权重偏向路由决策。

1、相关的文件
src/mem/ruby/network/topologies/Crossbar.py
src/mem/ruby/network/topologies/CrossbarGarnet.py
src/mem/ruby/network/topologies/Mesh_XY.py
src/mem/ruby/network/topologies/Mesh_westfirst.py
src/mem/ruby/network/topologies/MeshDirCorners_XY.py
src/mem/ruby/network/topologies/Pt2Pt.py
src/mem/ruby/network/Network.py
src/mem/ruby/network/BasicLink.py
src/mem/ruby/network/BasicRouter.py
2、拓扑描述

(1)Crossbar:每个控制器(L1/L2/目录)都连接到一个简单的交换机。每个交换机都连接到一个中央交换机(模拟横杆)。这可以通过–topology=Crossbar从命令行调用。

(2)CrossbarGarnet:每个控制器(L1/L2/目录)通过一个garnet路由器(内部模拟crossbar和分配器)连接到每个其他控制器。这可以通过–topology=CrossbarGarnet从命令行调用。

(3)Mesh_*:此拓扑要求目录数等于CPU数。路由器/交换机的数量等于系统中CPU的数量。每个路由器/交换机连接到一个L1、一个L2(如果存在)和一个目录。网格中的行数必须由–mesh-rows指定。此参数还可以创建非对称网格。

Mesh_XY:XY路线脉冲。所有x向链路的权重均为1,而所有y向链路的权重均为2。这将强制所有邮件在使用Y-links之前首先使用X-links。它可以通过–topology=Mesh_XY从命令行调用

Mesh_westfirst:西路路由。所有西向链路的权重均为1,所有其他链路的权重均为2。这将强制所有邮件在使用其他链接之前,首先使用西向链接。它可以通过–topology=Mesh_westfirst从命令行调用

(4) MeshDirCorners_XY:此拓扑要求目录数等于4。路由器/交换机的数量等于系统中CPU的数量。每个路由器/交换机连接到一个L1,一个L2(如果存在)。每个角落路由器/交换机连接到一个目录。它可以通过–topology=MeshDirCorners_XY从命令行调用。网格中的行数必须由–mesh-rows指定。采用XY路由算法。

(5)Pt2Pt:每个控制器(L1/L2/目录)通过直接链接连接到每个其他控制器。这可以通过–topology=Pt2Pt从命令行调用。

如何使用gem5 进行架构仿真 gem5教程_网络

3、在每个拓扑中,每个链路和每个路由器都可以独立地传递一个覆盖默认值的参数(在BasicLink.py和BasicRouter.py中):

(1)链接参数:

延迟:链接内的遍历延迟。

权值:与此链接关联的权重。此参数由路由表在决定路由时使用,如下路由中所述。

带宽因数:仅用于简单网络以字节为单位指定链接宽度。这转化为带宽乘数(simple/SimpleLink.cc),单个链路带宽变为带宽乘数x端点带宽(在SimpleNetwork.py中指定)。在garnet中,带宽由GarnetNetwork.py中的ni_flit_size指定)

(2)内部链接参数:

src_outport:源路由器的输出端口的名称字符串。

dst_inport:目标路由器上输入端口的名称字符串。

路由器可以使用这两个参数在garent2.0中实现自定义路由算法(参见路由)。

(3)路由器参数:

延迟:每个路由器的延迟。仅由garent2.0支持。

三、路由

1、基于表的路由(默认)

基于拓扑结构,最短路径图遍历用于填充每个路由器/交换机的路由表。这是在src/mem/ruby/network/Topology.cc中完成的。默认的路由算法是基于表的,并尝试选择具有最少链接遍历次数的路由。可以在拓扑文件中为链接赋予权重,以对不同的路由算法建模。例如,在Mesh_XY.py和MeshDirCorners_XY.py中,Y方向链接的权重为2,而X方向链接的权重为1,从而产生XY遍历。在Mesh_westfirst.py中,西方链接的权重为1,所有其他链接的权重为2。在garnet2.0中,路由算法在具有相同权重的链路之间随机选择。在简单的网络中,它静态地在具有相等权重的链路之间进行选择。

2、自定义路由算法

在garent2.0中,我们提供了实现自定义(包括自适应)路由算法的额外支持(请参见src/mem/ruby/network/garent2.0/RoutingUnit.cc中的outportComputeXY())。链路的src_outport和dst_inport字段可用于为每个链路提供自定义名称(例如,如果是网格,则为方向),并且这些字段可在garnet内部用于实现任何路由算法。可以通过设置–routing algorithm=2从命令行中选择自定义路由算法。请参阅configs/network/Network.py和src/mem/ruby/network/garnet2.0/GarnetNetwork.py

四、流量控制与路由器微体系结构

Ruby支持Simple和Garnet两种网络模型,它们分别权衡了详细建模和仿真速度。

1、简单网络

简单网络的细节在GEM5教程-简单网络的专题中。

2、Garnet

原始的(2009) Garnet 网络的细节GEM5教程-Garnet的专题中。代码库不再支持此设计。

3、Garnet2.0

新的(2016)Garnet2.0网络详情在GEM5教程-Garnet2.0专题中。

GEM5系列教程索引

GEM5教程–gem5开始之旅(一)

GEM5教程–gem5开始之旅(二)

GEM5教程–修改和拓展gem5(一)

GEM5教程–修改和拓展gem5(二)

GEM5教程–修改和拓展gem5(三)

GEM5教程–修改和拓展gem5(四)

GEM5教程-互联网络

GEM5教程-Garnet