🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/132647102】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
文章目录
- 0. 前言
- 1. Req
- 1.1 MemOp
- 1.2 SnpType
- 1.3 Meta
- 2. RwD
- 3. BIRsp
- 4. 参考
0. 前言
M2S 方向有 3 个 Channel:Req,RwD,BIRsp,本文对 M2S 方向各 Channel 的 Message 进行释义。
1. Req
Req 是指未携带数据的 M2S 请求,多为 Read 及 Forward 相关。M2S Req 主要是在 MemOp、Meta、SnpType 共同作用下完成的,MemOp 指定 Memory 操作类型,SnpType 指定对 Device Cache 的操作,MetaField/MetaValue 指示 Host Cache 的状态。
1.1 MemOp
Req 包含以下几种 MemOp:
- MemInv ,Master 发起的 Invalidation 操作,主要用于更新 Meta Data,无需读写数据。常用于 Master 获取归属于 Device Memory 的指定 Cacheline 的 Exclusive 或 Shared 权限。
- MemInvNT ,跟 MemInv 类似,多了一层 Hint 的意思,暗示(但不保证)该 Invalidation 是非时态的,预计很快会写回。该请求读 Device Meta State,但是不修改。
- MemRd ,常规的 Memory Read,Meta Field 及 MetaData 字段可用。若 Meta Field 包含有效字段,则执行 Meta 数据更新。
- MemRdData ,常规的 Memory Read,忽略 MetaField 及 MetaValue 不用。Device 收到该请求后,若原 Meta0-State=I 则更新为 A,其他状态(SA)保持不变。
- MemRdFwd ,将 D2H 的 Read 请求转发回去,仅适用于 HDM-D Host-bias 区域,Device DCOH 直接到其 Memory 内读数据,且完成后无需给 Host 回 Completion。该请求内的 Tag 采用 D2H Req 的 CQID,SnpType 必须为 NoOp。
- MemWrFwd ,跟 MemRdFwd 类似,将 D2H 的 Write 请求转发回去,仅适用于 HDM-D Host Bias 区域,Device 完成后无需给 Host 回 Completion
- MemSpecRd ,在 Home Agent 解决一致性之前就发出,从而减小 Latency,需要 MemData 但无需 Completion。Tag, MetaField, MetaValue, and SnpType 均 Reserved。
- MemClnEvct ,跟 MemInv 类似,但是该请求还用于指示 Host 正在变为 I 状态且无需返回 Meta0 状态。仅用于 HDM-DB 地址域。
以上几种请求有特定的应用范围:对于 HDM-H 区域,只能发送 MemRd、MemInv、MemInvNT、MemRdData、MemSpecRd 这 5 种请求;MemRdFwd、MemWrFwd 是转发 Device 发来的请求,只适用于 HDM-D Host Bias 区域;MemClnEvct 仅用于 HDM-DB 区域。
对于 MemInv、MemRd、MemRdData,若 SnpType 包含有效命令,应按需求执行。
1.2 SnpType
SnpType 可认为是 Host 对 Device Cache 内 Cacheline 的操作请求,Host 通过该字段对 Device Cache 内的相关 Cacheline 进行 Snoop。SnpType 同样分为 SnpCur、SnpData 及 SnpInv,释义如下:
- SnpData ,Requestor 需要至少一条 Shared Line;
- SnpCur ,Requestor 读取 Device 侧该 Cacheline 的数据,且保证不会对齐进行缓存,Device 无需改变该 Cacheline 的状态;
- SnpInv ,Requestor 想要独占该 Cacheline。
1.3 Meta
Meta 可认为 Host 给 Device 的暗示信息,告知 Device 该 CacheLine 在 Host 侧的 Cache 状态,而非 Device 内的状态,便于 DCOH 进行一致性相关操作。
Meta 有 MetaField、MetaValue 两个字段,释义如下:
- MetaField ,指定 Meta 的 Entry,最大支持 3 个 Meta Field,目前只有 Meta0-State。如果存在 Meta Field,则需要更新相关 Meta Data 的值。如果 Device Memory 不支持 Meta Data,DCOH 仍然可以采用该字段来推测 Host 的指令意图。
- MetaValue ,需要更新到指定 Meta 的值。对于 Meta0,不同的值代表不同的 Meta0-State。
更多 Meta Data 相关释义可参考《CXL Meta Data 介绍》 。
2. RwD
RwD 为带有 Data 的 Memory 操作请求,通常为写 Memory 操作,也包含来借道的冲突指示操作。RwD 为独立 Channel 且不依赖于 M2S Req 或 S2M BISnp。
RwD 请求包括以下几种:
- MemWr ,常规 Memory 写操作,整行写。MetaField 及 SnpType 按其既定意义执行。若 Snoop 到 Device 中该 Cacheline 为 M,DCOH 会将其 Invalidate 掉并将 Host 中的数据写回 Device Memory。
- MemWrPtl ,部分写,跟 MemWr 的区别在于 MemWrPtl 带有 Byte Enable。如果 Device 内该 Cacheline 为 M,会先将 Host 发来的数据与当前数据 Merge,将 Cacheline Invalidate 掉并将 Merged 数据写入 Device Memory。MemWr 不涉及这个 Merge 操作。
- BIConflict ,Host 在相同地址的 Cacheline 上检测到了一致性冲突。该请求的 Datapayload 字段全零,即不携带有意义的数据。之所以采用 RwD,是因为该 Channel 的复杂度较低,能够避免死锁。
3. BIRsp
BIRsp 是对 S2M BISnp 的响应, 指示 Host 完成 Back Invalidation 之后该 Cacheline 的状态。BIRsp 包含以下 Message:
- BIRspI
- BIRspS
- BIRspE
- BIRspIBlk
- BIRspSBlk
- BIRspEBlk
4. 参考
- CXL Base Spec, r3.0
- 非时态数据- 知乎 (zhihu.com)
|
🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥
⬆️ 返回顶部 ⬆️