CXL 存储设备标签存储区(LSA)

news2024/12/22 23:36:46


🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/132553168】。
  • ⚠️ 本文目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net
  • 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)

文章目录

  • 1. LSA 概念
  • 2. LSA 构成
    • 2.1 Label Index Block
      • 2.1.1 Block 有效性
      • 2.1.2 Block 更新
    • 2.2 Label Slot
      • 2.2.1 Region (Interleave Set) Labels
      • 2.2.2 Namespace Labels
      • 2.2.3 Vendor-specific Labels
      • 2.2.4 Label Slot 更新
  • 3. LSA 访问
  • 4. 参考


1. LSA 概念

  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)持久内存。

  • 对于 DRAM 易失性存储设备,由于内存设备的增删,每次系统重启(Re-Boot)后的 CXL 内存交织策略都有可能不同。考虑到易失性存储设备在掉电后不保留原数据,Re-Boot 后的内存交织方案变动并不会影响主机软件。
  • 对于 PMem 非易失性存储设备,掉电后相关数据继续保留在原位置,若 Re-Boot 后内存交织方案改变,原数据地址发生变化,主机软件就无法正确找到原数据,从而导致主机软件运行出错或访问到了错误的数据。

因此,在 CXL 存储设备中,DRAM 等易失性存储可以实现也可以不实现 LSA,PMem 持久内存必须实现 LSA。



2. LSA 构成

  LSA 结构布局如下图所示,其中包含两个 N*256B 的 Label Index Block 及若干个 256B 的 Label Slot。

在这里插入图片描述

CXL 允许的 LSA 最低配置为:

  • 2 个 256B 的 Label Index Block ,其一当前在用,其一用于更新;
  • 2 个 Label Slot ,Region Label 及 Namespace Label 各一;
  • 1 个 Free Slot ,用于更新 Label Slot。要更新某个 Slot 的时候不是直接更新相关 Slot,而是更新到 Free Slot 中,这样在更新生效前不影响原来 Slot 数据的使用。

  这样一来,最低配置时候的 LSA Size 为 2*256B+2*256B+1*256B=1280B。CXL 协议建议每个设备通过实现足够大的 LSA 以提供更多的配置灵活性。足够大是指:

  • 每个 Device 分配两个 Region Label;
  • 对于可用的持久内存容量,每 8GB 空间分配一个 Namespace Label。

2.1 Label Index Block

  Label Index Block 是 LSA 的 Header,用以指示以下信息:

  • Sig,Label Index Block 的签名,内容为"NAMESPACE_INDEX\0"
  • Flags,尚未定义,为 0
  • LabelSize,用以指示单个 Label 的大小,1->256B,2->512B,当前仅支持 256B
  • Seq,序列号,仅低 2b 有效,01->10->11 三个值依次循环使用
  • MyOff,当前 Index Block 在 LSA 内的偏移
  • MySize,当前 Index Block 的大小,单位为 256B
  • OtherOff,另一 Index Block 在 LSA 内的偏移
  • LabelOff,当前 LSA 内第一个 Label 的偏移
  • NSlot,当前 LSA 内的 Label Slot 总数
  • Major/Minor,当前布局的主/副版本号
  • CheckSum,Label Index Block 内所有字段的 Fletcher64 校验和
  • Free,每一 bit 对应一个 Label Slot,指示相关 Label Slot 为空闲还是在使用中

2.1.1 Block 有效性

  对于一个 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 还未初始化。

2.1.2 Block 更新

  CXL 采用原子更新的方法来更新 LSA 中的 Block。若需更新 Label Index Block 的内容,并非直接写到当前在用的 Block,而是更新另一个闲置状态的 Block 中,并把其 Seq 更新为下一个更新的 Seq 号。在 CheckSum 校验通过之后,更新之后的 Block 正式生效。

2.2 Label Slot

  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。

2.2.1 Region (Interleave Set) Labels

  Region Label 用以描述 PMem 的 Interleave Set,又称 Interleave Set Label。该 Label 内含有以下信息:

  • Type,用以指示当前的 Label 类型,目前采用 UUID= 529d7c61-da07-47c4-a93f-ecdf2c06f444 来指示
  • UUID,当前 Region 的 UUID,不同设备上的同一 Region 采用同一 UUID
  • Flags,目前 0x00000008 指示 UPDATING,用以多设备 Slot 之间的协同更新
  • NLabel,基于当前 Interleave Set 的 Device 数目,等同于 Interleave Way
  • Position,当前 Device 在 Interleave Set 中的位置,从 0 开始累加
  • DPA,该 Region 在当前 Device 中的设备物理地址(Device Physical Address)
  • RawSize,Interleave Set 的 Size
  • HPA,Interleave Set 对于的主机物理地址(Host Physical Address)
  • Slot,当前 Slot 在 LSA 中的 Index 索引号
  • IG,Interleave Granularity,交织粒度
  • Alignment,期望的对齐边界,支持 256MB 和 512MB,也支持非对齐
  • Checksum,校验和

2.2.2 Namespace Labels

  类似于 Interleave 配置,持久内存也可以分为多个 Namespace,每个 Namespace 定义了持久内存的 Volume 卷。

  CXL LSA 中的 Namespace Label 用以描述持久分区,以内存卷的形式展示给软件,类似于 NVMe 的 Namespace 或 SCSI 的 LUN(Logic Unit Number)。该 Label 含有以下信息:

  • Type,用以指示当前的 Label 类型,目前采用 UUID= 68bb2c0a-5a77-4937-9f85-3caf41a0f93c 来指示
  • UUID,同一 Namespace 的不同 Label 应采用同一 UUID
  • Name,Namespace 的名称
  • Flags,目前 0x00000008 指示 UPDATING,用以多设备 Slot 之间的协同更新
  • NRange,若 Device 提供的存储容量在地址上不连续,该字段用以指示不连续地址范围的数量,每一段联系的地址采用一个 Label 进行描述
  • Position,当前 Range 在所有 Range 内的位置,从 0 开始累加
  • DPA,该 Region 在当前 Device 中的设备物理地址(Device Physical Address)
  • RawSize,当前 Range 的 Size
  • Slot,当前 Slot 在 LSA 中的 Index 索引号
  • Alignment,期望的对齐边界,支持 256MB 和 512MB,也支持非对齐
  • RegionUUID,包含当前 Namespace 的 Region 的 UUID
  • AddressAbstractionUUID,地址抽象 UUID,由软件指示该 UUID 的用法
  • LBASize,当前 Namespace 逻辑块(Logic Block)的 Size
  • Checksum,校验和

2.2.3 Vendor-specific Labels

  Vendor 自定义的标签。

2.2.4 Label Slot 更新

  跟 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:

  • 软件将所有需要更新 Label 的 CXL Device 的 LSA Label UPDATING 字段置一;
  • 软件更新所有设备的 Label 相关字段;
  • UPDATING 字段清零,表示更新可用。

  基于以上 Flow,只有全部相关设备相关 Label 更新成功相关配置才可用;若更新过程中发现存在 Device 相关 Label 更新失败,则其他已更新 Label 的 Device,相关 Label 配置回滚,更新不可用。



3. LSA 访问

  CXL 内存设备不负责解读 LSA 相关内容,其只提供存储区域及响应 LSA 访问相关的 Mailbox 命令,由 Pre-boot Firmware 或 OS 等软件来配置 Interleave Set 和 Namespace。

  软件基于 Mailbox 发送 Memory Device 命令集相关命令来访问 LSA 区域:

  • Identify Memory Device Mailbox 命令获取 LSA 的 Size;
  • Get LSA 命令读 LSA 相关字段,命令格式为 4B Offset + 4B Length;
  • Set LSA 命令写 LSA 相关字段,命令格式为 4B Offset + 4B Rsvd + nB Data。

  注意,Set LSA Mailbox 不需要原子操作,就简单更新相关范围就行。LSA 的原子性及一致性通过 Checksum 及 Free Slot 更新来实现。

  注:Identify Memory Device 是一种 Device Command,用以访问 CXL Memory 设备被的基本信息,比如 FW 版本、可用容量、是否易失、LSA 大小、是否支持 Poison 处理、是否具备 QoS Telemetry 能力、是否支持动态容量等等。



4. 参考

  1. CXL Base Spec, r3.0
  2. SSD 之 Namespace - 知乎 (zhihu.com)
  3. NVME-Namespace - 可口可乐嗨 - 博客园 (cnblogs.com)
  4. NVMe SSD 中 namespace 的介绍和创建 | 陈浩的个人博客 (cighao.com)
  5. RAID 磁盘阵列是什么(一看就懂) - 知乎 (zhihu.com)
  6. RAID 磁盘阵列的原理与搭建 - 知乎 (zhihu.com)
  7. Fast Computation of Fletcher Checksums (intel.com)
  8. 弗莱彻的校验和| 码农家园 (codenong.com)
  9. 英特尔® 傲腾™ 持久内存 (intel.cn)
  10. 关于持久内存你了解多少?- 知乎 (zhihu.com)
  11. 持久内存(1):Persistent Memory 介绍 - 简书 (jianshu.com)
  12. 操作系统概念中,分区和卷的区别是什么?- 知乎 (zhihu.com)
  13. 持久卷| Kubernetes
  14. IETF RFC 4122 的 UUID_fothin 的博客-CSDN 博客
  15. UUID 那些事儿 - 知乎 (zhihu.com)
  16. deepin 23 Preview 揭秘:原子更新 – 深度科技社区

— END —


🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥

⬆️ 返回顶部 ⬆️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/957557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven基础的快速入门

导读 概念:Maven是apache旗下的一个开源项目,是一款用于管理和构建Java项目的工具 Maven的作用: 1.依赖管理:放便快捷的管理项目依赖的资源(jar包),避免版本冲突的问题 2.统一项目结构&…

Flink中RPC实现原理简介

前提知识 Akka是一套可扩展、弹性和快速的系统,为此Flink基于Akka实现了一套内部的RPC通信框架;为此先对Akka进行了解 Akka Akka是使用Scala语言编写的库,基于Actor模型提供一个用于构建可扩展、弹性、快速响应的系统;并被应用…

Git使用——GitHub项目回退版本

查看历史版本 使用git log命令查看项目的历史版本: 可以一直回车,直到找到想要的历史版本,复制commit后面的那一串id。 恢复历史版本 执行命令 git reset --hard 版本号: git reset --hard 39ac3ea2448e81ea992b7c4fdad9252983…

防溺水方案:安防监控视频/智能分析网关AI识别技术助力防溺水监管

溺水是造成许多人死亡的主要原因之一。无论是在游泳池、河流、湖泊还是海洋中,溺水都可能导致人们失去生命。即使没有造成死亡,溺水所引发的窒息和水下活动中的创伤等伤害,有可能引起长期甚至永久性的身体损伤,对个人和家庭造成巨…

keras深度学习框架通过卷积神经网络cnn实现手写数字识别

昨天通过keras构建简单神经网络实现手写数字识别,结果在最后进行我们自己的手写数字识别的时候,准确率堪忧,只有60%。今天通过卷积神经网络来实现手写数字识别。 构建卷积神经网络和简单神经网络思路类似,只不过这里加入了卷积、池…

分布式 - 服务器Nginx:基础系列之Nginx配置文件结构

文章目录 1.Nginx 配置文件结构2. Nginx 全局块的指令01. user 指令02. master_process 指令03. worker_processes 指令04. deamon 指令05. pid 指令06. error_log 指令07. include 指令 3. Nginx events块的指令01. accept_mutex 指令02. multi_accept 指令03. worker_connect…

【阅读笔记】如何正确地学习编程?

2023年9月1日,周五上午 本次阅读的文章来自: 为什么我学个 JAVA 就已经耗尽所有,而有些人还能同时学习多门语言? - invalid s的回答 - 知乎 https://www.zhihu.com/question/485917018/answer/2216877333 令我感到有趣的是&#…

Flink的checkpoint是怎么实现的?

分析&回答 Checkpoint介绍 Checkpoint容错机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保证应用流图状态的一致性。Flink的Checkpoint机制原理来自“Chandy-Lamport alg…

什么是BEM命名规范(Block-Element-Modifier Notation)?它有什么优势?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ BEM命名规范(Block-Element-Modifier Notation)⭐ BEM命名结构⭐ 优势⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎…

【材料整理】-- Python、Matlab中常用调试代码,持续更新!

文章目录 Python、Matlab中常用调试代码,持续更新!一、Python常用调试代码:二、Matlab常用调试代码: Python、Matlab中常用调试代码,持续更新! 一、Python常用调试代码: 1、保存.mat文件 from…

Servlet学习总结(Request请求与转发,Response响应,Servlet生命周期、体系结构、执行流程等...)

Override 是Java中的注解(Annotation),它用于告诉编译器该方法是覆盖(重写)父类中的方法。当我们使用Override注解时,编译器会检查当前方法是否正确地覆盖了父类中的方法,如果没有覆盖成功&…

【陈老板赠书活动 - 10期】- 【MySQL从入门到精通】

陈老老老板🦸 👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨‍💻本文简述:生活就像海洋,只有意志坚强的人,才能到达彼岸。 👨‍&am…

系统架构技能之设计模式-单件模式

一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的,因为很多的好朋友也比较关注这方面的内容,所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给大家做个简单讲解,我这里只是抛砖引玉&#xff0c…

MR混合现实汽车维修情景实训教学演示

MR混合现实技术应用于汽车维修课堂中,能够赋予学生更加真实,逼真地学习环境,让学生在情景体验中不断提高自己的专业能力。 MR混合现实汽车维修情景实训教学演示具体体现在: 1. 虚拟维修指导:利用MR技术,可…

绘图系统二:多图绘制系统

文章目录 坐标轴控件坐标系控件绘制多组数据源代码 本文基于:📈从0开始实现一个三维绘图系统 坐标轴控件 三个坐标轴xyz从外观上看其实毫无区别,这种标签和输入框的组合十分常见,为了便于调用,最好实现一个类。 tki…

高级时钟项目

高级时钟项目 笔者来介绍一下一个简单的时钟项目,主要功能就是显示时间 1、背景 2、数码管版本(第一版) 3、OLED屏幕版本(第二版) 3.1、Boot 3.2、app 3.3、上位机 界面一:时间天气显示 界面二 &…

centos7部署时间同步(ntp)服务器

centos7部署时间同步(ntp)服务器 这里搭建ntp服务器,服务端和客户端,客户端去拉取服务端的时间,为自己所用。 小白教程,一看就会,一做就成。 1.服务端搭建 a.安装ntp yum -y install ntp* …

【广州华锐互动】数字孪生智慧楼宇3D可视化系统:掌握实时运行状态,优化运营管理

在过去的几年中,科技的发展极大地改变了我们的生活和工作方式。其中,三维数据可视化技术的出现,为我们提供了全新的理解和观察世界的方式。特别是在建筑行业,数字孪生智慧楼宇3D可视化系统的出现,让我们有机会重新定义…

1.9 动态解密ShellCode反弹

动态解密执行技术可以对抗杀软的磁盘特征查杀。其原理是将程序代码段中的代码进行加密,然后将加密后的代码回写到原始位置。当程序运行时,将动态解密加密代码,并将解密后的代码回写到原始位置,从而实现内存加载。这种技术可以有效…

“金九”行情如期而至?六大券商看市

八月最后一个交易日,股指小幅低开震荡后逐波下行,成交量有所萎缩。市场仍处于对管理层组合政策的消化过程之中。热点主要集中在芯片领域。 展望九月,机构认为,当前市场已处于底部阶段,对于基本面及风险的悲观定价已经…