🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
在 协议 M2S Req/RwD、S2M NDR/DRS Message 中均有两个 Meta Data 相关字段:Meta Field 及 Meta Value。关于 Meta Data,初读会较为费解,本文对 Meta Data 进行部分解读。
Meta Data,元数据,描述数据的数据,用以描述数据的属性信息,便于对数据进行组织、查找和理解。如果把一本书的正文内容作为数据,那么该本书的书名、作者、出版社、目录、页码等信息都是元数据。
再回到 Memory。我们知道,Cache 中的 Cacheline 有相关 Tag 来指示当前 Cacheline 的 Cache 状态,同样,内存中也可以有若干组 Meta Data 来描述当前 Data 的属性。
CXL 中的 Meta Data 可认为 Host 给 Device 的暗示信息,告知 Device 该 CacheLine 在 Host Cache 的当前状态,而非 Device Cache 内的状态,便于 DCOH 进行一致性相关操作。CXL Meta Data 相关操作是 CXL Memory 的一项可选属性,只对带有 的设备有用,Type 1 CXL.cache 设备没有相关要求。CXL 链路中 Host 跟 Device 协商之后才能使用 Meta 相关操作,具体协商机制 CXL Spec 中未体现。
对于 CXL Memory,每 64B 地址对齐的一组 64B Data 为 CXL.cachemem 访问的最小数据单位(下称 Data Line),最多支持 3 组 2b 的 Meta Data 对该 Data Line 进行描述(示意图如下)。
为了支持 Meta 操作,在 的 M2S、S2M 两个方向均支持 Meta 的传递,其中,M2S 方向的 Meta 信息由 Host 填充并更新到 Memory Meta 中(若有),S2M 方向的 Meta 信息为从 Memory 读出的该 Data 的 Meta Data 或由 DCOH 填充。具体而言,M2S Req/RwD、S2M NDR/DRS Message 中通过 Meta Field、Meta Value 两个字段来描述当前 Message 中的 Data。其中,Meta Field 相当于 Meta Entry,用以指示当前 Message 中所携带的 Meta Value 所属的 Meta ID;Meta Value 相当于 Meta Data 实体,携带有 Meta Field 所指向的 Meta Data 的值。
截至 CXL 3.0,只用了 1 组 Meta Data 来指示当前 Data Line 在 Host 内的 Cache 状态,即 Meta Field 只在唯一特定值时其对应的 Meta Value 有效。MetaField=2’b00 表示 Meta0-State,2’b01/10->Reserved,2’b11->No-Op。当 MetaValue=Meta0-State 时,MetaValue 编码及释义如下:
Meta Data 用以描述 Data 信息,但 Meta Data 能否随 Data 存储到 Memory 介质中取决于 Memory 介质对 Meta 的支持,即取决于 Memory 中有没有地方来存储这 2b 的 Meta Data。若 Device Memory 介质不支持 Meta Data 存储,DCOH 仍然需要通过 Host 发来的 Meta Data 来推测 Host 访问意图,且反馈给 Host 的 Rsp 中 MetaField 字段必须为 No-Op;若 Device Memory 介质支持 Meta Data 存储,DCOH 负责将 Meta Data 更新到 Memory 介质中,Host 也可以依据 Rsp 中的 Meta Data 来实现对 CPU Sockets 的 Coarse Snoop Filter。
说到这里可能还不甚明了,Meta Data 到底有什么用呢?举个例子:对于 Multi-headed 的多 Host CXL 系统,MLD 内的某 Data Line 可能被缓存在了多个 Host 域的 Host Cache 内。当某个 Host 想要对该 Data Line 进行操作时,有必要在多个 Host Cache 之间实现缓存一致性。Host 如何知道该 Data Line 在多个 Host 域内的缓存情况呢?——看 Meta Data!Host 把该地址的 Meta Data 读回来,该 Data Line 的缓存情况便知一二。
对于 HDM-H 区域,只有 Host 可以访问该区域,Meta 的用法取决于 Host,本文不做过多解释;对于 HDM-D 或 HDM-DB 区域,DCOH 负责依据收到的 Req 中的 Meta 信息对 Host 发来的 Memory 访问意图进行推测、处理并反馈。
Host 对 Device Memory 的访问主要是在 MemOp、Meta、SnpType 共同作用下完成的,MemOp 指定 Memory 操作类型,SnpType 指定对 Device Cache 的操作,MetaField/MetaValue 指示 Host Cache 的状态。下文以这几个关键要素为例,介绍几种 Memory 访问。下文中,若 MetaValue 为有效字段,则省略 MetaField=Meta0-State,以 Meta=xx 替代;若 MetaValue=No-Op,则以 Meta=No-Op 替代。
对于 MemRdData 请求,若 Host 只想读取 Memory 的 Data,不涉及 Meta Data 的操作,Meta Field 应该置 Reserved。对于其他请求,若 MetaValue 为非 Reserved 的有效字段且 Device 支持 Meta 存储,Device 获取到 Memory Data 和 Meta Data 之后,还应将 Meta Data 写入 Memory 介质。
上图中,左图为一次需要更新 Meta Data 的 MemRd 操作流程,右图为无需 Meta 操作的 MemRd 流程。
Meta 是什么?
Meta 是 Data 的描述信息。M2S 中的 Meta 为 Host 给 Device 的暗示信息,告知 Device 该 Cacheline 在 Host 侧的 Cache 状态,而非 Device 内的状态,便于 DCOH 进行一致性相关操作;S2M 中的 Meta 用以描述该 Data Line 在若干 Host 内的缓存情况。
S2M 的 Meta 是做什么的?
指示当前 Data Line 在若干 Host 内的缓存状态,可用于粗粒度 Snoop Filter。
什么时候需要 Meta?其应用场景是怎样的?
多用于 Multi-Headed 场景下某 Host 对 Data Line 的较粗粒度的 Snoop Filter。
Meta Value 是怎么使用的?如何跟 Snoop、MemOp 配合的?
MemOp 指定 Memory 操作类型,SnpType 指定对 Device Cache 的操作,MetaField/MetaValue 指示 Host Cache 的状态。
Meta 操作跟 Snoop 操作有何却别?Meta 中的 Valid/Any/Shared 等等,跟 Snoop 有何区别?
Snoop 的对象通常为 Host Memory 在 Device Cache 内的副本,由 Host 内的 SF 来管理一致性;Meta 操作的对象为 Device Memory,可以存储在 Memory 媒质中,由 DCOH 维护缓存一致性。
目前只支持一个 Meta 吗?预留了多个 MetaField 是打算做什么?
目前只有一个 Meta,预留的 2 个 Meta 是描述更多信息,尚不明确具体意图。
Meta 功能是必选的吗?是怎么协商的?
是可选的。不支持 Meta 的话,M2S 的访问功能受限,比如 Host 在没有 Meta 的情况下无法指示 DCOH 以获取 Data Line Exclusive 权限。CXL3.0 Spec 中未指出具体协商机制。
Meta Data 需要 Memory 的支持吗?
需要 Memory 介质的支持。
|
🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥
⬆️ 返回顶部 ⬆️
本文发布于:2024-02-05 01:45:03,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170721213561888.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |