这一节主要解决一个核心问题:主机软件(Host Software)如何能以一种标准化的方式,确保一个 CXL.cache 设备里的缓存被完全清空(即所有缓存行都被写回并置为无效),而又不必重置整个设备。
在传统的计算机体系结构中,CPU 可以通过指令(如 WBINVD
)来刷新自己的缓存。但是,对于一个独立的 CXL 设备(如智能网卡或加速器)上的缓存,情况变得复杂。
这就产生了一个需求:系统软件需要一种可靠、标准化的方法来控制 CXL 设备的缓存,例如在热移除设备或执行 CXL Reset 之前,以确保数据一致性。
为了解决上述问题,CXL 规范定义了一套专用的、由软件驱动的缓存管理能力。
Cache Writeback and Invalidate Capable
标志位来判断设备是否支持此功能。要清空设备缓存,软件必须严格遵循以下三个步骤:
Disable Caching = 1
(禁用缓存)DVSEC CXL Control2
寄存器写入,将 Disable Caching
位置为 1。Initiate Cache Write Back and Invalidation = 1
(启动写回与失效)DVSEC CXL Control2
寄存器中的 Initiate Cache Write Back and Invalidation
位置为 1。Control2
寄存器的一次写操作。Cache Invalid = 1
(等待操作完成)DVSEC CXL Status2
寄存器,直到 Cache Invalid
标志位变为 1。Cache Invalid
位变为 1,是设备发出的“操作已完成”的信号。此时软件可以确定设备缓存已经被完全清空。DVSEC CXL Capability2
寄存器中),并据此计算出一个合理的超时时间。在缓存被清空后,如果需要重新使用,软件只需执行一步操作:
DVSEC CXL Control2
寄存器中的 Disable Caching
位清零(即写入 0)。Disable Caching
位从 1 变为 0 时,它会自动将 Cache Invalid
状态位也清零,表示缓存现在可以重新开始工作了。9.6 节 的核心是为 CXL.cache 设备的缓存管理提供了一个标准化的、由软件驱动的流程。由于传统的 CPU 指令或 PCIe FLR 机制无法可靠地完成这项任务,CXL 设计了这套专用的“禁用-启动-等待”三步法。这个机制对于确保系统在进行热插拔、设备重置或其它关键状态转换时的数据一致性至关重要,是所有 CXL 系统软件和设备驱动必须正确实现的关键功能之一。