CXL ATS 介绍



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


📢 声明

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


1. CXL ATS 简介


  地址转换服务(Address Translation Services,ATS)是 PCIe 的一项 Capability,用以把虚拟地址(Virtual Address,VA)转换为主机物理地址(Host Physical Address,HPA)。之前《PCIe 地址转换服务(ATS)详解》介绍过 ATS 相关内容,今天看 ATS 在 CXL 中应用。

  CXL ATS 可概括为两点:

  • D2H Req 请求采用 地址路由 且地址采用 HPA,当 HPA 未知时需要采用 CXL.io 的 ATS 做地址转换把 VA 转换为 HPA;
  • CXL ATS Req 中的 CXL.Src=1 指示当前为 CXL Device,ATS Cpl 中的 CXL.io=0/1 指示当前页为 Cacheable/Uncacheable,Cacheable 的页支持 CXL.io/cache/mem 访问,Uncacheable 的页仅支持 CXL.io 访问。

  接下来做展开介绍——



2. CXL ATS 的应用范围


  在 CXL.cache 及 CXL.mem 所有 Channel 中,只有 H2D Req、D2H Req、M2S Req/RwD、S2M BISnp 等访问请求是基于 HPA 地址路由的,Rsp/Data 均采用 ID 路由。对于 H2D Req、M2S Req/RwD 等 Host/Master 主动发起的请求,Host/Master 可以直接在其内部拿到 HPA;对于 S2M BISnp,其采用的 HPA 可以在 Host 访问 HDM-DB 的 M2S Req/RwD 中拿到。真正需要 ATS 来拿 HPA 的,只剩下 D2H Req。

  ATS 是 CXL.cache 的必选项,对 CXL.io 和 CXL.mem 则是可选项。对于 Type 1/2 等支持 CXL.cache 的 CXL Device 必须支持 ATS Capability,对于支持 CXL.io+CXL.mem 的 Type 3 Device 则没有强制要求。

  D2H Req 可以访问 Host Memory,也可以访问 HDM-D Host Bias 的 Device Memory,这也意味着 ATC 中 Cacheline 所存放的地址映射(VA->HPA)可以为 Host Memory 区域,也可以为 Device Memory 区域。Device 可以直接访问到 HDM-D Device 区域,Device 在访问该区域之前可以通过 ATS 来获取 HPA,也可以通过其他方式来获取。



3. CXL ATS 请求与完成


  PCIe ATS 请求、完成、Invalidation 等相关规则在 CXL ATS 中仍然适用,CXL 在 PCIe ATS 基础上做了些增强。

3.1. CXL ATS 请求

  ATS Req 包格式如下图所示。有别于 PCIe ATS Req 的是 CXL.Src 字段,该 bit 只对 CXL 系统有效。

  CXL.Src 用以指示发起 ATS Req 的 Function 是否支持 CXL.io,为 1 表示支持 CXL.io,为 0 表示不支持 CXL.io。CXL.io 发起 ATS 请求时必须将 ATS Req 中的 CXL.Src 置为 1,表明当前发起请求的 Function 支持 CXL.io,或者说 Function 工作在 CXL Mode 下。

在这里插入图片描述

注意

  CXL ATS Capability 中 Page Aligned Request 必须置 1,即发出的 ATS 请求为 4KB 边界对齐,不支持地址 bit [11:2]非零的非 4KB 对齐情况。

  ATC 是 Host 端 ATPT 的子表,是 Inclusive 的,FLR(Function Level Reset)时 ATC 无需将其 Cacheline 写回。FLR 后,ATC 内所有 Cacheline 均失效,需要重新使能 ATS 并重新获取相关 Cacheline。


3.2. CXL ATS 完成

  Host 通过 ATS Cpl(Completion)来响应 ATS Req,CXL ATS Cpl 包格式如下图所示。有别于 PCIe ATS Cpl 的是 CXL.io 字段,该 bit 只对 CXL 系统有效。

  考虑到并非所有 Memory Region 都支持 Cache 访问,CXL ATS Cpl 采用 CXL.io bit 来指示当前 HPA 所对应的页(Page)是否只能被 CXL.io 访问,为 1 表示 Uncacheable 只能采用 CXL.io 进行访问、不支持通过 CXL.cache/mem 进行访问,为 0 表示 Cacheable 且 CXL.io/cache/mem 均可以访问该页。

在这里插入图片描述



4. CXL ATS 流程


  对于支持 CXL.cache 的 CXL Device,当 Device Processor 想要访问主存时,先查找该地址在 Device Cache 内是否存在数据副本。若存在数据副本(Cache Hit),则直接对 Device Cache 中的该 Cacheline 进行读写操作即可;若不存在数据副本(Cache Miss),则需要通过 CXL.cache 去主存存取数据。D2H Cache 请求 Message 中采用的为 HPA,Device Processor 发起请求时采用的为 VA,需要将 VA 转换为 HPA。若 Device ATC 内不存在该 VA->HPA 的转换,需要通过 CXL.io 发起 ATS 请求。

  对于支持 ATS、PRS(Page Request Services,页请求服务,详参 PCIe 页请求服务介绍)的 CXL Device,Device Processor 访问 Host VA 的流程如下图所示。

在这里插入图片描述

  解释如下:

  1. Processor 发出访问 VA 地址的请求。
  2. 判断 ATC 中是否存在 VA 对应的 HPA。若存在,直接跳转至 Step 6;若不存在,继续 Step 3。
  3. Device 通过 CXL.io 发送 ATS 地址转换请求给 Host。
  4. 判断 ATS 请求是否成功。若成功,跳转至 Step 6;若不成功,继续 Step 5。
  5. Device 通过 CXL.io 发送页请求服务给 Host,完成后跳至 Step 3。(假设 Device 支持 PRS 且不会失败)
  6. VA 转换为 HPA。
  7. 判断 HPA 地址对应的 Memory 是否 Cacheable。若 Non-cacheable,进行 Step 8;若为 Cacheable,进入 Step 9。
  8. CXL.io 发送 VA 访问请求给 Host,跳至 Step 12。
  9. 判断 HPA 地址是否在 Device Cache 内存在有效副本。若不存在,继续 Step 10;若不存在,跳至 Step 11。
  10. CXL.cache 发送地址为 HPA 的 D2H Cache 请求,取回的数据缓存在 Device Cache 中。(假设不会 Cache 请求成功。)
  11. 从 Device Cache 中取出 HPA 对应的 Cacheline 数据。
  12. 得到 VA/HPA 地址的数据,结束访问。


5. 问题


  • 为什么CXL.mem不需要ATS, CXL.mem用的地址不是HPA吗?

    M2S Req/RwD 能直接在 Host 拿到 HPA,S2M BISnp 能从之前的 M2S Req/RwD 中拿到 HPA。

  • Host能给Device发ATS请求吗?Host能看到Device的物理地址吗?

    HPA,主机物理地址,Host 没必要到 Host 去取 HPA,Host 能看到统一编址下的 Device Memory 物理地址。



6. 参考


  1. CXL Base Spec, r3.0
  2. PCIe Base Spec, r6.0.1
  3. PCIe地址转换服务(ATS)详解
  4. PCIe页请求服务(PRS)介绍

— END —


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

⬆️ 返回顶部 ⬆️

<think>嗯,用户想了解CXL GPF技术的介绍和应用场景。首先,我需要回忆一下CXL和GPF的相关知识。CXL是Compute Express Link,一种高速互连协议,用于CPU与设备之间的通信,比如GPU、FPGA和内存扩展设备。而GPF可能是指General Purpose Flash或者某种通用功能结构?不过根据用户提供的引用内容,这里提到的GPF DVSEC结构,可能是指Generic Packet Format或者某种与GPF相关的控制结构。 用户提供的引用[1]提到GPF DVSEC用于CXL Port中的GPF相关能力,控制Phase1和Phase2的Timeout值。DVSEC是Designated Vendor-Specific Extended Capability,属于PCIe配置空间的一部分,用于扩展厂商特定的功能。因此,CXL GPF应该是指通过DVSEC结构实现的某种超时控制机制,用于管理CXL设备间的通信阶段。 接着,引用[2]和[3]提到CXL寄存器在PCIe配置空间的DVSEC中,以及CXL设备必须支持特定的协议。这说明GPF DVSEC是CXL协议中用于配置和管理设备通信的重要部分,可能涉及到错误处理、超时控制等机制。 应用场景方面,CXL主要用于高性能计算、内存扩展和异构计算。GPF技术可能在这些场景中用于确保通信的可靠性和及时性,比如防止因设备响应超时导致的系统挂起或性能下降。例如,在内存扩展设备中,GPF的超时控制可以优化数据传输,确保在预定时间内完成操作,提升系统整体效率。 需要确认的是GPF具体代表什么。根据引用内容,GPF DVSEC控制Phase1和Phase2的Timeout,可能是指GPF协议中的不同阶段,或者某种分阶段的操作流程。这可能涉及到CXL链路训练、错误恢复流程中的阶段管理,确保各阶段在规定时间内完成,避免无限等待。 总结来说,CXL GPF技术是通过DVSEC结构对CXL端口和设备中的通用功能进行配置,特别是超时控制,以增强通信的可靠性和系统稳定性。应用场景包括高性能计算、内存池化、AI加速等需要高效互连和可靠通信的领域。</think>### CXL GPF 技术介绍 CXL GPF(Generic Packet Format)是CXL协议中用于管理和控制设备通信的重要机制,通过**DVSEC(Designated Vendor-Specific Extended Capability)**结构实现。其核心功能包括: 1. **超时控制**:管理CXL链路通信中Phase1(初始协商)和Phase2(数据传输)的超时阈值,确保设备在异常情况下及时恢复或报错[^1]。 2. **协议扩展支持**:在PCIe配置空间中定义专用寄存器,兼容CXL.cache和CXL.mem协议,支持设备与CPU间的高效数据共享与一致性管理[^2][^3]。 ### 技术实现 - **寄存器布局**:GPF DVSEC在CXL Port和Device中分别定义,例如: - `Phase1 Timeout`:控制链路初始化阶段的超时时间。 - `Phase2 Timeout`:管理数据传输阶段的响应超时。 - **兼容性要求**:CXL设备必须通过Non-CXL Function Map寄存器明确声明对CXL协议的支持,避免功能冲突。 ### 应用场景 1. **高性能计算(HPC)**: 在GPU/FPGA加速场景中,GPF超时控制可优化内存访问延迟,避免设备因通信阻塞导致计算任务中断。 2. **内存池化**: 当多台主机共享CXL扩展内存时,GPF机制确保内存访问请求在超时阈值内完成,提升资源利用率。 3. **AI推理加速**: 针对大规模模型参数同步,Phase2超时配置可平衡吞吐量与容错需求,减少系统级延迟。 ### 示例:GPF超时配置 ```plaintext GPF DVSEC寄存器布局示例: Offset 0x0C: Phase1 Timeout (单位:ms) Offset 0x10: Phase2 Timeout (单位:ms) ``` 通过调整上述值可适配不同负载的容错需求,例如高实时性场景需缩短Phase1超时。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MangoPapa

请作者喝瓶可乐吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值