与 PCIe 相比,CXL为何低延迟高带宽?

news2025/1/10 16:23:17

文章目录

  • 前言
  • 1. Latency
    • PCIE 生产者消费则模型
    • 结论
    • Flit 包
    • PCIE/CXL.io
    • CXL.cace & .mem
    • 总结
  • 2. BandWidth
    • 常见开销
    • CXL.IO Link efficiency
    • PCIe Link efficiency
    • CXL.IO bandwidth
    • CXL.mem/.cache bandwidth
  • 参考

前言

CXL 规范里没有具体描述与PCIe 相比低延时高带宽的原因,一开始我也很不理解,不过慢慢就有点轮廓了,做一个总结,尽量讲通俗一点,欢迎指正。

1. Latency

PCIE 生产者消费则模型

在开始之前,首先提一嘴 PCIE 的生产者消费者模型,因为在使用 PCIE 设备的时候,主机与设备通信,比如网卡收发数据、显卡接受数据等,进行具体的业务数据传输时,为了维护数据的准确性,必须是使用生产者消费者模型的。

请添加图片描述

如上图,右侧为主机,左侧为设备,如果主机想要获取设备某段内存的地址,除非特殊设计,将设备内存映射到BAR 空间,主机侧可直接地址访问,否则,必须是设备将要读取的内存区域的数据 copy 到 DMA 传输内存缓冲区中,然后启动 DMA 传输,通过PCIE 控制器传输数据到主机侧相应的 DMA 缓冲区,并通过中断或者 flag 通知主机,传输完成;主机收到完成信号后,会开始操作,将DMA 缓冲区的数据拷贝到应用程序缓冲区,进行下一步数据处理。

哪怕是主机读设备一个字节,也是上面这个流程,延迟的分布不仅在 PCIE 协议层,而且主要分布在最少两次的内存拷贝中。
所以,我要将延迟分两部分介绍,一部分是控制器到控制器的延迟,一部分是站在应用程序的角度,读写对端内存的延迟.

结论

后面内容太杂,所以先说结论,以免越看越乱。CXL 低延迟的实现根据上面两部分分类,一类是控制器到控制器的延迟,主要是因为采用 FLIT 模式的包,增加了少数据量的带宽,简化了硬件设计,取消了PCIE的ordering rule, access right check、DLLP等,换句话说,CXL 控制器与PCIe 控制器设计上就降低了很多 latency。第二类,站在应用层角度上看,延迟主要是因为 CXL 协议可以维护缓存一致性,所以减少了内存 copy 的操作,从而降低了整体延迟。

Flit 包

在讲 Flit 包之前,我们可以先看一下 PCIe 传输层协议包的格式,如下图

请添加图片描述

其中,红色部分为 TLP 包格式,分为 3 -4 DW 的头,0 - 1024 DW 变长的数据负载以及最后 1DW 的CRC. 其他字节为数据链路层以及物理层额外添加的开销。

不同于 TLP, CXL 采用 Flit 模式发送数据,CXL.cache / mem flie 大小固定 528bit, 有2字节的CRC以及 4 slots 的16字节块。

请添加图片描述

其中:
A “Header” Slot is defined as one that carries a “Header” of link-layer specific information
A “Generic” Slot can carry one or more request/response messages or a single 16B data chunk.
The flit can be composed of a Header Slot and 3 Generic Slots or four 16B Data Chunks.

请添加图片描述

总结一下,就是 CXL Flit 就是固定的 4块 16 字节的区域外加一个2字节CRC. 这 4 块区域每块都可以放请求响应包,也可以放数据块,头只能放在 slot0 中。

举个例子如下,设备到主机的 flit 包, 最上面 slot0 有头,也有响应包,其他的有请求包也有响应包,最后一个slot 放的16字节数据,然后最后2字节CRC.

请添加图片描述

使用 Flit 优点如下:

  1. 其携带的额外信息很多,优势就在于当你出现高速数据传输的时,携带数据的能力越强,速率越高,数据量越大,这种flit模式下的低延迟高速率的优势就会越明显;
  2. PCIe 6.0 引入了 FLIT 模式,其中数据包以固定大小的流量控制单元组织,而不是过去几代 PCIe 中的可变大小。引入 FLIT 模式的最初原因是纠错需要使用固定大小的数据包;
  3. FLIT 模式还简化了控制器级别的数据管理,从而提高了带宽效率、降低了延迟并缩小了控制器占用空间。对于固定大小的数据包,不再需要在物理层对数据包进行成帧,这为每个数据包节省了 4 字节;
  4. FLIT 编码还消除了以前 PCIe 规范中的 128B/130B 编码和 DLLP(数据链路层数据包)开销,从而显著提高了效率,尤其是对于较小的数据包。

PCIE/CXL.io

首先借鉴一下其他公司的 PPT , PCIe 设备访问主机内存的数据流如下:

请添加图片描述

PCIe 设备访问主机内存有两种情况,一种是直接内存访问,流向如上图;还有一种是站在应用程序的角度,需要内存拷贝至少两次,如前面的生产者消费者模型。他们都用不到缓存,但会都用到 IOMMU.

PCIe Latency Breakdown 如下:

请添加图片描述

PCIe 控制器到控制器为 50ns, IOMMU 根据不同的环境时间是变化的,内存控制器读写内存需要 100ns. 整体一路大概 500ns, 来回很难打破 1us. 这是站在应用层角度,有了第二次拷贝,这个 latency 算进去。实际延时应该会更长。

如下为 CXLIO 设备到主机内存的数据流向:
请添加图片描述

与 PCIe 基本相似,不同的是,CXL 控制器与 PCIe控制器还是有点差异的,多了一个 ARB/MUX 动态多路复用器件。软件层面,可以与 PCIe 复用。

CXL.io 的性能如下:

请添加图片描述

IO 的吞吐量比 PCIe 还要差 6%, 因为CXL.io 协议就是封装了PCIe 的TLP, 在前面加了2字节 Protocol ID 以及后面增加了 2字节的 reserved bytes。增加了的 ARB/MUX 器件也会消耗 2 - 4 ns。

如下图, CXL Flit 包的在 X8 的分布,每条 Lane 发送一个字节, 第一部分的橙色部分为封装的 PCIe 的包,黄色部分为添加的 2 字节 Protocol ID, 最后有 2字节的 reserved bytes:

请添加图片描述

CXL.cace & .mem

下图为 CXL.cache 设备访问主机内存的数据流向:

请添加图片描述

.cache 协议可以让设备像访问本地内存一样访问主机内存,设备CPU与主机 CPU 可以共同访问同一个地址的数据,缓存一致性由主机侧的 Cache Home Agent 来维护。根据 MESI 协议,看情况是否去访问实际内存。
.mem 则相反方向,让主机使用缓存访问设备内存,就像访问本地 DDR 内存一样。

下图为 .cache 与 .mem 的好处:

请添加图片描述

  1. 主机和设备相互访问对方内存,可以直接使用内存语义, load/store,不用再使用生产者消费者模型,使用中断或者 flag 通知对方,也不用多次拷贝了;
  2. 设备侧可以同样使用主机页表,那样,主机进程和设备就可以访问同一块虚拟地址空间了;

下图为 CXL microarchitecture with CXL.$Mem measured latency.
请添加图片描述

intel 控制器比标准PCIe PHY 做了如下延迟优化:

  1. bypassing the 128-/130-byte encoding
  2. bypassing the logic and serializing flops needed to support
  3. bypassing the deskew buffer if the lane to lane skew is less than half the internal PHY logical clock period
  4. adopting a predictive policy of processing entries from the elastic buffer (versus waiting for the clock domain synchronization handshake for every entry)

最终, PHY 到 PHY 之间有一个 15 - 19 ns 的延迟,其中4ns 的差异是由参考时钟决定的,depending on whether a common reference clock or independent reference clocks are deployed. 与前面 PCIe 的50 ns 对比,是有时间节省的,不过实际情况,根据不同的IP, 可能会有更大的差距。
这里需要注意的一点是,最底层的模拟 PHY,PCIe 与 CXL 使用的是同一个,这个意味着对于RC与EP的模拟phy 到模拟 phy,相同的数据量,时间是一样的。

More Latency Savings with CXL.mem /.cache
在这里插入图片描述
及其他:

  1. The link layer and transaction layer paths have a low latency since they are natively flit based.
    This eliminates the higher latency in the PCIe/ CXL.io path due to the support for variable packet size, ordering rules, access rights checks, etc. saving latency due to simplified controller design.
  2. Break out of the PCIe ordering model
    Latency saving through out-of-order transfers, write completions
  3. ARB/MUX:
    CXL.Cache/Mem protocol muxing at the PHY level (versus higher level of the stack) helps deliver a low latency path for CXL.$Mem traffic.
  4. Coherence Bias
    Latency savings with optimized snoop traffic in Device Bias mode

其他的介绍开销的地方,前两个由于使用 FLIT 模式传输,PCIe 协议包耗时的逻辑取消了;第 3 点是硬件期间 ARB/MUX 为协议选择低延迟路径,还是硬件控制器IP 加速了;最后一条是 CXL 协议的功能,设备偏置,有利于加速设备访问主机内存。

下图为 CXL.cache/mem 延迟分布

请添加图片描述

CPU 访问内存以及 Cache 一致性操作;CXL 协议层消耗 25 ns; 设备侧应用层延迟以及内存访问延迟;

下图是一个 Type2 设备读主机内存的时间估计:

请添加图片描述
请求响应包一个来回共 25 + 25 = 50ns, 主机访问内存消耗 100ns 左右,整体 150ns 左右,外加设备侧应用消耗;

下图为写:
请添加图片描述
请求与响应一个来回,写操作再携带数据发送一遍,25 + 25 + 25 = 75 ns, 主机侧写内存消耗 100ns 左右,总计 175ns左右。

其他影响延迟的因素:

请添加图片描述
多处理器环境,以及 snoop 的响应的缓存一致性管理增加延迟,IOMMU 中的虚拟地址到物理地址的转换等也会有影响,不过这是 PCIe 与 CXL 共同面临的问题。

如下是 RAMBUS 公司设计的 CXL Controller IP

请添加图片描述
控制器与上层接口也使用了 Intel 低延迟的 CPI 接口,控制器也使用了其他技术减少延迟。

总结

由上总结,CXL 比 PCIe 延迟低的原因如下:

  1. 与PCIe相比,CXL Flit 模式简化控制器设计,控制器其他硬件设计降低延迟, 最少 50 ns-> 25ns;
  2. Flit 模式增加了少数据量的带宽;
  3. CXL 协议包降低了数据处理逻辑,取消了排序规则以及DLLP等,节省开销;
  4. CXL 协议功能取消了内存拷贝,节省开销等;

2. BandWidth

这里的带宽是指每秒传输的有效数据,有效数据即读写的数据。前提,X16 Gen5 在速率 32 GT/s 下原始带宽每个方向 64 GB/s = 32 GT / s * 16 / 8bit。

常见开销

在 68-byte flit 模式下,三种常见开销:

  1. 128/130 = 0.9846 represents the sync HDR overhead (which can be reclaimed when sync HDR bypass is supported)
    这里不是 128/130 编码, 是 Flit 每条Lane上的 2bit的 Sync Header,01代表128bit前插入 Order set block, 10 表示该 block 为 data block
    支持 Sync HDR bypass 的时候此开销可以取消

  2. 374/375 = 0.9973 represents the bandwidth loss due to SKP ordered sets for common clock (higher for other mode)
    SKP : 最多 375 字符插入 SKP 方式,达到补偿时钟偏差的目的, PCIe 与 CXL 都有的开销

  3. 64/68 = 0.9412 representing the flit overhead (2 bytes each for protocol ID and flit CRC).
    CXL Flit 模式特有的,前面 2字节 Protocol ID, 后面 2 字节 CRC

FLit 包格式如下图,CRC 画错了,PROTID 与 CRC 之间应该是 4 个 slot 共 64字节:

请添加图片描述
下图也是 68B Flit 包:
在这里插入图片描述

由上知链路效率:
使用 HDR Flit 包: 0.9846 * 0.9973 * 0.9412 = 0.9242
关闭 HDR Flit 包: 0.9973 * 0.9412 = 0.9387

CXL.IO Link efficiency

68-byte flit 模式下, 假设DLLP 包损耗 2%, .IO 链路层效率为:
使用 Sync HDR : 0.9242 * (1 - 0.02) = 0.9055
关闭 Sync HDR : 0.9387 * (1 - 0.02) = 0.9199

PCIe Link efficiency

PCIe 不适用 flit 模式,所以第三个开销没有,另外两个开销: 0.9846 * 0.9973 = 0.9819,此外还有 2%的 DLLP 开销,所以总开销为:

0.982 * (1 - 0.02) = 0.9624.

与 CXL.io 相比,PCIe 链路层效率还上升了 6%,主要在 Protocol ID 与 CRC 上。

CXL.IO bandwidth

计算带宽一般是 100% 读,100%写,50%读50%写三种情况,这里就不一一分析了。只分析个简单的 100% 读。

设 D 为数据负载,单位 DW 双字, 1 DW = 4 字节。
IO 里面封装的 TLP 包, TLP 包头是 3-DW for completions and 4-DW for requests (read/write).
An additional overhead of 2-DWs for framing and CRC is incurred per TLP with 68-byte flit (FT_CRC = 2),这里可能是计算的 CXL3.0 256B Flit 的开销。

带宽计算方式如下:

请添加图片描述

所以 1R0W 的结果为: 0.9199 /6 * 64GB /s = 9.812GB /s, 其他同理。

CXL.IO Bandwidth 结果如下:

请添加图片描述

PCIe 与 CXL.IO 差不多,从结果看,少量数据效率低,大量数据效率高,所以,对于大数据量来说, CXL 与 PCIe 相比提高不大,不过对于小数据量的读写访问,比如 8个字节来说,优势则巨大。

CXL.mem/.cache bandwidth

主机读 Type 2 设备内存流程如下图:
请添加图片描述

主机读 Type 3 设备内存流程如下图:
请添加图片描述

主机读设备,都是发送一个读请求,只不过对于 Type2 设备,会附加缓存状态信息Snoop SnpData, Type2 设备会返回 S2M DRS + NDR, Type3 设备会只返回 S2M DRS,这是 Type2 与 Type3 的重要区别,此条信息值一万。
S2M DRS 是响应数据包,NDR 是无数据响应,用来指示主机缓存状态的,此外都要外加一个缓存行大小的数据 64 字节。

同样,以 1R0W 为例计算带宽,x reads, y writes, 以 slot 为单位,有效数据占 4 slot.

在看下图 S2M DRS + S2M NDR Flit 包

请添加图片描述

0 - 3 字节为头,4 - 8 字节为 S2M DRS, 9 - 12 字节为 S2M NDR.

所以对于 Type3 来说,S2M DRS 占半个 Slot.
由上可计算得到 S2M 使用的最大 slots 为 (x + y) / 2 + 4x, 有效数据占 4x
则最终 bandwidth 为 LinkEfficiency * 4x / ((x + y) / 2 + 4x) = 0.9387 * 4 / (1/2 + 4) = 0.8344, 0.8344 * 64GB/s = 53.4 GB / s

其他 cache 与 mem bandwidth 计算公式如下图:

请添加图片描述

结果如下:

请添加图片描述

因为PCIe 的有效数据负载是可变的,所以 1DW - 1024 DW 效率随着负载的增多在不断增大,CXL 读写操作的字节长度是 64 字节,读128字节的数据就是发送两个 S2M DRS 包,所以一个方向的带宽是不变的。

打完收工!

参考

  1. 《Compute Express Link (CXL) Specification Revision 3.0》
  2. 《An Introduction to the Compute Express LinkTM (CXLTM) Interconnect》
  3. 《Compute Express Link (CXL): Enabling Heterogeneous Data-Centric Computing With Heterogeneous Memory Hierarchy》
  4. RAMBUS Company PPT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ros报错:The Plugin for class ‘jsk_rviz_plugin/Plotter2D‘ failed to load

一般出现这种情况,是提醒Ros缺少某种库: 图中显示的错误是说明少了jsk_rviz_plugins库,他是一个提供原始rviz插件的包。 解决办法是安装相应的库与插件: #根据自己ROS的版本选择相应的指令 # ubuntu20.04:noetic sudo apt-get i…

Django快速搭建静态网页

Django的快速搭建 这个是例子 这个是一个目录 项目名称:项目似乎被命名为DJ0928,这是Django项目的根目录。 文件都是Django项目的核心配置文件。 settings.py 包含了项目的配置设置。urls.py 定义了项目的URL路由。wsgi.py 和 asgi.py 分别用于Web服务器…

Java高级技术(反射:获取类的成员变量)

一,获取类的成员变量的常用方法 二,案例 三,赋值,取值的常用方法 四, 案例 五,获取类的成员方法的常用方法 六,案例 七,执行 八,案例

代码随想录算法训练营 ---第五十天

第一题: 简介: 做买卖股票的问题最重要的是分析状态,将状态分析清楚本题也就做出来了。我们看本题它说我们至多可以完成两笔交易,也就意味着我们有两种选择 dp状态分析 1.完成一次交易获得最大利益 完成一次交易我们用二维数组…

零代码连接钉钉宜搭与用友U8,让业财数据管理简单高效

零代码连接钉钉宜搭与用友U8,让业财数据管理简单高效 如果把企业内部的业务系统比作一条条河流,那么它们的交汇点就像江河湖海。在这些交汇点上,数据的汇集、分析和共享离不开系统之间的集成。 钉钉宜搭和用友U8是两个在企业中非常重要的系统…

智慧工地信息化管理系统源码带APP

需求痛点:建筑行业是一个安全事故多发的行业。目前,工程建设规模不断扩大,工艺流程纷繁复杂,如何搞好现场施工现场管理,控制事故发生频率,一直是施工企业、政府管理部门关注的焦点。利用现代科技&#xff0…

1145. 北极通讯网络(Kruskal,并查集维护)

北极的某区域共有 n 座村庄,每座村庄的坐标用一对整数 (x,y) 表示。 为了加强联系,决定在村庄之间建立通讯网络,使每两座村庄之间都可以直接或间接通讯。 通讯工具可以是无线电收发机,也可以是卫星设备。 无线电收发机有多种不…

哈希思想应用【C++】(位图,布隆过滤器,海量数据处理面试题)

目录 一,位图 1. 位图概念 2.实现 3. 测试题 位图的优缺点 二,布隆过滤器 1). 布隆过滤器提出 2). 概念 3). 布隆过滤器的查找 4). 布隆过滤器删除(了解) 5). 布隆过滤器优点 6). 布隆过滤器缺陷 三,海量数据面试题 1&#xff…

通过网易的API完成一个简易的音乐播放器

效果图 工程环境 1、使用node在本地部署网易云音乐API接口 下载解压 链接:https://pan.baidu.com/s/1YQiMJoUMEYlMz14FH5xxRA?pwd36o5 提取码:36o5 工程目录概览 (js文件夹里面放了music.html和main.js和vue.js) 工程目录)(有点重复…

ubuntu16.04部署gitlab-runner触发gitlab流水线

环境:ubuntu16.04 gitlab服务器:192.168.1.12 runner服务器:192.168.1.11 1.下载 环境:192.168.1.11 cd /usr/local/srcwget https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_amd64.debsudo dpkg …

【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库

C语言的相关问题解答 写在最前面目录 问题1变量名与变量的关系与区别变量和数据类型形参(形式参数)的概念 问题2解析:主调函数和被调函数延伸解析:主调函数对于多文件程序的理解总结 问题3类和对象变量和数据类型变量是否为抽象的…

带大家做一个,易上手的家常蒜薹炒瘦肉

首先 从冰箱那一块瘦肉 用水化一下冰 然后 那一把蒜薹 将所有蒜薹头和尾部去掉一小节 这个地方是不能吃的 然后 剩下的部分 切成如下图这样 一小条一小条的样子 然后 将蒜薹倒入盆中清水洗一下 瘦肉清洗一下 然后切片 然后 直接起锅烧油 油烧热后马上下肉翻炒 一定要大点翻…

【css】调整图片样式-铅笔画-以及其它

[css]调整图片样式-铅笔画-以及其它 在这个网址下有很多实例&#xff0c;尝试了其中几个&#xff0c;成功实现的对半分。使用Micsoft&#xff0c;估计是不支持一些特性导致的。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

Docker的数据持久化;Docker网络;Dockerfile编写

Docker的数据持久化&#xff1b;Docker网络&#xff1b;Dockerfile编写&#xff1b; 文章目录 Docker的数据持久化&#xff1b;Docker网络&#xff1b;Dockerfile编写&#xff1b;**Docker的数据持久化**1&#xff09;将本地目录映射到容器里2&#xff09;数据卷3&#xff09;将…

开放式耳机怎么选最好?主流的几款深度评测,手把手教你选

在选择开放式耳机时&#xff0c;面对市场上琳琅满目的产品&#xff0c;很多消费者可能感到困惑&#xff0c;不同的品牌、型号和特性使得挑选最适合自己需求的开放式耳机变得复杂。 本文将为大家提供一份深度评测&#xff0c;手把手教您如何选购最优质的开放式耳机。我们将重点…

【JavaSE】:接口(二)

接口 一.对学生进行排序二.Clonable接口三.抽象类和接口的区别四.Object类 一.对学生进行排序 很明显我们直接对学生进行排序是会报错的&#xff0c;因为编译器也不知道你需要按照名字排还是分数排&#xff0c;我们点击报错位置进入sort内部。 在sort内部我们可以看到它把数组转…

linux 应用开发笔记---【I/O文件/基础篇 】

文章笔记来自于【速学Linux】手把手教你学嵌入式Linux C应用编程_哔哩哔哩_bilibili 一&#xff0c;什么是linux应用程序 1.运行在linux操作系统用户空间的程序 2.内核程序运行在内核空间&#xff0c;应用程序运行在用户空间 在终端执行的命令ls,ps。。。。。。都是运行在用…

计算机视觉的应用20-图像生成模型(Stable Diffusion)的原理详解与相关项目介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用20-图像生成模型&#xff1a;Stable Diffusion模型的原理详解与相关项目介绍。大家知道现在各个平台发的各种漂亮的女生&#xff0c;这些漂亮的图片是怎么生成的吗&#xff0c;其实它们底层原理就是…

Windows关闭端口服务命令

winR 打开命令运行 cmd 命令netstat -o -n -a | findstr :9993 显示所有的端口占用情况 -a 显示所有连接和监听端口 -n 以数字形式显示地址和端口号。 此选项一般与 -a选项组合使用 -o 显示与每个连接相关的所属进程 ID 终止 PID taskkill /F /PID 3652

C51--4G模块

EC03-DNC&#xff1a;4G通信模块 EC03-DNC 功能特点&#xff1a; 采用最新4G CAT1方案&#xff1b; 支持数据透明传输; 支持TCP、UDP 网络协议; 支持心跳包、注册包功能最大支持64个字节数&#xff1b; 支持MQTT协议&#xff0c;支持接入OneNet平台、百度云平台、阿里云平台的…