CXL中Dynamic Capacity Device (DCD)简介

1.3.1 DCD概念
  • 动态容量特性:是 CXL 内存设备的一个特性,可在无需重置设备的情况下动态改变内存容量。实现该特性的 CXL 内存设备叫动态容量设备(DCD)。
  • DPA 范围细分:与传统的 CXL 内存设备支持的 DPA 范围不同,动态容量的 DPA 范围细分为 1 到 8 个 DC  Region每个 Region又被 DCD 细分为固定大小的 DC 块
  • 主机软件与 DCD 交互:主机软件利用一个或多个 HDM 解码器对潜在的最大容量进行编程,以覆盖整个 DPA 范围的已配置 Region。DCD 控制 DC 块的分配,并在分配发生变化时通过事件通知主机,还通过扩展列表(Extent List)来传达 DC 块的状态,列表描述了主机可访问的所有 DC 块的起始 DPA 和长度。
  • 扩展列表细节:扩展列表不包含仍未被 添加动态容量响应” 命令接受的扩展, 但包含了仍在等待主机通过 释放动态容量” 命令接受释放的扩展。图 9 - 22 展示了典型的扩展列表,图 9 - 23 展示了 DC 块被多个主机共享的扩展列表,通过扩展列表可在不改变总潜在动态容量的 HDM 编程的情况下,控制主机对部分内存的访问增减 。

动态容量由设备定义,被组织成 1 到 8 个 DC Region。每个 DC Region有独特的最大潜在容量、支持的块大小和内存属性,Region起止以 256MB 对齐,Region内首个数据块起始由 DCD 控制并与配置的动态容量块大小对齐。Extent List基于设备物理地址(DPA),单个列表可描述所有Region的范围,主机获取的Extent List包含设备分配给主机的每个范围的起始 DPA 和长度,Region按 DPA 递增顺序使用。DCD 控制为每个主机分配给每个Region的 DPA 范围,且设备向各主机公开的 DPA 范围相互独立。对于主机对未分配 DPA 的读操作,设备行为在表 8-27 中规定;对未分配 DPA 的写操作或对只读 DC Region DPA 的写操作,设备将丢弃写入并发送否定响应(NDR)。

1.3.2 DC Region属性与配置
  1. 属性描述位置每个 DC Region所关联的属性在设备的 CDAT(Component Descriptor Attribute Table,组件描述符属性表)中予以描述。这意味着 CDAT 详细记录了各个 Region诸如最大潜在容量、支持的块大小以及内存属性等关键信息,这些信息是设备管理和主机识别 DC Region特性的重要依据。
  2. Region与 DSMAS 关联:设备会将每个受支持的Region与一个特定的 DSMAS(Dynamic Shared Memory Attribute Structure,动态共享内存属性结构)实例相关联。通过这种关联,主机能够判断出与每个给定 Region相关联的内存属性。例如,主机可以依据 DSMAS 实例中的信息,了解某个 Region是适合存储高速缓存数据,还是用于普通数据存储等,从而在访问该 Region时采取合适的操作策略。
  3. 设备报告要求:支持动态容量的设备必须在一个或多个 CDAT DSMAS 结构中报告其已配置的 Region。并且,在每个这样的结构中,都需要设置 Dynamic Capacity DSMAS Flag(动态容量 DSMAS 标志),以此来表明该结构所涉及的范围是支持动态容量的。这一标志就像是一个 “标签”,让主机能够快速识别出哪些 Region具备动态容量调整的功能,进而进行相应的操作和管理。
  4.  Region配置参数共享:对于那些实例化了多个 LD(Logical Device,逻辑设备)的设备,包括 MLDs(Multi-Logical Devices,多逻辑设备)和 Multi-Headed devices(多头设备),会跨该设备中的所有 LD 共享某些Region配置参数,具体共享的参数在表 7 - 67 中有明确规定。这种共享机制有助于在多逻辑设备环境下,实现对动态容量 Region的统一管理和协调,避免因参数不一致而导致的混乱和错误。例如,在某些存储设备中,多个逻辑设备可能共享同一套关于 DC Region起始地址和长度的配置参数,以确保数据存储和访问的一致性。
1.3.3 LD-FAM与GFD DCD差异

在 CXL 规范的内存管理体系中,LD - FAM DCD(基于逻辑设备的 Fabric - Attached Memory 的动态容量设备)和 GFD(Global - FAM Device,全局 FAM 设备)在内存分配和绑定操作上存在显著差异,这也导致它们需要不同的 DCD 管理命令

  1. LD - FAM DCD 的操作特点:LD - FAM DCD 在一个操作中完成内存容量的分配和将其绑定到特定 Host ID 的任务。这种方式较为直接,适用于对特定主机进行快速的内存资源分配。在一个多主机的计算环境中,如果某个主机需要额外的内存资源,系统可以通过相应的命令,让 LD - FAM DCD 迅速为该主机分配所需的内存,并将其与该主机的 ID 进行绑定,使得该主机能够立即使用这些内存资源,提高了资源分配的效率和及时性。
  2. GFD 的操作特点:GFD 的操作则更为复杂和灵活。它首先将动态容量分配给一个命名的 Memory Group(内存组),这一步是对内存资源进行初步的分组和规划。之后,再通过单独的操作将特定的 Host IDs 绑定到命名的 Memory Groups。这种方式使得 GFD 在管理内存资源时,可以更好地实现资源的共享和灵活调配。多个主机可以共享同一个 Memory Group 中的内存资源,GFD 可以根据不同主机的需求和系统的运行状态,动态地调整主机与 Memory Group 之间的绑定关系,提高内存资源的利用率。
  3. 管理命令的差异:由于 LD - FAM DCD 和 GFD 在内存分配和绑定操作上的不同,它们所需的 DCD 管理命令也有所不同。LD - FAM DCD 的管理命令更侧重于直接的主机 - 内存绑定操作,以满足特定主机对内存的快速需求。而 GFD 的管理命令则需要支持内存组的分配、主机与内存组的绑定以及动态调整这些关系等功能。在实际的系统管理中,针对 GFD 可能需要专门的命令来创建和管理内存组,以及将主机 ID 与内存组进行关联和解关联;而对于 LD - FAM DCD,则需要命令能够快速实现内存到特定主机的分配和绑定。这些不同的管理命令确保了两种不同类型的设备能够在 CXL 架构中高效地管理内存资源,满足不同的应用场景和系统需求。
1.3.4 DCD配置流程
1.3.4.1 使用动态容量的基本序列
  1. 验证设备支持动态容量
    • 主机首先需要利用 Get Supported Logs sub - list(获取支持的日志子列表,参考章节 8.2.10.5.6)或者 Get Supported Logs(获取支持的日志,参考章节 8.2.10.5.1)以及 Get Log(获取日志,参考章节 8.2.10.5.2)这几个命令,来检索 Command Effects Log(CEL,命令效果日志)。
    • 通过检查 CEL,主机能够确认必要的动态容量命令是否被返回。如果这些命令在 CEL 中出现,那就表明该设备支持动态容量功能。这一步就如同在使用一个新设备前,先检查它是否具备我们所需的特定功能,只有确认设备支持动态容量,后续的操作才有意义。
  2. 获取Region配置信息并编程 HDM 解码器
    • 主机接着要向设备发出 Get Dynamic Capacity Configuration(获取动态容量配置)命令。设备在接收到该命令后,会向主机报告其可用Region的数量,以及每个 Region的基地址、长度、块大小和 DSMAD Handle(Dynamic Shared Memory Attribute Descriptor Handle,动态共享内存属性描述符句柄)。这些信息详细描述了每个 DC  Region的关键参数,主机需要根据这些参数来进行后续的操作。
    • 主机需要根据从 Get Dynamic Capacity Configuration 命令获取的数据,为每个 Region的基地址和长度对 HDM(Host - managed DRAM,主机管理的动态随机存取存储器)解码器进行适当的编程。主机可能会使用一个或多个 HDM 解码器来覆盖设备报告的当前动态容量配置。强烈建议主机提供足够大小的解码器,以涵盖所有已启用的 Region。这是因为如果解码器的大小不足,主机可能无法接受 DCD(Dynamic Capacity Device,动态容量设备)发出的一些 Add Dynamic Capacity(添加动态容量)请求。例如,如果一个 Region的长度超出了解码器能够处理的范围,主机就无法正确处理该 Region的动态容量添加操作,从而影响系统的正常运行。
  3. 获取初始Extent List并使用内存
    • 主机通过一次或多次调用 Get Dynamic Capacity Extent List(获取动态容量Extent List,参考章节 8.2.10.9.9.2)命令,来检索初始的 Extent List
    • 如果检索到的列表中包含 extents(范围),那就意味着这些内存可以立即被主机利用。例如,主机可以将应用程序的数据存储到这些范围内,或者进行数据的读取和处理等操作,从而实现对动态容量内存的有效使用。

1.3.4.2 为主机添加动态容量的基本序列
  1. DCD 添加事件记录并通知主机
    • DCD 会向设备的 Dynamic Capacity Event Log(动态容量事件日志)中添加一个 Add Capacity Event Record(添加容量事件记录,参考章节 8.2.10.2.1.6)。这个记录包含了正在被添加的容量的范围信息。
    • 同时,DCD 会设置 Event Status register(事件状态寄存器)中的 Dynamic Capacity Event Log bit(动态容量事件日志位)。如果相关中断功能已启用,DCD 还会生成一个中断,以此来提醒主机有新的事件记录产生。
    • 在执行添加容量操作时,对于每一个要添加的 extent(范围),DCD 都会按照上述方式进行操作。必要时,DCD 会使用 More flag(更多标志)来避免日志溢出,并且允许主机在需要时处理这些事件,以完成整个添加容量的操作。如果在任何时候 Dynamic Capacity Event Log 发生溢出,主机需要使用 Get Dynamic Capacity Extent List 命令来检索当前主机可访问的 DC 块的列表。例如,当 DCD 要为主机添加多个连续的内存块作为动态容量时,它会依次为每个内存块添加相应的事件记录,并根据情况合理使用 More flag,确保事件日志的完整性和准确性。
  2. 主机响应添加容量请求
    • 当主机软件检索到包含要添加容量范围的 Add Capacity event record(添加容量事件记录)时,它需要通过单次调用 Add Dynamic Capacity Response(添加动态容量响应,参考章节 8.2.10.9.9.3)命令,向设备回复关于它实际添加的准确容量的更新范围。这使得主机能够精确控制它希望使用的新增容量的数量。主机实际使用的新增容量可能小于在添加容量事件中发送的容量,甚至可以为 0。例如,设备提供了 1GB 的新增动态容量,但主机根据自身当前的需求,可能只需要使用其中的 512MB,那么主机就可以在回复中指定这 512MB 的范围,设备会根据主机的回复进行相应的配置和管理。
  3. 检查有毒地址(若设备支持)
    • 如果设备支持,主机可以利用 Get Poison List(获取有毒列表)或者 Scan Media(扫描介质)命令,并结合新增容量范围的 Starting DPA(起始设备物理地址)和 Length(长度),来检查是否存在 poisoned addresses(有毒地址)。有毒地址可能会导致数据损坏或系统错误,因此在使用新增容量之前进行这样的检查是非常必要的,能够确保数据的安全性和系统的稳定性。

1.3.4.3 为主机释放动态容量的基本序列
  1. DCD 添加释放容量事件记录并通知主机
    • DCD 会向设备的 Dynamic Capacity Event Log 中添加一个 Release Capacity Event Record(释放容量事件记录,参考章节 8.2.10.2.1.6)。该记录包含了它请求释放的容量的范围信息。
    • 同样地,DCD 会设置 Event Status register 中的 Dynamic Capacity Event Log bit。若中断功能已启用,DCD 会生成中断以提醒主机有新的事件记录。
    • 在执行释放容量操作时,对于每一个要释放的 extent,DCD 都会重复上述操作,必要时使用 More flag 避免日志溢出,并让主机能够在需要时处理这些事件以完成释放操作。若 Dynamic Capacity Event Log 在任何时刻溢出,主机应使用 Get Dynamic Capacity Extent List 命令来检索当前主机可访问的 DC 块列表。例如,当主机不再需要某些动态分配的内存容量时,DCD 会按照这个流程通知主机进行释放操作。
  2. 主机释放容量并回复设备
    • 当主机软件检索到包含要释放容量范围的 Release Capacity event record 时,主机软件需要释放部分或全部不再使用的容量。然后,主机使用 Release Dynamic Capacity(释放动态容量,参考章节 8.2.10.9.9.4)命令,向设备回复关于它实际释放的准确容量的更新Extent List。
    • 主机可以根据自身需求,选择在发出 Release Dynamic Capacity 命令之前,通过设备支持的方式(包括但不限于发出 Sanitize 或 Secure Erase 命令,如果设备支持这些命令),使要释放的容量内容不可用。这一步骤有助于确保数据的安全性,防止敏感数据在容量释放后被不当获取。
    • 主机可能会多次调用 Release Dynamic Capacity 命令,随着时间推移返回总容量的不同部分,以响应 Release Capacity event record。这样主机能够精确控制它希望释放的容量大小以及释放的时间点。例如,主机可能会先释放一部分不太常用的动态容量,过一段时间后再释放剩余的部分,根据自身的业务需求和资源管理策略来灵活操作。
  3. 主机释放容量前的准备操作:在发出 Release Dynamic Capacity 命令之前,主机软件需要将相关容量离线,并完成必要的一致性管理操作。这是为了确保在释放容量的过程中,不会对正在运行的系统和其他正在使用相关资源的应用程序造成影响,保证系统的稳定性和数据的一致性。例如,主机需要确保在释放某个 Region的动态容量之前,所有与该 Region相关的数据读写操作都已完成,并且相关的缓存数据也已正确处理。

1.3.4.4 异步释放动态容量的基本序列

主机可以在任何时候,在没有收到 Release Capacity Event Record(释放容量事件记录)的情况下,通过调用 Release Dynamic Capacity 命令(参考章节 8.2.10.9.9.4),并在命令中提供一个包含特定要释放容量的 Extent List(Extent List),将动态容量释放回设备。这种异步释放机制为主机提供了更大的灵活性,使其能够根据自身的运行状态和需求,随时自主地管理动态容量,而无需依赖设备发送的释放事件记录。例如,当主机检测到自身的内存使用情况发生变化,某些动态分配的容量不再需要时,可以立即通过这种方式进行释放,而不必等待设备的通知。

1.3.4.5 设备强制释放动态容量
  1. 设备强制释放操作及事件记录添加
    • 设备可以强制释放主机对动态容量的访问权限。一旦执行强制释放,主机对被释放容量的访问会立即被禁用,DCD 会将该容量视为不再分配给主机。
    • DCD 会向设备的 Dynamic Capacity Event Log 中添加一个 Forced Capacity Release Event Record(强制容量释放事件记录),该记录包含了正在被释放的容量的范围信息。同时,DCD 会设置 Event Status Register 中的 Dynamic Capacity Event Log bit,如果中断功能已启用,还会生成中断以提醒主机有新的事件记录。
    • 如果 Dynamic Capacity Event Log 在任何时候发生溢出,强制释放操作仍然会继续进行,并且主机需要使用 Get Dynamic Capacity Extent List 命令来检索新的主机可访问的 DC 块列表。这确保了即使在日志溢出的情况下,设备对动态容量的强制释放操作也能顺利完成,不会因为日志问题而影响系统对资源的管理和重新分配。
  2. 不同类型设备在重置时的强制释放
    • 基于 LD - FAM(Logical Device - Flexible Address Mapping,逻辑设备 - 灵活地址映射)的 DCD,在对某个 LD 进行 Conventional Reset(常规重置)或 CXL Reset(CXL 协议重置)时,会强制释放与该 LD 相关联的任何共享动态容量。
    • 基于 MH - SLD(Multi - Headed - Single Logical Device,多头 - 单逻辑设备)或 MH - MLD(Multi - Headed - Multi - Logical Device,多头 - 多逻辑设备)的 DCD,在对某个头进行 Conventional Reset 时,会强制释放与所有相关联主机的共享动态容量。
    • 基于 LD - FAM 的 DCD,在对整个 DCD 进行 Conventional Reset 时,会强制释放与所有相关联主机的共享动态容量。
    • 在因为重置而释放容量时,不会创建 Forced Capacity Release Event Record,并且 DCD 会清除 Dynamic Capacity Event Log 中的所有条目。这种设计保证了在设备重置等特殊情况下,动态容量能够被正确地重新分配和管理,同时避免了因重置操作导致的日志混乱和错误。
  3. 主机对设备强制释放的响应
    • 主机检索到包含已释放容量范围的 Release Capacity event record 后,可以使用 Release Dynamic Capacity 命令,向设备回复关于已释放容量的更新Extent List。主机也可以多次调用 Release Dynamic Capacity 命令,随着时间推移返回不同部分的总容量。需要注意的是,主机对这个事件的响应是可选的,并且主机的响应不会影响设备对容量的释放操作。设备的强制释放操作是基于自身的管理策略和系统需求进行的,主机可以根据自身情况选择是否进行响应,以满足不同的应用场景和管理需求。

1.3.5 DCD Management By FM

基于 LD-FAM 的动态容量设备(DCD)实现了多个逻辑设备(LD)以支持多个主机接口,并且能够在这些逻辑设备之间动态地分配和重新分配内存容量。所有的通用功能设备(G-FAM Devices,GFD)都是动态容量设备(DCD),因为通用功能设备专门使用动态容量机制来进行其容量管理。

固件管理器(FM)负责发现动态容量设备(DCD)的功能并配置内存分配。

  1. 固件管理器(FM)发出 “获取 DCD 信息” 命令(见 7.6.7.6.1 节),以发现支持的主机数量、支持的功能以及动态内存容量。通过 “获取主机 DC Region配置” 和 “获取 DC Region Extent List” 命令(分别见 7.6.7.6.2 节和 7.6.7.6.4 节)来查询特定主机的当前容量分配情况。关于等效的通用功能设备(GFD)命令,请参阅 8.2.10.9.10 节。
  2. 使用 “发起动态容量添加” 和 “发起动态容量释放” 命令(分别见 7.6.7.6.5 节和 7.6.7.6.6 节)为每个主机分配资源。设备会生成一个动态容量事件记录(见 8.10.9.9.4 节),以通知固件管理器(FM)任何主机的响应。关于等效的通用功能设备(GFD)命令和策略,请参阅 7.7.2 节和 7.7.14 节 。

1.3.6 设置内存共享
  1. 设置可读写共享内存的步骤
    固件管理器(FM)可以按以下顺序设置主机之间的共享,使所有主机都能对共享容量进行读写:
    • FM 向与第一台主机关联的主机 ID 发出 “发起动态容量添加请求”,并将选择策略设置为 “空闲(Free)”、“连续(Contiguous)” 或 “指定(Prescriptive)”,Region 编号必须对应于被公布为可共享的Region 。
    • 如果动态容量事件记录中出现新的 “添加容量响应” 事件表明上述请求成功,那么向与第二台主机关联的主机 ID 发出 “发起动态容量添加请求”,并将选择策略设为 “启用共享访问(Enable Shared access)”,标签(Tag)字段必须与第一步中使用的标签值匹配。
    • 对需要共享此内存范围的其他任何主机,重复第二步操作。
  2. 设置只读共享内存的步骤
    FM 可以使用以下示例顺序来分配一组带标签的容量,让一台主机对其进行初始化,然后与一个或多个主机以只读方式共享:
    • 向与第一台主机关联的主机 ID 发出 “发起动态容量添加请求”,并将选择策略设置为 “空闲(Free)”、“连续(Contiguous)” 或 “指定(Prescriptive)”,Region 编号必须对应于被公布为可写且可共享的Region。
    • 如果上述请求成功,带标签的共享容量可由第一台主机进行初始化。
    • 针对与该容量关联的标签发出 “动态容量添加引用请求”,持有此引用可防止在第四步中释放和清理带标签的容量。
    • 第一台主机初始化完带标签的共享容量后,针对与该容量关联的标签发出 “发起动态容量释放请求”,然后等待操作完成。
    • 如果动态容量事件记录中出现新的 “释放容量响应” 事件表明第四步中的请求成功,与该标签关联的容量将被保留,但不会映射到任何主机。
    • 向与第二台主机关联的主机 ID 发出 “发起动态容量添加请求”,将选择策略设为 “启用共享访问(Enable Shared Access)”,指定一个可共享且为只读的Region,标签(Tag)字段必须与第一步中使用的标签值匹配。
    • 对需要共享带标签容量的其他任何主机,重复第五步操作。
    • 发出 “动态容量移除引用请求”,以移除 FM 对带标签容量的引用。
    • 要收回共享容量,为每台主机发出 “发起动态容量释放命令”。
    • 当带标签的容量已从所有主机释放,如果 FM 不持有引用,带标签的容量将被清理(如果合适的话)并释放,此时该标签不再存在,容量可供将来使用。

1.3.7 Extent List跟踪
  1. 资源消耗与能力限制:Extent List信息(包括各个范围及其相关标签)的存储会消耗动态容量设备(DCD)的资源。因此,允许 DCD 限制其能够跟踪的范围数量和标签数量,这一能力会在 DCD 的 “获取主机 DC Region配置” 和 “获取动态容量配置” 响应中报告。
  2. DCD 的跟踪责任:DCD 负责跟踪处于以下状态的、构成Extent List的所有范围和标签:
    • 待处理(Pending):指在 “发起动态容量添加请求” 中指定的但尚未得到主机响应的容量。这包括构成 “无效Extents组(Dead Extent Groups)” 一部分的Extents,以及那些在待处理状态下被强制移除的Extents
    • 已添加(Added):指已被主机接受作为 “添加动态容量请求” 一部分的容量,并且该容量存在于对 “获取动态容量Extent List请求” 的响应中返回给主机的Extent List里。
    • FM 引用(FM-referenced):指已添加了固件管理器(FM)引用的容量,这由对 “动态容量列表标签” 响应中的 “FM 持有引用位(FM Holds Reference bit)” 报告。
  3. 可用数量计算与报告:DCD 将其 “可用Extents数量” 和 “可用标签数量” 分别报告为其总容量减去针对处于 “待处理”、“已添加” 和 “FM 引用” 状态的容量所跟踪的所有范围和标签的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值