【CXL】CXL ATS 介绍

news2024/12/23 17:21:25


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


📢 声明

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

文章目录

  • 1. CXL ATS 简介
  • 2. CXL ATS 的应用范围
  • 3. CXL ATS 请求与完成
    • 3.1. CXL ATS 请求
    • 3.2. CXL ATS 完成
  • 4. CXL ATS 流程
  • 5. 问题
  • 6. 参考


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 专栏】🔥

⬆️ 返回顶部 ⬆️

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

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

相关文章

《代码随想录》专题:二叉树的遍历

0、二叉树的遍历方式总结 二叉树主要有两种遍历方式 深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的去遍历。 从深度优先遍历和广度优先遍历进一步拓展,才有如下遍历方式 深度优先遍历 前序遍历&#xff…

【网络编程】网络编程核心概念与模式

配套环境 vscode、gcc、ubuntu22.04 概念描述 网络编程的本质 使用操作系统提供的接口函数,使得应用程序具备收发网络数据的能力。 网络接口在代码层面是操作系统提供的函数 应用程序通过网络接口使用操作系统的联网能力 网络编程核心概念 协议:为进…

STM32——led灯的点亮+闪烁+流水灯的实现

文章目录 一、LED点亮1.原理2.寄存器方式--代码3.库函数--代码4.结果展示 二、LED闪烁三、LED流水灯1.代码2.结果展示 一、LED点亮 1.原理 其方式有两种一种是寄存器方式一种是库函数方式,但其原理都是一样的。如原理图所示,与LED相连接的IO口置低电平…

HTML学习 第一部分(前端学习)

参考学习网站: 网页简介 (w3schools.com) 我的学习思路是:网站实践视频。 视频很重要的,因为它会给你一种开阔思路的方式。你会想,噢!原来还可以这样。这是书本或者网站教程 所不能教给你的。而且,对一些教程&#…

【深度解析】OSPF-开放式最短路径优先协议

目录 重点: VPN---Virtual Private Network(虚拟专用网络隧道) OSPF网络类型: 表格视图: P2P---点对点协议 BMA---广播多路访问网络 NBMA---非广播多路访问网络 P2MP---点对多点协议 OSPF认证:检测类型+密码 …

陪诊师接单app开发|陪诊小程序开发|陪诊师接单系统开发

随着人们健康意识的提高和医疗服务的不断完善,陪诊服务逐渐受到人们的关注和需求。为了满足顾客的需求,陪诊小程序应运而生。下面将介绍陪诊小程序开发的几个优势。   1. 提供方便的预约和服务体验   陪诊小程序可以让顾客随时随地通过手机预约陪诊服…

Java034——反射(Reflection)

一、Java中的反射及作用 Java的反射(reflection)机制是指在程序的运行状态中: 可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。 一句话&#…

3.类与对象

Java作为一种面向对象语言。支持以下基本概念: 多态继承封装抽象类对象实例方法重载 1.类与对象 对象:对象是类的一个实例,有状态和行为 类:类是一个模板,它描述一类对象的行为和状态 public class Dog {String bree…

编程语言里的转义字符真的叫转义字符吗?

我们先来看看别人是怎么说转义字符的? 这是我随便从两本书上截图来的,总的来说就是反斜杠加几个字符就是转义字符。 就问你晕不晕,斜杠加几个字符至少是两个字符,那还叫字符吗,那叫字符串吧,怎么取名转义字…

ModaHub魔搭社区:AI原生云向量数据库Zilliz Cloud与 LlamaIndex 集成搭建文档问答系统

目录 准备工作 准备数据 主要参数 处理数据 开始提问 本文将演示如何与集成 LlamaIndex 从指定源获取信息。 在 ChatGPT 占领各大头条时,越来越多的企业在考虑如何在它们的产品中使用 ChatGPT。一个比较大的使用场景就是如何使用 ChatGPT 来改造产品文档孱弱的搜索能力。…

【板栗糖GIS】——通过插件调教网页版b站首页

【板栗糖GIS】——通过插件调教网页版b站首页 参考视频:利用adblock关掉热搜和搜索推荐_哔哩哔哩_bilibili 在edge浏览器上使用的插件为Adblockplus,可以在插件中心查询到 拦截元素如下: bilibili.com##.adblock-tipsbilibili.com##.trend…

2023/7/15总结

JWT 在写项目的时候,本来想着把用户的数据全部存入session这样的话就不用每次都需要带用客户端的账号。后面了解到JWT,这个是在服务器无状态的一个方式。 具体是分为三个部分,第一个是头部主要存储用到的算法等信息,第二个是载荷…

51单片机--DS1302时钟

文章目录 DS1302引脚定义和应用电路内部结构框图寄存器的定义时序定义BCD码DS1302时钟代码 DS1302 DS1302是美国DALLAS公司推出的一款实时时钟电路芯片。它具有高性能和低功耗的特点,可以通过SPI三线接口与CPU进行同步通信。DS1302能够提供秒、分、时、日、星期、月…

HTML基础教程

1 什么是HTML HTML 是用来描述网页的一种语言。HTML 是一种在 Web 上使用的通用标记语言。HTML 允许你格式化文本,添加图片,创建链接、输入表单、框架和表格等等,并可将之存为文本文件,浏览器即可读取和显示。 HTML 指的是超文本…

复用cmake代码的其他方法

复用cmake代码的其他方法 函数和宏是代码复用的方法,在cmake3.18版本开始,cmake添加了cmake_language()命令,通过这个命令我们可以直接调用任意的cmake代码,无需将这些可复用的代码使用函数或者宏包起来. 当然cmake_language()命令不是为了代替函数和宏而设计的,而是希望通过…

ROS话题通信自定义msg

从21年至今写过不下10个ROS话题通信的工程,今天系统地记录下自定义msg的过程,让后来者少走弯路。 1、自定义msg简介 在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:Stri…

redis7单节点、主从、哨兵、集群的安装和配置

redis7安装和配置 2022年4月份正式发布的redis 7.0,是目前历史上变化最大的版本,有超过50个以上的新增命令 官网: https://redis.io中文镜像 http://redis.cn中文学习网: https://redis.com.cn/redis版本,建议升级…

Spring初识(一)

一.Spring 是什么? 首先我们来看看官网的解释 Spring 使每个人都可以更快、更轻松、更安全地进行 Java 编程。Spring 对速度、简单性和生产力的关注使其成为 世界上最受欢迎的 Java框架。 这里我简单的说明一下什么是spring? 我们通常所说的 Spring 指的是 Sprin…

纯CSS实现的卡片切换效果

纯CSS实现的卡片切换效果 无需JS就可以实现限于纯静态页面产品展示不需要轮播,自动切换 示例代码 <template><div class"example-css-tab"><div class"container dwo"><div class"card"><input type"radio"…

(续2)选择屏幕

分页签组件 表单控件 双击空白处----出现右侧编辑框 其中 fixed的意思是固定几列。 可修改 回车会自动复原 回车会自动复原 原因 在pai中检查字段却没有做任何操作。 打算新建一个表单 表单中指定选择行. 按钮扩展. 执行后 修改列名. 创建一个moudle 修改后不会复原. …