基于 APN 的 CXL 链路训练



🔥点击查看精选 CXL 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/132129387】。
  • ⚠️ 本文目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net
  • 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)

文章目录

  • 1. 前言
  • 2. 硬件自协商
    • 注意事项
  • 3. APN @CXL
  • 4. Modified TS @CXL
    • 4.1 Modified TS 协商
    • 4.2 Modified TS 内容
  • 5. Q&A
  • 6. 参考


1. 前言

  两组件通信的前提是建链(建立通信链路),CXL 也不例外。支持 CXL 的 Host 和 Device 在正式发送 CXL Transaction 进行通信之前需要在两者之间建立一条可靠的物理链路,确保双方能够互相识别信令,对相关通信参数进行协商并达成一致,这个过程即链路训练(Link Training)。

  广义而言,链路训练包括物理层和数据链路层的训练;侠义上讲,链路训练指物理层的链路训练。本文只讨论物理层的链路训练。



2. 硬件自协商

  CXL 链路通过 Flex Bus 进行 Transaction 传输。CXL Flex Bus 支持 Native PCIe Mode 和 CXL Mode 两种模式,只有工作在 CXL Mode 时才能进行 CXL IO、Cache、Mem 的 Transaction 传输。至于最终采用何种工作模式,由硬件在链路训练期间动态协商决定。

  CXL Flex Bus 链路训练跟 PCIe 链路训练大同小异,PCIe LTSSM 相关规则在 CXL 链路训练中仍然适用。CXL 链路训练期间,采用 替代协议协商(Alternate Protocol Negotiation,APN)机制、链路两端的组件交换 Modified TS 来进行以下 CXL Flex Bus 相关能力的协商:

  • 是否支持 PCIe、CXL.io、CXL.cache、CXL.mem 协议;
  • 支持的 Flit Mode:68B Flit、Standard 256B Flit、Latenct-Optimized 256B Flit、PBR Flit;
  • 是否支持链路性能调控相关的 Sync Header Bypass、CXL NOP Hint、CXL.io Throttle;
  • 是否为多逻辑设备(Multi-Logical Device,MLD);
  • 链路上是否存在 Retimer1、Retimer2。

  以上协商由下行端口(Downstream Port,DSP/DP)发起,上行端口(Upstream Port,USP/UP)进行响应,在 LTSSM 第一次进入 L0 之前就已协商完毕。链路初次进入 L0 时链路速率为 2.5 GT/s,未达到 CXL 协议要求的最低链路速率 8 GT/s,这意味着链路训练尚未完成,理所当然也无法发送 CXL Transaction。革命尚未成功,同志们仍需努力,仍需进行更高速率的链路训练。

  CXL 物理链路训练成功的直接标致是 8 GT/s 或以上传输速率时 DSP/USP 的 LTSSM 均能到达 L0。68B Flit Mode 时,对于 DSP,其 LTSSM 在即将进入 8 GT/s 或更高速率 L0 之前,Flex Bus 逻辑物理层先发送 SDS 再发送 Null Flit(区别于 PCIe 的 Idle Symbol),待链路速度达到目标速率后可正式发送 CXL Transaction;对于 USP,只有在其收到对端 DSP 物理层以上层次发来的 Flit 之后,USP 的物理层才能通知其上层 Link Up、可以开始发 CXL Transaction。

  如果 CXL 链路训练能够达到 2.5 GT/s 或 5 GT/s 的链路速度,但无法达到 8 GT/s 及以上速率,则 CXL 链路训练失败。此时,即便 Device 支持 PCIe,也无法回退到 2.5 或 5 GT/s 的 PCIe Mode。想要切换到 PCIe Mode,需要 LTSSM 回退到 Detect,软件关闭 APN 协商相关控制信息后再次发起针对 PCIe Mode 的链路训练。

  Flex Bus 在 CXL Mode 时支持链路减宽(Width Degradation)或降速(Speed Downgrade)。如果所需的 Link Width/Speed 在协议支持的范围内,其可以直接从 L0 进入 Recovery 进行相关操作,无需重新进行 CXL Mode 的协商;若 Degrade 到其他 CXL 不支持的 Width 或 Speed,需要回退到 Detect 重新训练。

注意事项

  如果 CXL 组件支持的最大速率为 8 GT/s 或 16 GT/s,在链路新训练之前应把支持的最大速率置为 32 GT/s。之所以这么做,是因为 APN 机制初现于 PCIe Gen5,Modified TS Usage Selected 字段位于 32 GT/s Control Register 中。设置支持 32 GT/s,确保该寄存器可用,从而确保能够发出 Modified TS 从而进行 APN 协商。在 APN 协商完毕之后,需要软件修改支持的最大速率为真实的最大速率。

  对于 eRCH 或 eRCD 这类只支持 CXL 1.1 的组件,其不支持热插拔,BIOS 默认会关闭 APN 以阻止热插拔,需要软件手动打开。



3. APN @CXL

  当 PCIe 之外的协议运行在 PCIe PHY 上,比如此处的 CXL 协议,需要采用 APN 机制进行替换协议相关细节的协商。CXL 链路 LTSSM 退出 Detect 状态后开始链路训练进程,在 Configuration 状态期间采用 APN 机制进行 Flex Bus 能力协商。

  APN 机制在 LTSSM Configuration 中的位置如下图所示,APN 机制中的 Flex Bus 能力协商不影响通道号 Lane Number 的协商,两者并行。

在这里插入图片描述

  CXL Flex Bus 能力协商可分为先后两个阶段(下图):

  • Phase 1,提议阶段,链路两端的组件在本阶段互相通报自身支持的 Flex Bus 特性,发生于 Configuration.LaneNum.Wait -> Configuration.LaneNum.Accept 期间。大致流程如下:
    • LTSSM 进入 Confoguration.LaneNum.Wait 之后,若 CXL 链路 DSP 支持 CXL 协议,由 DSP 发送带有 Flex Bus 相关信息的 Modified TS1 发起 CXL Mode 协商。
    • USP 收到 DSP 发来的 Modified TS1 后,若其支持 CXL 协议,USP 反馈能够反映其自身 Flex Bus 能力的 Modified TS1。
  • Phase 2,决议阶段,DSP 及 USP 在本阶段决定最终采用的工作模式及 Flex Bus 相关功能,发生于 Configuration.Complete 期间。大致流程如下:
    • DSP 收到 USP 反馈回来的 Modified TS1 后做决定,决定是否启动 CXL、具体使能的协议/模式/特性,并通过 Modified TS2 反馈决议结果给 USP。在进入 Configuration.Idle 之前 DSP 至少需连续发送 16 笔 Flex Bus Enable 字段一致 Modified TS2。
    • USP 收到 DSP 发来的 Modified TS2 之后,反馈 Modified TS2 进行确认。USP 在连续收到 8 笔 Flex Bus Enable 一致的 Modified TS2 之后可以退出到 Configuration.Idle

在这里插入图片描述



4. Modified TS @CXL

4.1 Modified TS 协商

  Modified TS 用于 APN 协商过程中,其只有 8b/10b 编码的一种形式。允许发送 Modified TS 的 LTSSM 子状态有 Configuration.Lanenum.WaitConfiguration.Lanenum.AcceptConfiguration.Complete,在此之前,必须在 Polling.ActivePolling.CfgCfg.Linkwidth.StartCfg.Linkwidth.Accept 状态将 Standard TS1/TS2 Symbol 5 的 Bits[7:6] 置为 2’b11,收发端对是否支持 Modified TS 进行协商。只有在收发端均支持 Modefied TS 时,才能发送 Modified TS,否则仍然发送 Standard TS。

4.2 Modified TS 内容

  跟 Standard TS 比,Modified TS 更改了 Symbol 6~15,这些 Symbol 在 Standard TS 中主要是均衡相关字段。CXL 所用的 Modified TS 关键字段的释义如下:

  • Symbol 5,Bits[7:6] =11b 来指示当前 TS 为 Modified TS。
  • Symbol 8-9,
    • Bits[2:0]用以指示 Modified TS Usage,即 Modified TS 的用途。该字段的值由 32.0 GT/s Control Register(下图)中的 Modified TS Usage Mode Selected 字段决定。010b 表示当前 Modified TS 用以 APN 协商。
    • Bits[15:3]携带有 Modified TS 的 Info1。其中,Bits[4:3]指示 APN 状态,Bits[15:5]指示协议细节。对于 CXL,Bits[7:5]指示 Alternate Protocol ID,000b 表示 Flex Bus;Bit8 指示 Common Clock;Bits[15:9] Reserved。Common Clock Bit 是 DSP 给 Retimer 用的,Retimer 根据该信息决定开启哪些特性。
  • Symbol 10-11 携带有 Vendor ID,对 CXL 而言,这里填写 1e98h。
  • Symbol 12-14 携带有 Modified TS Info2。对于 CXL 而言,Bits[7:0]指示 Flex Bus 支持的能力,Bits[23:8]指示 Flex Bus Additional Info:
    • Bit[0]: PCIe Capable/Enable
    • Bit[1]: CXL.io Capable/Enable,若支持 CXL 68B Flit 或者 VH,必须支持 CXL.io
    • Bit[2]: CXL.mem Capable/Enable
    • Bit[3]: CXL.cache Capable/Enable
    • Bit[4]: CXL 68B Flit and VH Capable/Enable (formerly known as CXL 2.0 Capable/Enable)。若开启了 PCIe Flit Mode,则 CXL 不能开启 68B Flit。对于 CXl 3.0,开了 256B Flit,VH 该怎么开?只能工作于 68B 吗?是否 Bypass Sync Header(仅适用于 68B Flit Mode)。若开启了 Bypass Sync Header,在链路速度达到 8 GT/s 或以上速率时才 Bypass Sync Header。
    • Bits[7:5]: Reserved
    • Bit[8]: Multi-Logical Device Capable/Enable。Switch USP 此处必须置零。
    • Bit[9]: Reserved
    • Bit[10]: Sync Header Bypass Capable/Enable。仅适用于 68B Flit Mode,不适用于 256B Flit Mode。对于 Retimer,其必须不加修改地从其伪 USP 传到伪 DSP。若 Retimer 不支持 Bypass Sync Header,其从下行伪端口到上行伪端口传递该 TS 时可以将该字段清零,不允许私自置一,置一 USP 可以置一。若 Retimer 不支持 CXL,DSP 会假设 Retimer 不支持该特性。
    • Bit[11]: Latency-Optimized 256B Flit Capable/Enable
    • Bit[12]: Retimer1 CXL Aware1
    • Bit[13]: Reserved
    • Bit[14]: Retimer2 CXL Aware2
    • Bit[15]: CXL.io Throttle Required at 64 GT/s,USP 采用该字段来指示其在 64 GT/s 速率下是否需要 CXL.io Throttle。若其不支持接收联系的 CXL.io Flit,该字段需要置一。DSP 收到后会将该字段保存在 DVSEC Flex Bus Port Status Register 中。
    • Bits[17:16]: CXL NOP Hint Info[1:0],指示是否支持在收到 NOP Flit Hint 后插入 NOP Flit、需要插入几个 NOP Flit。
    • Bit[18]: PBR Flit Capable/Enable,指示是否具备/开启 PBR。若未开启 PCIe Flit Mode,则 PBR Flit 也不能开启。PCIe Flit Mode 意味着 256B Flit Mode,PBR 采用 256B Flit。
    • Bits[23:19]: Reserved


5. Q&A

  1. Crosslink 时由谁发起 APN 协商?
    在 LTSSM 进入 Configuration 状态发起 APN 协商之前已经确定了 DSP、USP,仍然由 DSP 发起 APN 协商。


6. 参考

  1. CXL Base Spec, r3.0

— END —


🔥 精选往期 CXL 协议系列文章,请查看【 CXL 专栏】🔥

⬆️ 返回顶部 ⬆️

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dockerfile构建mysql

使用dockerfile构建mysql详细教学加案例 Dockerfile 文件 # 使用官方5.6版本,latest为默认版本 FROM mysql:5.6 #复制my.cof至容器内 ADD my.cnf /etc/mysql/my.cof #设置环境变量 密码 ENV MYSQL_ROOT_PASSWORD123456my.cof 文件 [mysqld] character-set-server…

LNMP搭建

LNMP:目前成熟的企业网站的应用模式之一,指的是一套协同工作的系统和相关软件 能够提供静态页面服务,也可以提供动态web服务。 这是一个缩写 L linux系统,操作系统。 N nginx网站服务,也可也理解为前端&#xff0c…

企业计算机服务器中了locked勒索病毒怎么办,如何预防勒索病毒攻击

计算机服务器是企业的关键信息基础设备,随着计算机技术的不断发展,企业的计算机服务器也成为了众多勒索者的攻击目标,勒索病毒成为当下计算机服务器的主要攻击目标。近期,我们收到很多企业的求助,企业的服务器被locked…

uni-app、H5实现瀑布流效果封装,列可以自定义

文章目录 前言一、效果二、使用代码三、核心代码总结 前言 最近做项目需要实现uni-app、H5实现瀑布流效果封装,网上搜索有很多的例子,但是代码都是不够完整的,下面来封装一个uni-app、H5都能用的代码。在小程序中,一个个item渲染…

Godot 4 源码分析 - Path2D与PathFollow2D

学习演示项目dodge_the_creeps,发现里面多了一个Path2D与PathFollow2D 研究GDScript代码发现,它主要用于随机生成Mob var mob_spawn_location get_node(^"MobPath/MobSpawnLocation")mob_spawn_location.progress randi()# Set the mobs dir…

【机器学习】编码、创造和筛选特征

在机器学习和数据科学领域中,特征工程是提取、转换和选择原始数据以创建更具信息价值的特征的过程。假设拿到一份数据集之后,如何逐步完成特征工程呢? 文章目录 一、特性类型分析1.1 数值型特征1.2 类别型特征1.3 时间型特征1.4 文本型特征1.…

Android Studio安装AI编程助手Github Copilot

csdn原创谢绝转载 简介 文档链接 https://docs.github.com/en/copilot/getting-started-with-github-copilot 它是个很牛B的编程辅助工具,装它,快装它. 支持以下IDE: IntelliJ IDEA (Ultimate, Community, Educational)Android StudioAppC…

数据库操作系列-Mysql, Postgres常用sql语句总结

文章目录 1.如果我想要写一句sql语句,实现 如果存在则更新,否则就插入新数据,如何解决?MySQL数据库实现方案: ON DUPLICATE KEY UPDATE写法 Postgres数据库实现方案:方案1:方案2:关于更新:如何实…

【云原生】K8S二进制搭建一

目录 一、环境部署1.1操作系统初始化 二、部署etcd集群2.1 准备签发证书环境在 master01 节点上操作在 node01与02 节点上操作 三、部署docker引擎四、部署 Master 组件4.1在 master01 节点上操 五、部署Worker Node组件 一、环境部署 集群IP组件k8s集群master01192.168.243.1…

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨,在1995年出版的《未来之路》一书中,提及“物物互联”。1998年麻省理工学院提出,当时被称作EPC系统的物联网构想。2005年11月,国际电信联盟发布《ITU互联网…

在 Ubuntu 上安装 Docker 桌面

Ubuntu 22.04 (LTS) 安装 Docker 桌面 要成功安装 Docker Desktop,您必须: 满足系统要求拥有 64 位版本的 Ubuntu Jammy Jellyfish 22.04 (LTS) 或 Ubuntu Impish Indri 21.10。对于非 Gnome 桌面环境,必须安装 gnome-terminal:…

机器学习笔记 - YOLO-NAS 最高效的目标检测算法之一

一、YOLO-NAS概述 YOLO(You Only Look Once)是一种对象检测算法,它使用深度神经网络模型,特别是卷积神经网络,来实时检测和分类对象。该算法首次在 2016 年由 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali Farhadi 发表的论文《You Only Look Once: Unified, Re…

Excel·VBA表格横向、纵向相互转换

如图:对图中区域 A1:M6 横向表格,转换成区域 A1:C20 纵向表格,即 B:M 列转换成每2列一组按行写入,并删除空行。同理,反向操作就是纵向表格转换成横向表格 目录 横向转纵向实现方法1转换结果 实现方法2转换结果 纵向转横…

ThreadLocal有内存泄漏问题吗

对于ThreadLocal的原理不了解或者连Java中的引用类型都不了解的可以看一下我的之前的一篇文章Java中的引用和ThreadLocal_鱼跃鹰飞的博客-CSDN博客 我这里也简单总结一下: 1. 每个Thread里都存储着一个成员变量,ThreadLocalMap 2. ThreadLocal本身不存储数据&…

Jenkins 自动化部署实例讲解,另附安装教程!

【2023】Jenkins入门与安装_jenkins最新版本_丶重明的博客-CSDN博客 也可以结合这个互补看 前言 你平常在做自己的项目时,是否有过部署项目太麻烦的想法?如果你是单体项目,可能没什么感触,但如果你是微服务项目,相…

Android的Handler消息通信详解

目录 背景 1. Handler基本使用 2. Handler的Looper源码分析 3. Handler的Message以及消息池、MessageQueue 4. Handler的Native实现 4.1 MessageQueue 4.2 Native结构体和类 4.2.1 Message结构体 4.2.2 消息处理类 4.2.3 回调类 4.2.5 ALooper类 5. 总结&…

【千题百解】华为机试题:求最小公倍数

“所有命运馈赠的礼物,都已在暗中标好了价格” 👨🏻‍💻作者:鳄鱼儿 🍀个人简介 👨🏻‍🎓计算机专业硕士研究生 🦨阿里云社区专家博主 🌙CSDN博客专家 & Java领域优质创作者 题目 解题 Java实现 注意a和b相乘时可能超过int最大值。 import java.uti

python调用pytorch的clip模型时报错

使用python调用pytorch中的clip模型时报错:AttributeError: partially initialized module ‘clip’ has no attribute ‘load’ (most likely due to a circular import) 目录 现象解决方案一、查看项目中是否有为clip名的文件二、查看clip是否安装成功 现象 clip…

命令模式(Command)

命令模式是一种行为设计模式,可将一个请求封装为一个对象,用不同的请求将方法参数化,从而实现延迟请求执行或将其放入队列中或记录请求日志,以及支持可撤销操作。其别名为动作(Action)模式或事务(Transaction)模式。 Command is …

Spring Cloud Eureka 和 zookeeper 的区别

CAP理论 在了解eureka和zookeeper区别之前,我们先来了解一下这个知识,cap理论。 1998年的加州大学的计算机科学家 Eric Brewer 提出,分布式有三个指标。Consistency,Availability,Partition tolerance。简称即为CAP。…