CXL Overview - Maosishidy/CXL-PCIe GitHub Wiki

1.为什么需要CXL协议

我们已经有了PCIe这样的高速串行总线,为什么还要再搞出一个新的CXL呢 ?其实主要是因为PCIe不支持cache的一致性,这会导致每次Device去访问Host上的内存的时候,都要重新访问即便已经访问了多次而且内存也没有变化的情况下,这样会性能很差。另外因为人工智能和机器学习的兴起,FPGA/GPU 卡上会有大量的内存,在不进行运算时就闲置在那里浪费资源,可是使用PCIe的接口的设备,Host没法直接访问设备上的内存。设备上的内存和Host端的内存没法统一编址,而且同样是因为PCIe不支持Cache的一致性,Host访问设备上的内存也会非常的慢。所以Intel就发明了CXL,它在PCIe的基础上加入了Cache一致性的支持用来加速设备和主机之间内存的互相访问的速度。同时也提供了Host-managed device memory (HDM)Decoder 用来支持将主机端的物理地址Host Physical Address (HPA)转化成设备端的物理地址 Device Physical Address (DPA) 从而实现 统一地址编址。另外CXL的Cache一致性的协议支持是有偏见的或者是非对称的。对称性的实现指的是比如像QPI用于连接CPU和CPU以及CPU和设备时,它要求在两端都要实现home agent(HA)和cache agent(CHA)。CXL只实现了HA,所以被称为非对称的协议。非对称协议简化了设计,并允许不支持cache一致性的设备接入到CXL中。

2.CXL协议与Processer的连接

由于PCIe协议不支持Cache一致性,因此基于PCIe GEN5 Physical链路的复用,在其基础上设计出了CXL协议。如图所示 image

  1. CXL Device Type CXL主要有三种应用场景。 TYPE 1是常用于网卡这类高速缓存设备,它通常只支持io和cache的协议。 TYPE 2是常见于GPU, AI等应用的内存加速器,它支持io,cahce,memory三种协议。 TYPE 3通常是作为内存缓冲器,常用作内存带宽或者是容量的扩展,它支持io和memory两种协议。 不管哪种类型的设备,都要支持io的协议,因为CXL.io 是用来 发现,配置,寄存器访 问、中断等。我们要配置,访问设备的寄存器,所以要支持io。 image