CXL QoS Telemetry 介绍

2023-12-01 19:10
文章标签 介绍 qos cxl telemetry

本文主要是介绍CXL QoS Telemetry 介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



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


📢 声明

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

文章目录

  • 1. QoS Telemetry 概念
  • 2. QoS Telemetry 的能力需求
    • 2.1 Multi-QoS
  • 3. QoS Telemetry 实现方式
    • 3.1 DevLoad
    • 3.2 Host 操作
    • 3.3 Device 操作
      • 3.3.1 QoS Telemetry 的管理
      • 3.3.2 Device 对其 Load 的跟踪
  • 4. 问题
  • 5. 参考


1. QoS Telemetry 概念


  Memory 访问时延跟负载程度(已用带宽)的关系示意图如下图所示。从图中可见,负载越重访问时延越大。当负载超过最优负载时,访问延时急剧增长。为了获取最佳性能,Host 可以对发出访问请求的频率进行调整,以平衡访问带宽和延时。

在这里插入图片描述

  QoS Telemetry 最早在 CXL 2.0 版本中出现,是一种工作负载调控机制。常规的 QoS 蕴含在 Req 中,是 Host 发送给 Slave 的指示信息,Device 根据 QoS 的值对接收到的请求提供不同的服务质量。CXL QoS Telemetry 则蕴含在 S2M NDR/DRS 等 Rsp 中,是 Subordinate 反馈给 Master 的指示信息,指示 Subordinate 当前的负载情况,Master 根据该指示信息调整发出请求的速率。

  (注:为便于表述,Host/Switch 在下文中统一表述为 Host。)



2. QoS Telemetry 的能力需求


  CXL QoS Telemetry 是一种 Memory 服务质量控制机制,仅适用于含有 CXL.mem 的 Type 2/3 Device 中,对于 Type 1 类型的 Cache Only 设备则没有强制的要求。对于支持 CXL 的 Host,强烈建议实现 QoS Telemetry,但并不强制,此外 CXL Switch 也没有要求。

  对于包含多种 Memory 类型的 CXL Hierarchy 或多逻辑设备(Multi Logic Device,MLD)组件,CXL QoS Telemetry 机制是至关重要的,协议也要求在 CXL Memory 设备中必须实现该机制。


2.1 Multi-QoS

  在 Host 端,为了更好地支持多类型 Memory 混用,不同类型的 Memory 可采用多种不同的 QoS 分类,每一种 QoS 独立进行带宽等性能控制。通过这种差异化的服务质量来实现不同类型 Memory 之间的性能隔离。显然,要实现不同类型 Memory 之间的性能隔离,需要实现多个请求队列,耗费的软硬件资源较高。跟 Host 一样,在 Device 端同样可以支持多种 QoS 分类。支持多种 QoS 分类的 Memory Device 称为 Multi-QoS Device。典型的分类方法:每一种类型的 Memory 分配一类 QoS,比如 DRAM 一类,PMem 一类。

  在 Device 端,对于 MLD 而言,其可以针对各 LD 提供差异化的带宽资源分配,在 MLD 整体负载不重的情况下加大某负载较重的单 LD 的可用带宽。



3. QoS Telemetry 实现方式


  CXL Memory Device 通过在反馈给 Host 的 S2M Rsp 中添加 DevLoad 信息,来通知 Host 目前 Device 的工作负载情况。Host 通过该 DevLoad 信息来动态评判发往部分 Memory 区域、单个 Device 或一组 Memory Device 的 Req 的频率是否合适并作出优化调整,从而减少各请求在 Fabric 上的冲突,并最终实现整体性能的提升。

3.1 DevLoad

  在 S2M NDR 及 DRS 中有 2b 的 DevLoad 字段来指示 Device 当前的工作负载情况,M2S 方向的 BIRsp 中没有该字段。DevLoad 编码释义如下:

  • 00b, Light Load ,负载较轻,Device Memory 目前相当清闲, Host 可以适当多发请求;
  • 01b, Optimal Load ,最佳负载,不急不缓,Host 不用调整请求频率;
  • 10b, Moderate Overload ,中度负载,Device 有点忙,Host 应立即减少请求频率;
  • 11b, Severe Overload ,严重过载,Device 相当忙,Host 应立即大量减小请求频率。

  DevLoad 仅出现于 CXL 2.0 及之后的版本,CXL 1.1 的 S2M Rsp 中没有 DevLoad 字段,支持 QoS Telemetry 的 Host 会默认 Device 负载为 Light Load。对于 Multi-QoS 的情况,每一笔 Rsp 中携带有 LD-ID 信息,Host 根据 QoS 分类情况将其归类到不同的 QoS Throttling Group (GTP)。


3.2 Host 操作

  对于支持 CXL 的 Host,强烈建议实现 QoS Telemetry,但并不强制。

  注意: CXL 协议目前未给出明确的 Host QoS Telemetry 方案,下文提到的方案,均为 CXL Spec 的建议方案。)

  Host 采用 Throttling 节流的方式对发送请求频率(或带宽)进行调控。Host 对设备负载进行监控时,并非针对每一个地址进行监控,而是在指定的 HDM 地址范围(HDM Range)进行监控。

  若 Host 支持多个 QoS 分类,不同 QoS 分类之间的 Throttling 可以依据 DevLoad 在一定范围内波动到不同的 Throttle Level,这个波动范围称为该 QoS 类型的 Host Throttling Range。Throttle 范围越大表明该区域可用的带宽上限越大。Throttle Range 并非一成不变的,Host 根据 NormalDelta、SevereDelta 参数 在一定 Limit 之内 定期进行调整 Host Throttle Range。在每一次 Throttle Range 调整期间,Host 记录该 HDM 范围内最高(而非最新)的 DevLoad,记为 LoadMax。若 LoadMax 为 Light Load,则适当减小 Throttle Range;若 LoadMax 为 Optimal Load,Throttle Range 保持不变;若 LoadMax 为 Moderate/Severe Overload,则根据 NormalDelta/SevereDelta 加大 Throttle Range。

  在调整范围上,Throttling Range 的收缩及扩大并非无限制调整,而是在一定 Limit 范围内调整。在调整时间上,Throttling Range 的定期调整间隔(tH)可以通过软件进行配置,且每一个 Throttling Range 可独立配置。协议建议把更新间隔时间 tH 稍大于发出请求到收到 Rsp 的 Round-trip 时间。为了避免 Device 过载,若 Host 收到了 Moderate/Severe Overload 类型的 DevLoad,Host 立即更新 Throttling Range 而不必等待计满 tH 时间。


3.3 Device 操作

3.3.1 QoS Telemetry 的管理

  Device 系统软件通过 SLD/MLD 中的 QoS 相关 Command 来管理 QoS Telemetry。

  对于 SLD 而言,若其支持 Command Set,必须实现 SLD QoS Telemetry 相关 SLD Commands,主要包括以下几种:

  • Set SLD QoS Control,设置 QoS 控制信息。
  • Get SLD QoS Control,获取 QoS 控制信息。
  • Get SLD QoS Status,获取 QoS 状态。

  对于 MLD,为了便于 FM 通过 API 来访问 QoS Telemetry 相关的 Capability、控制、状态等寄存器,MLD 必须支持 QoS Telemetry 相关的命令集(Command Sets)。QoS Telemetry 相关的 Command 有以下几种:

  • Get LD Info,通过该请求来获取该 LD 是否具备 QoS Telemetry Capability。
  • Get QoS Control,获取 QoS 控制信息。
  • Set QoS Control,设置 QoS 控制信息。
  • Get QoS Status,可选,获取 QoS 状态。
  • Set QoS Allocated BW,设置 QoS 分配的带宽。
  • Get QoS Allocated BW,获取 QoS 分配的带宽。
  • Set QoS BW Limit,设置 QoS 带宽上下限。
  • Get QoS BW Limit,获取 QoS 带宽上下限。

3.3.2 Device 对其 Load 的跟踪

  对于支持 QoS Telemetry 的 Device,其需要对其内部的负载情况进行跟踪,Multi-QoS Device 不同 QoS 分类之间独立跟踪。具体跟踪方法取决于 CXL Device 的设计,协议不具体指定,常见的方法有以下三种:

  • Memory Device Internal Loading (IntLoad),这种方法比较简单,通过监测请求队列(可理解为 Tx Buffer,存放待发出的 Req/Rsp/Data 等)的剩余可用深度来指示当前的工作负载情况,剩余可用深度越小表示负载越大。
  • Egress Port Backpressure ,根据 Egress Port 反压情况进行 DevLoad 反馈。若 Host 无法介绍相关请求,Device Egress Port 会出现反压。
  • Temporary Throughput Reduce ,特定情况下 Device 根据自身需要临时降低 Throughput。

  以上几种方法可同时启用。以 Type 3 Device 为例,上述方法中提到的相关队列在 Device 中的分布如下图所示。

在这里插入图片描述

  对于 SLD 而言,若 SLD 同时采用了以上三种方法且测得的 DevLoad 不同,则以测得的较大的 DevLoad 为准。

  对于 MLD,DevLoad 的评判除了要考量 SLD 中提到的三个要素,还要考量带宽等额外的因素以对不同 LD 提供差异化的 QoS。在 MLD 总体未过载的前提下,单个 LD 过载时其可使用的带宽可在一定 Limit 范围内超出预分配给该 LD 的带宽。

  MLD 总体负载及反馈的 DevLoad 如下表所示。

Additional Factors for Determining DevLoad in MLDs
TotalLoadLD over Limit BW?LD over Adjusted Allocated BW?Returned DevLoad Indication
Light/Optimal LoadNo-TotalLoad
Yes-Moderate Overload
Moderate OverloadNoNoOptimal Load
NoYesModerate Overload
Yes-Moderate Overload
Severe Overload-NoModerate Overload
-YesSevere Overload

  更多 LD 带宽计算、带宽调整、Egress Port Congestion 测量、最近传输 Rsp 策略等相关技术细节可参考 CXL Spec。



4. 问题


  • Back Invalidation Channel 中有 QoS Telemetry 吗?没有。
  • M2S Rsp 中可以有 DevLoad 吗?没有,注意方向。
  • 每一笔 Rsp 都有 DevLoad 吗?有必要这么密集地发吗?每笔都有,便于 Host 及时响应。
  • 同一个 Flit 中多笔 Rsp 的 DevLoad 信息一致吗?不一致怎么办?可能不一致,取最严峻的情况。
  • QoS 分类是怎么分的?体现在哪?取决于设计。
  • MLD 各个 LD 之间的 DevLoad 是通过什么区分的?Rsp 中有 LD-ID。


5. 参考


  1. CXL Base Spec, r3.0
  2. CXL(计算高速链路)第 15 部分 - QoS 和 CXL.io 命令:SLD QoS 遥测 - Qiita
  3. 介绍Telemetry 网络遥感技术

— END —


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

⬆️ 返回顶部 ⬆️

这篇关于CXL QoS Telemetry 介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/442366

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx:

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器