CXL子协议

CXL.io

CXL.cache

CXL.cache是一个双向cache一致性协议,分为两个方向:D2H,H2D。每个方向上又有三个通道:Request、Response以及Data

D2H request

D2H Request一共有15条commands,可以分为4类:Read、Read0、Read0-Write以及Write。

H2D request

H2D 请求通道用于主机更改设备中的缓存一致性状态,这被称为“Snooping”(缩写为 Snp)。设备必须根据 Snoop 类型更新其缓存,并且在缓存中有脏数据(M 状态)的情况下,还必须将数据返回给主机。 H2D Request消息由三种:SnpData、SnpInv、SnpData

H2D response

D2H response

device在收到Host发来的H2D Request后,进行应答,发送D2H Response。 D2H Response消息共有七种,D2H Response 的 Opcode 的名字格式很有规律,Rsp+X+Hit/Fwd+Y,X 表示新的缓存行状态,Y 是原来的缓存行状态,Hit 不附带数据,Fwd 附带数据

example

缓存一致性所涉及的内存层次结构:

这里的Peer Cache可以是下面任意一种:

这里的内存控制器也可以是各种内存:

Read

Write

Read0-Write

CXL.mem

CXL.mem共有三种一致性模型,分别是HDM-HHDM-DHDM-DB

协议通道和消息类型

在 CXL.cache 中,两端是 Host 和 Device;而 CXL.mem,两端是 MasterSubordinate

从 Master 到 Subordinate 的消息(M2S)有三类:

  1. Request(Req)
  1. Request with Data(RwD)
  1. Back-Invalidation Response(BIRsp),CXL3.0加入

从 Subordinate 到 Master 的消息(S2M)有三类:

  1. Response without data(NDR, No Data Response)
  1. Response with Data(DRS, Data Response)
  1. Back-Invalidation Snoop(BiSnp),CXL3.0加入

HDM-H

在Type 3设备中,HDM-H地址区域用作内存扩展器或用于具有软件一致性的共享FAM设备,其中设备不需要主动管理与主机的一致性。这使得流向HDM-H的事务流可以简化为仅两类,即读取和写入

Read from Host

在此流程中,仅返回一条数据消息。

Write from Host

与读取操作不同,写操作总是以S2M NDR Cmp消息完成。这一通用的写入流程下图:

HDM-D

Read from Host

Write from Host

Device Read to Device Memory

设备发起的写操作

zood