本文主要是介绍CXL Meta Data 介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/131841883】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
文章目录
- 1. MetaData 概念
- 2. MetaData@CXL
- 3. CXL MetaData 用法
- 4. Q&A
- 5. 参考
在 CXL.mem 协议 M2S Req/RwD、S2M NDR/DRS Message 中均有两个 Meta Data 相关字段:Meta Field 及 Meta Value。关于 Meta Data,初读会较为费解,本文对 Meta Data 进行部分解读。
1. MetaData 概念
Meta Data,元数据,描述数据的数据,用以描述数据的属性信息,便于对数据进行组织、查找和理解。如果把一本书的正文内容作为数据,那么该本书的书名、作者、出版社、目录、页码等信息都是元数据。
再回到 Memory。我们知道,Cache 中的 Cacheline 有相关 Tag 来指示当前 Cacheline 的 Cache 状态,同样,内存中也可以有若干组 Meta Data 来描述当前 Data 的属性。
2. MetaData@CXL
CXL 中的 Meta Data 可认为 Host 给 Device 的暗示信息,告知 Device 该 CacheLine 在 Host Cache 的当前状态,而非 Device Cache 内的状态,便于 DCOH 进行一致性相关操作。CXL Meta Data 相关操作是 CXL Memory 的一项可选属性,只对带有 CXL.mem 的设备有用,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 操作,在 CXL.mem 的 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 编码及释义如下:
- Invalid(2’b00),Host 没有该 Cacheline 的副本,该 Cacheline 在 Host 内是 Invalid 的。DCOH 在收到该消息后可以授予 Device 对该 Cacheline 的独享权限。如果 MemOp=MemInv 且 SnpType=SnpInv,Device 应该把该 Cacheline Flush 到 Device Memory 中去,不然数据就丢了(双方都没有备份)。
- Any(2’b10),Host 告知 Device 该 Cacheline 可能在 Host Cache 内有备份,状态可能为 MES,常用于获取 Cacheline 的 Exclusive 权限。Device 收到该通知后,大概能知道 Host 可能要更新这个 Line 了,Device 在解决跟 Host 的一致性之前不能创建副本。
- Shared(2’b11),Host 告知 Device 该 Line 在 Host 内可能有状态为 Shared 的备份,能确定的是该 Line 在 Host 内非 ME 独享。Device DCOH 在不通知 Host 的情况下就可以搞一份状态为 Shared 的副本,但是想要独享的话,必须先解决跟 Host 的一致性问题。
- Reserved(2’b01)。
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 的缓存情况便知一二。
3. CXL MetaData 用法
对于 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 替代。
- Host 想要获取 Device Memory 某 Data Line 的 Exclusive 权限,发送 MemOp=MemRd/MemInv/MemInvNT、SnpType=SnpInv、Meta=Any 的 M2S Req。对于 MemRd,需要有 Cmp-E 及 MemData 反馈给 Host;对于 MemInv*,则只需反馈 Cmp-E 无需反馈 MemData。
- Host 想要获取 Device Memory 某 Data Line 的 Shared 权限,发送 MemOp=MemRd、SnpType=SnpData、Meta=Shared 的 M2S Req。Device 反馈 Cmp-S/E 及 MemData 给 Host。
- Host 想要读取 Device Memory 某 Data Line 的数据且不会进行 Cache,发送 MemOp=MemRd、SnpType=SnpInv/SnpCur、Meta=Invalid 的 M2S Req。Device 反馈 Cmp 及 MemData 给 Host 并根据 SnpType 决定是否将 Device Cacheline 数据 Flush 到 Device Memory。
- Host 想要将 Device Cache 内的 Cacheline Invalid 掉,发送 MemOp=MemInv、SnpType=SnpInv、Meta=Invalid 的 M2S Req。
- Host 打算将 Host Cache 内的 Data Line 写回到 Device Memory,发送 MemOp=MemWr、SnpType=No-Op、Meta=Invalid/Any 的 M2S RwD。Device 反馈 Cmp 给 Host。
对于 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 流程。
4. Q&A
-
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 介质的支持。
5. 参考
- CXL Base Spec, r3.0
- 什么是元数据(Metadata)_steventian72 的博客-CSDN 博客
|
🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥
⬆️ 返回顶部 ⬆️
这篇关于CXL Meta Data 介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!