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

文章目录

  • 前言
  • 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.rhkb.cn/news/205065.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基于springoot开发的企业招聘求职网站

演示视频: https://www.bilibili.com/video/BV1xw411n7Tu/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 技术:springootmysqlvuejsbootstrappoi制作word模板 主要功能:求职者可以注册发布简历,选择简…

Echarts+vue+java+mysql实现数据可视化

一、折线图,柱状图 https://echarts.apache.org/zh/index.html echarts 官网 更多配置项可以去官网查看 在开始项目之前,确保您已经安装了以下工具和技术: MySQL 数据库:用于存储和管理数据。Java 后端:用于创建后端应…

解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题,全是干货分享

今天我的电脑中突然出现关于“api-ms-win-crt-runtime-l1-1-0.dll”的错误提示,关闭提示后再次打开程序依然不能正常打开,出现这样的问题突然不知道是因为什么,于是就去了解了关于出现api-ms-win-crt-runtime-l1-1-0.dll错误的问题&#xff0…

elFinder ZIP 参数注入导致命令注入 (CVE-2021-32682)

漏洞描述 elFinder 是一个用于 Web 的开源文件管理器,使用 jQuery UI 用 JavaScript 编写。 在 elFinder 2.1.48 及更早版本中发现一个参数注入漏洞。此漏洞可能允许攻击者在托管 elFinder PHP 连接器的服务器上执行任意命令,即使配置最少也是如此。这…

matlab画双坐标图的样式

matlab画双坐标图的样式 %% clc,clear,close all; t0:0.1:9*pi; figure; [AX,Ha,Hb]plotyy(t,sin(t),t,exp(t)); % 绘图并创建句柄 % ----------------- 设置刻度 set(AX(1),yTick,[-1.250:0.25:1.25]) % 设置左边Y轴的刻度 set(AX(2),yTick,[0:50:350]) …

Alivia 1.0 正式版来了,打造更懂企业的营销「工具箱」

上周,「Whale 帷幄」2023 秋季发布会圆满落下帷幕。发布会上,帷幄创始人 & CEO 叶生晅重磅发布了专为营销和销售设计的企业级 AGI 工具——Alivia 1.0 正式版,获得了广泛的反响和好评。 在这一年里,帷幄在 AGI 产品创新及落地…

Redis 命令处理过程

我们知道 Redis 是一个基于内存的高性能键值数据库, 它支持多种数据结构, 提供了丰富的命令, 可以用来实现缓存、消息队列、分布式锁等功能。 而在享受 Redis 带来的种种好处时, 是否曾好奇过 Redis 是如何处理我们发往它的命令的呢? 本文将以伪代码的形式简单分析…

基于SSM的高校学生实习管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Unity之ARFoundation如何实现BodyTracking人体跟踪

前言 ARBodyTracking,就是指通过手机AR扫描并精确的捕获人物的肢体部位的技术。如下图所示 这项技术目前是有苹果的ARKit提供,苹果的body tracking 功能需要使用配备 TrueDepth 摄像头的设备,配备 A12 仿生芯片、运行 iOS 13 或更高版本的设备,比如 iPhone X 及更新机型。…

可以在电脑桌面展示工作计划表的软件

很多上班族都表示自己在工作时,会面临大量且复杂的工作任务,这时候就会拖延工作,或者感觉时间不够用,所以需要有明确的工作计划来指导自己如何分类时间和精力,确保每项工作任务都能够按时完成。如果需要制定每天的工作…

YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》

近日,由深圳计算科学研究院自主研发的“崖山数据库系统YashanDB”入编2023年世界互联网大会领先科技奖成果集《科技之魅》。此次入选,充分彰显了YashanDB在数据库技术领域的突破性创新成果。 《科技之魅》是世界互联网大会领先科技奖的重要成果&#xff…

万字解析设计模式之桥接模式、外观模式

一、桥接模式 1.1概述 桥接模式是一种结构型设计模式,它的作用是将抽象部分和实现部分分离开来,使它们能够独立地变化。这样,抽象部分和实现部分可以分别进行扩展,而不会相互影响。它是用组合关系代替继承关系来实现,…

双指针算法(题目与答案讲解)

文章目录 题目移动零复写零两数之和N数之和(>2个数) 答案讲解移动零复写零两数之和N数之和 题目 力扣 移动零 1、移动零:题目链接 复写零 2、复写零:题目链接 两数之和 3、两数之和题目链接 N数之和(>2个数) 4、N数之和(三个数、四个数) 三个数:题目链接 四个数题目链接…

Windows10免安装PostgreSQL

1. PostgreSQL简介2. 下载3. 安装环境4. 安装 4.1. 初始化数据库4.2. 启动数据库4.3. 注册服务4.3. 卸载服务 1. PostgreSQL简介 PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统,是以加州大学计算机系开发的 POSTGRES 4.2版本为基础的对象关…

02-微服务的拆分规则和基于RestTemplate的远程调用

微服务的拆分与远程调用 创建父工程 任何分布式架构都离不开服务的拆分, 微服务也是一样 , 微服务的拆分遵守三个原则 微服务需要根据业务模块拆分,不同微服务不要重复开发相同业务每个微服务都有自己独立的数据库, 不要直接访问其他微服务的数据库微服务可以将自己的业务暴…

viple模拟器使用(三):unity模拟器中实现沿右墙迷宫算法

沿右墙迷宫算法原理 默认直行;右侧有路,则右转;前方无路,则左转。 由于unity模拟器中使用机器人移动动力控制和机器人转动角度控制来实现控制机器人前进、后退、暂停、左转、右转 。 程序编写 主机以及配置 通过内建事件初始化机…

查理·芒格之死对伯克希尔·哈撒韦公司意味着什么?

来源:猛兽财经 作者:猛兽财经 虽然查理芒格是伯克希尔哈撒韦公司首席执行官沃伦巴菲特的重要合作伙伴,但猛兽财经认为查理芒格的去世并不会对伯克希尔哈撒韦的正常运营产生太大的影响,因为该公司长期以来一直是由巴菲特主导的。 …

C/C++内存管理(含C++中new和delete的使用)

文章目录 C/C内存管理(含C中new和delete的使用)1、C/C内存分布2、C语言中动态内存管理方式:malloc/calloc/realloc/free3、C动态内存管理3.1、new/delete操作内置类型3.2、new/delete操作自定义类型 4、operator new与operator delete函数5、…

ChatGPT到底是如何运作?

自从2022年11月30日发布以来,ChatGPT一直占据着科技届的头条位置,随着苹果的创新能力下降,ChatGPT不断给大家带来震撼,2023年11月7日,首届OpenAI开发者大会在洛杉矶举行,业界普遍认为,OpenAI的开…

走近科学之《MySQL 的秘密》

走近科学之《MySQL 的秘密》 mysql 存储引擎、索引、执行计划、事务、锁、分库分表、优化 1、存储引擎(storage engines) 存储引擎规定了数据存储时的不同底层实现,如存储机制、索引、锁、事务等。 可以通过 show engines 命令查看当前服务…