authors: Jason Lowe-Power

Garnet 合成流量

Garnet 合成流量提供了一个框架,用于模拟带有受控输入的 Garnet 网络。这对网络测试/调试,或带有合成流量的仅网络模拟非常有用。

注意:garnet 合成流量注入器仅适用于 Garnet_standalone 一致性协议。

相关文件

如何运行

首先使用 Garnet_standalone 一致性协议构建 gem5。Garnet_standalone 协议与 ISA 无关,因此我们使用 NULL ISA 构建它。

对于 gem5 <= 23.0:

scons build/NULL/gem5.debug PROTOCOL=Garnet_standalone

对于 gem5 >= 23.1

scons defconfig build/NULL build_opts/NULL
scons setconfig build/NULL RUBY_PROTOCOL_GARNET_STANDALONE=y
scons build/NULL/gem5.debug

示例命令:

./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py  \
        --num-cpus=16 \
        --num-dirs=16 \
        --network=garnet \
        --topology=Mesh_XY \
        --mesh-rows=4  \
        --sim-cycles=1000 \
        --synthetic=uniform_random \
        --injectionrate=0.01

参数化选项

系统配置 描述
–num-cpus cpu 数量。这是网络中源(注入)节点的数量。
–num-dirs 目录数量。这是网络中目的地(弹出)节点的数量。
–network 网络模型:simple 或 garnet。使用 garnet 运行合成流量。
–topology 用于将 cpu 和 dirs 连接到网络路由器/交换机的拓扑。有关不同拓扑的更多详细信息可以在 (这里)[Interconnection_Network#Topology] 找到。
–mesh-rows 网格中的行数。仅当 ‘’–topology’’ 为 ‘‘Mesh_’’ 或 ‘‘MeshDirCorners_’’ 时有效。
网络配置 描述
–router-latency garnet 路由器中流水线级的默认数量。必须 >= 1。可以在拓扑文件中逐个路由器覆盖。
–link-latency 网络中每个链接的默认延迟。必须 >= 1。可以在拓扑文件中逐个链接覆盖。
–vcs-per-vnet 每个虚拟网络的 VC 数量。
–link-width-bits garnet 网络内所有链接的位宽。默认 = 128。
流量注入 描述
–sim-cycles 模拟应运行的总周期数。
–synthetic 要注入的合成流量类型。目前支持以下合成流量模式:’uniform_random’, ‘tornado’, ‘bit_complement’, ‘bit_reverse’, ‘bit_rotation’, ‘neighbor’, ‘shuffle’, 和 ‘transpose’。
–injectionrate 流量注入率,以 包/节点/周期 为单位。它可以取 0 到 1 之间的任何十进制值。小数点后的精度位数可以通过 ‘’–precision’’ 控制,该参数在 ‘‘garnet_synth_traffic.py’’ 中默认为 3。
–single-sender-id 仅从此发送者注入。要从所有节点发送,请设置为 -1。
–single-dest-id 仅发送到此目的地。要发送到合成流量模式指定的所有目的地,请设置为 -1。
–num-packets-max 每个 cpu 节点要注入的最大数据包数。默认值为 -1(保持注入直到 sim-cycles)。
–inj-vnet 仅在此 vnet(0, 1 或 2)中注入。0 和 1 是 1-flit,2 是 5-flit。设置为 -1 以在所有 vnet 中随机注入。

Garnet 合成流量的实现

合成流量注入器在 GarnetSyntheticTraffic.cc 中实现。生成和发送数据包所涉及的步骤序列如下。