🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
Label Storage Area (LSA)是 CXL 内存设备中的一块标签存储区域,用以存放内存交织集(Interleave Set)、命名空间(Namespace)相关标签信息或其他供应商指定(Vendor-Specific)的信息,以防系统重启后数据丢失或软件出错。
对于一些内存设备,其 Interleave 和 Namespace 配置信息是跟设备绑定在一起的,即便设备被挪用,其配置也应保持不变。LSA 的用法似于 RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列,简称磁盘阵列)的写配置信息,通过把配置信息写入磁盘阵列中每块磁盘的 Reserved 区域,确保配置变动的时候相关配置信息仍保持不变。
CXL Memory 支持 DRAM(Dynamic Random Access Memory,动态随机存取存储器)等易失性存储设备,也支持 PMem(Persistent Memory)持久内存。
因此,在 CXL 存储设备中,DRAM 等易失性存储可以实现也可以不实现 LSA,PMem 持久内存必须实现 LSA。
LSA 结构布局如下图所示,其中包含两个 N*256B 的 Label Index Block 及若干个 256B 的 Label Slot。
CXL 允许的 LSA 最低配置为:
这样一来,最低配置时候的 LSA Size 为 2*256B+2*256B+1*256B=1280B。CXL 协议建议每个设备通过实现足够大的 LSA 以提供更多的配置灵活性。足够大是指:
Label Index Block 是 LSA 的 Header,用以指示以下信息:
对于一个 Label Index Block,只有其 Sig、MyOff、OtherOff 及 CheckSum 均正确时当前 Label Index Block 才有效。
Label Index Block 的 Seq 只能为 01/10/11 之一且两个 Label Index Block 的 Seq 不能相同。若 Seq=0,软件应忽略当前 Label Index Block。
若同时存在多个 Block 有效,则采用 Seq 较新(01->10->11 循环中相邻两者靠右的一个)的 Block。比如 01/10 中选择 10,10/11 中选择 11,11/01 中选择 01,另一个较旧的 Block 弃而不用。若不存在有效 Block,则当前 LSA 还未初始化。
CXL 采用原子更新的方法来更新 LSA 中的 Block。若需更新 Label Index Block 的内容,并非直接写到当前在用的 Block,而是更新另一个闲置状态的 Block 中,并把其 Seq 更新为下一个更新的 Seq 号。在 CheckSum 校验通过之后,更新之后的 Block 正式生效。
CXL LSA 的 Label Slot 支持三种标签:Region Label、Namespace Label 及 Vendor-specific Label,其中 Region Label 及 Namespace 通过 UUID(Universally Unique Identifier,通用唯一标识)进行识别(遵循 IETF RFC 4122 规范)。
每一个 Slot 在 Label Index Block 中都有 1b 来指示其闲忙状态。对于 256B Label Index,最多支持 1472 个(1472=(ffh-48h+1h)*8)Label Slot;对越 2*256B Label Index,最多支持 3520 个(1472+256*8)Label Slot。
Region Label 用以描述 PMem 的 Interleave Set,又称 Interleave Set Label。该 Label 内含有以下信息:
类似于 Interleave 配置,持久内存也可以分为多个 Namespace,每个 Namespace 定义了持久内存的 Volume 卷。
CXL LSA 中的 Namespace Label 用以描述持久分区,以内存卷的形式展示给软件,类似于 NVMe 的 Namespace 或 SCSI 的 LUN(Logic Unit Number)。该 Label 含有以下信息:
Vendor 自定义的标签。
跟 Label Index Block 更新策略相同,Label Slot 更新时并非直接更新到对应 Slot,而是将新的配置先行写到 Free Slot 中,更新完毕择机启用。Label Index Block 中的 Free 字段指示当前 Label Slot 的忙闲状态,任意时刻下至少应保证 1 个 Label Slot 处于 Free 空闲状态。
某些情况下,需要对多个 CXL Device 内的相关 Slot 进行同步更新。例如,当新定义 Region 或 Namespace Label 时,需要对所有 CXL Device 内的相关 Label 进行更新。为了应对该情况,每一类 Label 中均定义有 UPDATING 字段,用以指示多个 Device 正在更新,当前 Label 内信息暂不可用。软件遵循以下多设备之间的 UPDATING Flow:
基于以上 Flow,只有全部相关设备相关 Label 更新成功相关配置才可用;若更新过程中发现存在 Device 相关 Label 更新失败,则其他已更新 Label 的 Device,相关 Label 配置回滚,更新不可用。
CXL 内存设备不负责解读 LSA 相关内容,其只提供存储区域及响应 LSA 访问相关的 Mailbox 命令,由 Pre-boot Firmware 或 OS 等软件来配置 Interleave Set 和 Namespace。
软件基于 Mailbox 发送 Memory Device 命令集相关命令来访问 LSA 区域:
注意,Set LSA Mailbox 不需要原子操作,就简单更新相关范围就行。LSA 的原子性及一致性通过 Checksum 及 Free Slot 更新来实现。
注:Identify Memory Device 是一种 Device Command,用以访问 CXL Memory 设备被的基本信息,比如 FW 版本、可用容量、是否易失、LSA 大小、是否支持 Poison 处理、是否具备 QoS Telemetry 能力、是否支持动态容量等等。
|
🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥
⬆️ 返回顶部 ⬆️
本文发布于:2024-02-05 01:44:25,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170721197861882.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |