(本文是对gem5官方教程gem5: Garnet Synthetic Traffic的学习记录)
Garnet合成流量为模拟有控制输入的Garnet网络提供了一个框架。对携带合成流量的网络测试/调试,或仅考虑网络的模拟有用。
Note:garnet合成流量的注入器仅适用于Garnet_standalone一致性协议。
相关文件
configs/example/garnet_synth_traffic.py:调用网络测试器
src/cpu/tester/garnet_sythetic_taffic/GarnetSyntheticTraffic.*:实现测试器
实现
在生成和发送数据包的过程中涉及到的步骤如下:
- 每个周期,每个cpu以概率等于--injectionrate进行伯努利试验,以确定是否生成一个包。
- 如果--num-packets-max值为非负值,则每个cpu在生成--num-packets-max个数据包后停止生成新的数据包。注入器在经过--sim-cycles之后终止。
- 如果cpu必须生成一个新数据包,它会根据合成流量类型(--synthetic)计算新数据包的目的地。
- 这个目标被嵌入到包地址的块偏移后的位中。
- 生成的包被随机标记为ReadReq,或INST_FETCH,或WriteReq,并发送到Ruby端口(
src/mem/ruby/system/RubyPort.hh/cc)
- Ruby Port将数据包分别转换为RubyRequestType:LD、RubyRequestType:IFETCH和RubyRequestType:ST,并将其发送给Sequencer, Sequencer再将其发送给Garnet独立缓存控制器。
- 缓存控制器从数据包地址中提取目标目录。
- 缓存控制器将LD、IFETCH和ST分别注入虚拟网络0、1和2。
- LD和IFETCH作为控制包注入(8字节),ST作为数据包注入(72字节)。
- 数据包通过网络到达目录。
- 最后,目录控制器简单的将其删除。