SMP L1 Level Spm Cache Protocol - BIT-SYS/gem5-spm-module GitHub Wiki
Unresovled Questions
- 核间路由实现原理?
out_msg.Destination: 如何指定?mapAddressToRange - 可能的处理核争用问题 不同处理核对同一_块_判定为热数据
TODO 可能的处理核争用问题
- 一个spm块中不同的2行(cache line size)分别在2个处理核上有热数据特征
- 正确但有性能问题的解决:将该块spm行数据放到首先发出spm移入请求的核中,其他核采取远程访问。
- 一个spm块中的相同的1行分别在多于1个处理核上有热数据特征
原有协议
http://gem5.org/MESI_CMP_directory
网络
- 每个L1, L2都有一个machineID,同时__L1节点, L2节点__都连入了一个网络。
SPM
Actions
直接操作的指令都是trigger event时传入的
Events
- CPU <--> Spm
LOAD: load from local cpuSTORE: store from local cpu
- 内部状态转换
SPM_Eviction: 换出SPM_Movein:换入
- SpmNetwork <--> Spm,使用L2Network
Remote_LOAD: request, 远程读, remote发来的Remote_STORE: request, 远程写,remote发来的Ack_all?: response, 对控制指令的相应。Data_all_ack?收完所有的数据了,对数据传输指令的相应。Data: response,网络--> localData_Ack: local --> 网络Data_NotExist
- L2Network <--> Spm
WB_Ack: write back ack, 当spm->L2 cache时,L2发回的AckCoherenceResponseType:ACK这是什么?- SPM写L2时需要
f_sendDataToL2
Replacement
- 目前设置写在所有的
XXXX_hitaction中,即在sequencer.xxxCallback()之前,可以优化。 - 替换操作触发的条件:cache中某一块数据达到了热数据特征。
- 该cache line一定是在cache中,同时要确定没有在其他spm块的迁移过程中
Replacement Events
- replacement分为2个阶段
- 在xxx_hit后发送moveinRequest给L2
- 在responseNetwork里面接受L2的请求,Yes or No
- 如果是yes,则触发_Event:SpmReplacement_
- _SpmReplacement_进一步地可能会需要先eviction操作,还会触发其他时间,比如eviction结束等
Misc
- Cache和Spm之间的
entry要么兼容要么要有互相转换的方式
Coherence消息的类型
CoherenceResponseType, 对应着发送的消息SPM_Data:响应数据
CoherenceResquestTypeSPM_Load/SPM_Store:请求数据SPM_WB: spm中数据迁出
一些限制
- 暂定Spm中的映射块大小与L1, L2一行一样
Gem5 Misc
- 协议定义中包含的一些路由mapping函数:
src/mem/protocol/RubySlicc_ComponentMapping.sm - 需要看的代码:
src/mem/protocol/RubySlicc_XXXX