前言:
CXL(Compute Express Link)3.0 在 PCIe Hot-Plug 模型的基础上扩展了对缓存一致性(Coherency)和内存语义(Memory Semantics)的支持,同时定义了针对 Hot-Add(热添加) 和 Managed Hot-Remove(受控热移除) 的流程。以下是关键流程和机制解析:
1. Hot-Add(热添加)流程
目标:在系统运行时安全添加 CXL 设备(如 CXL 加速卡、内存扩展设备)。
步骤:
1. 物理插入:
○ 用户将 CXL 设备插入支持 Hot-Add 的插槽(如 CXL Root Port 或 Downstream Switch Port)。
○ 设备上电后触发 Hot-Plug 事件(如 PRESENT# 引脚变化)。
2. 硬件检测与链路初始化:
○ Root Port 或 Switch 检测到设备存在,启动链路训练(Link Training)。
○ 若设备为 eRCD(Exclusive Restricted CXL Device (formerly known as CXL 1.1 only Device). eRCD is a CXL device component that can operate only in RCD mode.),需检查 Disable_RCD_Training 位:
■ 若该位已设置(由系统固件在启动时配置),链路训练将失败,阻止操作系统发现 eRCD。
■ 若未设置,链路可能成功建立,但需依赖后续软件处理。
3. 软件发现与配置:
○ 系统软件(如 OS 或管理程序)通过 PCIe 配置空间发现新设备,读取其 CXL Capability Structures(如 DVSEC CXL 寄存器)。
○ 验证设备类型与功能:
■ 检查是否为 CXL.cache(缓存一致性设备)或 CXL.mem(内存扩展设备)。
■ 确认 Root Port 是否支持设备功能(通过 DVSEC Flex Bus Port Capability 寄存器)。
4. 资源初始化:
○ CXL.cache 设备:
■ 读取设备缓存大小(通过 DVSEC CXL Capability2 寄存器),与主机侦听过滤器(Snoop Filter)容量比对。
■ 配置 Cache_SF_Coverage 字段(在 DVSEC CXL Control 寄存器中),限制设备使用的侦听过滤器资源,避免过载。
○ CXL.mem 设备:
■ 通过 CDAT(Coherent Device Attribute Table) 获取内存性能属性(如延迟、带宽),配置 HDM(Host Managed Device Memory)解码器,实现内存地址映射与交织(Interleaving)。
○ 若设备支持电源管理初始化(PM Init),需等待其完成后启用功能。
5. 功能启用:
○ 软件启用设备的 CXL.cache 或 CXL.mem 能力,将其纳入系统一致性域。
○ 更新全局资源分配(如内存地址空间、能源预算)。
2. Managed Hot-Remove(受控热移除)流程
目标:安全移除正在运行的 CXL 设备,避免数据丢失或系统崩溃。
步骤:
1. 用户触发移除请求:
○ 通过物理按钮或软件界面发起移除请求,触发 Hot-Plug 事件。
2. 软件准备:
○ CXL.cache 设备:
■ 使用 Cache Writeback and Invalidation 能力,强制设备回写所有脏缓存行(Modified Cachelines),确保数据一致性。
○ CXL.mem 设备:
■ 若启用了 CXL.mem 隔离(Isolation),停止对设备内存的访问。
■ 若未隔离,需通过操作系统卸载相关内存区域(如 Linux 中使用 offline_memory)。
3. 设备停用:
○ 软件禁用设备的 CXL 功能,将其从一致性域中移除。
○ 释放资源(如 HDM 解码器、侦听过滤器条目)。
4. 物理移除:
○ 软件通知用户可安全移除设备。
○ 设备下电后,硬件触发 Link Down 事件,系统清理残留状态。
3. Surprise Hot-Remove(意外热移除)处理
场景:设备被直接拔出,无预先通知。
硬件保护:
● 电气安全:所有 CXL 设备和 Switch 必须设计为支持意外拔插,避免短路或信号损坏。
● 链路隔离:
○ CXL.cache 隔离:若设备缓存中有脏数据且未启用隔离,主机访问可能超时,需依赖 Downstream Port Containment 能力隔离错误。
○ CXL.mem 隔离:若未启用 HDM 隔离,主机对设备内存的访问可能失败,需触发错误恢复机制。
软件恢复:
● 检测到 Link Down 后,标记设备为失效状态。
● 清理相关资源(如释放内存映射、更新 CDAT)。
4. 关键寄存器与能力
5. 设计注意事项
● eRCD 的特殊处理:
○ eRCD 热添加可能导致不可预测行为,需通过 Disable_RCD_Training 位阻止链路训练,或依赖 Hot-Plug 处理程序标记为失败。
● 能源管理:
○ Hot-Add 后需重新评估系统能源预算(GPF Energy Budget),必要时降频或限制设备功耗。
● 固件与软件协作:
○ 系统固件需在启动阶段配置 Disable_RCD_Training,操作系统需实现 CXL 感知的 Hot-Plug 驱动。
6.CXL type3 设备热添加流程
- 系统固件可能为将来的热添加准备系统(例如,填充资源以满足热添加适配器的需求)。
- 用户在空插槽中热添加 CXL 内存扩展器。下游端口以 CXL VH 模式启动链路。
- 生成 PCIe 热插拔中断。
- 总线驱动程序执行标准 PCIe 热添加操作,从而启用 CXL.io。
此过程将 BAR 分配给设备。 - CXL 感知软件(例如,操作系统中的 CXL 总线驱动程序、设备驱动程序或其他软件实体)探测设备上的 CXL DVSEC 功能并确保 HDM 处于活动状态。内存可以由硬件、适配器上的 FW 或设备驱动程序初始化。
- CXL 感知软件在设备、交换机和主机桥(例如 GPF DVSEC、HDM 解码器)上配置 CXL DVSEC 结构。
- CXL 感知软件将新内存及其属性(例如延迟和带宽)通知操作系统内存管理器。内存管理器处理请求并将新内存添加到其分配池中。
- 可以通过注意指示器或其他用户界面通知用户成功完成。
7.CXL type 3 设备管理的热移除流程
- 用户通过注意按钮或其他用户界面发起热移除请求。
- 触发标准 PCIe 热移除流程(例如,如果使用了注意按钮,则通过热插拔中断)。
- CXL 感知软件(例如,操作系统中的 CXL 总线驱动程序、设备驱动程序或其他软件实体)探测设备上的 CXL DVSEC 功能并确定活动内存范围。
- CXL 感知软件请求操作系统内存管理器腾出这些范围。
- 如果内存管理器无法满足此请求(例如,由于存在固定页面),CXL 感知软件将向热删除处理程序返回错误,该处理程序将通知用户操作失败。
- 如果内存管理器能够满足此请求,CXL 感知系统软件将重新配置 CXL 交换机和根端口中的 HDM 解码器。接下来是标准 PCIe 热删除流程,该流程将处理 CXL.io 资源释放。
- 如果 PCIe 热删除流程失败,则会通知用户热删除操作失败;否则,将通知用户热删除流程已成功完成。
8. CXL type1 设备热添加流程
- 系统固件可能为将来的热添加做好系统准备(例如,填充 MMIO
资源以满足要热添加的适配器的需求)。 - 用户在空插槽中热添加 CXL 类型 1 设备。下游端口
在 68B Flit 模式下以 CXL VH 操作启动链路。 - 生成 PCIe 热插拔中断。
- 总线驱动程序执行标准 PCIe 热添加操作,从而启用
CXL.io。此过程将 BAR 分配给设备。 - CXL 感知软件(例如,操作系统中的 CXL 总线驱动程序、设备驱动程序或其他
软件实体)探测设备上的 CXL DVSEC 功能。如果设备热添加到无法容纳启用 CXL.cache 的设备的根端口下方,则拒绝热添加。如果设备的缓存大于主机监听过滤器可以处理的缓存,则热添加将被拒绝。用户可能会通过注意指示器或其他用户界面收到通知。 - 如果上述检查通过,CXL 感知软件将在设备和交换机上配置 CXL DVSEC 结构(例如 GPF DVSEC)。
- 热添加流程已完成。用户可能会通过注意指示器或其他用户界面收到成功完成的通知。