【RoCE】拥塞控制机制(ECN, DC-QCN)

2023-11-04

1.网络拥塞问题

在网络交换机中,当入口流量大于出口流量的带宽时会发生网络拥塞。典型的例子是多个发送方同时向同一个目的地发送网络数据。交换机的缓存可以处理暂时的拥塞,但是当拥塞太久时,交换机的缓存就会过载。当交换机缓存过载时,下一个收到的新的数据包就会被丢弃。丢包会降低应用性能,因为重传和传输协议的复杂性会带来延迟。无损网络实现了流控制机制,它可以在缓存溢出前暂停入口流量,阻止了丢包现象。然而,流控制本身会造成拥塞传播的问题。

为了理解拥塞传播问题,考虑下面的图示。假设交换机1上的端口A到E都在向端口G发送网络数据包,以至于端口G以100%的能力来接收数据并且转发。假设,毗邻的交换机2端口F也在向交换机1的端口G发送数据,速率是整个链路带宽的20%。因为端口G的出口已经满载了,端口F将会重传数据包直到被流控制机制暂停。此时,端口G将会出现拥塞,然而此时没有负效应,因为所有的端口都会被端口G尽快的服务。

现在考虑交换机2上的一个端口X,以链路带宽的20%速度向交换机1上的端口Y发送数据。端口G这个拥塞源并不处于端口X到端口Y的路径上。这种情况下,你也许会认为端口F只使用了交换机间链路的20%带宽,剩余的80%带宽对于端口X是可用的。然而并非如此,因为来自端口F的流量最终触发流控制机制使得交换机间的链路处于暂停发送,并且将来自端口X的流量降为20%而不是潜在可用的80%带宽。

 

2.拥塞控制

拥塞控制用来减少有损网络中的丢包现象或者无损网络中的拥塞传播现象。它也减少交换机缓存的占用,进而减少了延迟和改善突发流量的容忍度。使用的方法是限制导致拥塞根本原因的端口(A-F)的网络流注入速率,因此其他端口(X)发来的网络流就不会被影响。通过限制端口A-F的注入速率为端口G可以处理的速率,端口A-F不应该观察到明显的性能下降(毕竟,它们的数据包无论如何也要等待),然而从端口X到端口Y发送的数据包应该能够正常的转发,因为流控制机制不会发送暂停帧(拥塞控制目的是保持交换机的缓存占用率低,因此流控制机制就不会被触发)。当前的RoCE拥塞控制依赖显式拥塞通知(Explicit Congestion Notification, ECN)来运行。

3.Explicit Congestion Notification(ECN)
ECN最初在RFC 3168文档为TCP/IP协议所定义,它通过在IP头部嵌入一个拥塞指示器和在TCP头部嵌入一个拥塞确认实现。兼容ECN的交换机和路由器会在检测到拥塞时对网络数据包打标记。IP头部的拥塞指示也可以用于RoCEv2的拥塞控制。下面是IP头部的前四个帧的格式:

 

下面是整个IP头部的帧格式:

4.RoCEv2 的拥塞管理

RoCEv2标准定义了RoCEv2拥塞管理(RCM)。RCM提供了避免拥塞热点和优化链路吞吐量的能力。启用了RCM后,链路上早期的拥塞会被汇报给网络流的源,然后网络流的源会降低它们的注入速率,因此防止了链路上的缓存饱和与增加排队延迟带来的负面效果。拥塞管理与共存的TCP/UDP/IP流量也是相关的。然而,假设对RoCEv2和其他流量使用了不同优先级,每个优先级都有一个带宽分配,拥塞和拥塞反映(指网络源针对拥塞采取的动作)效果不应该互相影响。

为了发出拥塞信号,RCM依赖于RFC 3168中定义的ECN机制。一旦RoCEv2流量出现了拥塞,网络设备在数据包的IP头部对ECN域进行标记。这个拥塞指示器被目的终端节点按照BTH(Base Transport Header,存在于IB数据段中)中的FECN拥塞指示标识来解释意义。换句话说,当被ECN标记过的数据包到达它们原本要到达的目的地时,拥塞通知就会被反馈给源节点,源节点再通过对有问题的QP进行网络数据包的速率限制来回应拥塞通知。

RCM是一个可选的规范行为。实现了RCM的RoCEv2主机通道适配器应该按照下面的规则来运行:

当收到一个有效的RoCEv2数据包时,它的IP.ECN域的值如果是'11'(二进制),那么这个主机通道适配器应该产生一个RoCEv2的CNP,送回给所收到的包的源节点(格式规定如下)。这个主机通道适配器应该对多个被ECN标记为同一个QP的的数据包发送一个单个CNP即可。
当收到一个RoCEv2的CNP时,主机通道适配器应该对RoCEv2 CNP中标记的QP实施减缓注入速率。这个速率变化总量由一个可配置的速率减缓参数来决定。
当被ECN标记的QP自从最近收到的RoCEv2 CNP包开始经过了一个可配置的暂停时长或者超过一个已经发送的可配置的字节数之后,主机通道支配器应该增加该QP的网络注入速率。
RoCEv2的CNP包格式如下:

 

5.拥塞控制环路

RoCEv2的拥塞控制环路如下:

1.注入端必须在IP头部设置ECN值,可选的值如下(ECT是ECN-Capable Transport):定义在RFC 3168中

                                                            

注入端网卡设置IP头部的ECN值为ECT(0)(‘10’),注意,ECT(1)和ECT(0

)不可交换。

2.RoCEv2数据包注入到网络中。

3.路由器在发生拥塞的队列上接收到数据包时,不是马上丢弃,也许会先检查ECN域确定是否开启了ECN功能,如果是,就在IP头部打开CE位。

4.在发生拥塞的情况下,正常转发的数据包从网络中到达接收方。

5.接收方会对开启CE位且类型为RoCE的数据包进行过滤,触发事件,然后再将数据包释放到正常处理流程中。

6-7.为了避免由于产生流量的负载,接收方应该将针对每个QP产生的拥塞通知聚集起来。 在若干微秒内将一个CN数据包发送回注入方QP上。数据包中的ECN位设置为'01'来验证该数据包没有被IP路由器丢掉。IBA的BTH头部将会按照上述的格式来定义。

8.CNP包从接收方回注到网络中。

9.IP路由器将IB的CNP包视为一个普通的IP数据包。

10.CNP包到达源注入方节点。注入方节点对ECN位为'01'且类型为RoCE的数据包进行过滤,然后对指示的网络流应用速率限制算法。

6.量化拥塞通知(Quantized Congestion Notification,QCN)

量化拥塞通知IEEE标准(802.Qau)以有限带宽时延的以太网网络为长期保活的网络流提供了拥塞控制。这是IEEE数据中心桥接(DCB)协议套件中的一部分,还包括ETS,PFC,和DCBX。QCN在二层以太网络上制定,并且是针对硬件实现的。QCN适用所有的以太网帧和所有的传输,并且主机端和交换机端的行为也在标准中详细规定。QCN的配置和信息提取可以适用mlnx_qcn命令。

7.DC-QCN算法

DC-QCN算法是基于数据中心TCP(DCTCP)和量化通知算法的结合,并且和微软研究院协同开发的。最初的算法在SIGCOMM'15论文"Congestion control for large scale RDMA deployments"中提出。DC-QCN算法依赖于交换机端的ECN标记。ECN是商用数据中心交换机的普遍特点。在数据包IP头部中的查分服务域中的两个比特位用来提示拥塞。一旦交换机端出现了拥塞,这两个比特位就被置为"11"(CE)。

 标记拥塞是队列长度的概率函数,如下图所示。队列长度的两个门限值定义了标记概率。当队列长度低于门限值下限时,ECN位不会被标记。当队列长度超过门限值上限时,所有从该队列传输的网络包都会被进行ECN标记。当队列长度处于两个门限值之间时,数据包会以与队列长度线性增长的概率被进行ECN标记。

 

带有ECN标记的数据包被传播到接收方的网卡上。接收方网卡创建一个CNP并把它发送给ECN所标记的数据包的发送方。CNP数据包包括被标记的QP的信息。当CNP被发送方网卡收到时,它会基于下面描述的算法来降低指定QP的传输速率。

 

DC-QCN降速算法通过下面的图表来描述。简而言之,如果QP基于内部定时器和发送字节计数器,算法会持续的增加发送速率,一旦收到CNP包,就会对指定QP进行降速。除此之外,它还维持一个叫做α的参数,它反映了网络中的拥塞度,用于降速计算。

 

该算法通过三个并行的流程来定义:

  • α更新(测量拥塞度)
  • 降速
  • 提速

7.1 α更新

时间被切分为可配置的时间间隙。每个时间间隙指示是否有CNP在该时间间隙内到达。α参数是一个不断变化的平均值,它是CNP到达的时间间隙的比例(如果同一个时间间隙内不止一个CNP到达,与只有一个CNP到达效果一样)。每个时间间隙结束时,α通过后面的式子更新:new_α = g * old_α + (1 - g) * CNP_arrived, 这里g是一个介于0和1的常量参数,CNP_arrived是一个比特位的域,用来指示在上个时间间隙内是否有CNP到达。

7.2 降速

时间被切分为可配置的时间间隙(不同于α更新的间隙)。如果CNP在上个时间间隙到达(在同一个时间间隙内不止一个CNP到达时,后面的CNP不会产生指示),QP的速率通过后面的式子来减少:new_rate = old_rate * (1 - α / 2),同时将用于提速的几个参数重置。

7.3 提速

提速逻辑和QCN定义的非常相似。该逻辑划分为三个顺序的阶段:快速恢复,积极增加(保持探测),超积极增加(保持探测)。

从一个阶段移向下一个阶段是通过在该阶段中统计到的提速事件数量参数定义的。在一个阶段中提速事件的数量超过预定义的门限值后,逻辑移向下一个阶段。降速事件会重置所有和提速相关的计数器,并且返回到快速恢复阶段。除此之外,一旦提速后,在降速之前,当前的速度会被保存在一个叫target_rate的参数中。

自从上次提速后,在经过预定义的时间间隙或者预定义的发送字节数过程后,如果没有出现降速事件,就会出现提速事件。

处于快速恢复阶段时,面对每个提速事件,速度按照到target_rate的距离的一半来增加(也就是对数接近,current_rate = (current_rate + target_rate) / 2)。这允许在快速恢复阶段的开始能快速恢复到拥塞出现的速度,然后在速度接近拥塞发生的速度时,更谨慎的增加速度。

在后面两个阶段中,一旦出现提速事件,速度都是按照一个常量值来增加。这可以在带宽释放的时候获得吞吐量。

 8.总结

这次记录了RoCEv2网络中对于拥塞控制的检测,预防和应对方法。ECN检测和标记是现代数据中心商用交换机普遍具有的功能,它保存在IP头部的查分服务代码点中的两个比特位中。启用ECN功能后,在网络上出现拥塞后,交换机会对ECN域打上CE值,由接收方产生CNP来通知发送方网络拥塞事件。发送方收到CNP指示的事件通知后,根据DC-QCN算法中对当前速度处于快速恢复,积极增加和超积极增加三个阶段中对应的动作来对注入速率进行控制,从而解决网络中的拥塞情况。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【RoCE】拥塞控制机制(ECN, DC-QCN) 的相关文章

  • Linux 软件安装以及管理

    本篇主要记录常用的软件安装和管理方式 主要是 yum rpm dnf apt pip 大致都是一样的 主要是部分软件提供了解决依赖的功能 内容不包括源码安装 源码安装情况相对比较复杂 后续有时间再补充 约定 案例所用模板软件均为 pytho
  • nohup - 后台执行

    nohup no hang up 语法 nohup Command Arg 使用示例 nohup python a py 日志将被保留在 当前文件夹下的 nohup out 将日志放到文件 不输出到终端 echo hello gt 1 tx
  • 自定义编写zabbix_agent脚本

    vi usr lib systemd system zabbix agent servicce Unit Description Zabbix Agent After syslog target After network target S
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 使用Hypothesis生成测试数据

    Hypothesis是Python的一个高级测试库 它允许编写 测试用例 时参数化 然后生成使测试失败的简单易懂的测试数据 可以用更少的工作在代码中发现更多的bug 安装 pip install hypothesis 如何设计 测试数据 通
  • 基于成本和服务质量考虑的不确定性下,电动汽车充电网络基础设施需求预测和迭代优化的分层框架研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • Web 安全漏洞之 OS 命令注入

    什么是 OS 命令注入 上周我们分享了一篇 Web 安全漏洞之 SQL 注入 其原理简单来说就是因为 SQL 是一种结构化字符串语言 攻击者利用可以随意构造语句的漏洞构造了开发者意料之外的语句 而今天要讲的 OS 命令注入其实原理和 SQL
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问

    文章目录 1 前言 2 Imagewheel网站搭建 2 1 Imagewheel下载和安装 2 2 Imagewheel网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道
  • 【网安神器篇】——WPScan漏洞扫描工具

    目录 一 Wordpress简介 二 WPScan介绍 三 安装 四 获取token 1 注册账号 2 拿到token 五 使用教程 1 常用选项 2 组合命令 1 模糊扫描 2 指定扫描用户 3 插件漏洞扫描 4 主题漏洞扫描 5 Tim
  • HPE Aruba Networking:五大网络现代化策略助力实现校园数字化转型

    作者 Aruba中国区技术销售总监 俞世丹 全球数字化进程日益加深 科技已成为加速教育行业发展的重要驱动力 人工智能 大数据 云计算 物联网 虚拟现实等新兴技术的快速发展 正在深刻改变着教育的形态和模式 为了更好地满足学校师生个性化教育教学
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • ssh:connect to host github.com port 22: Connection timed out

    解决流程 1 将github的端口由22改为443 ssh T p 443 git ssh github com 2 接着输入yes进行确认 The authenticity of host ssh github com 443 192 1
  • 静态综合实验

    1 IP地址划分 192 168 1 0 27 用于主干拆分 192 168 1 32 27 用于用户拆分 192 168 1 64 27 用于用户拆分 192 168 1 96 27 用于用户拆分 192 168 1 128 27 用于用
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 高防服务器什么意思

    高防服务器什么意思 为什么要用高防服务器 小编为您整理发布高防服务器什么意思的解读 高防服务器是指具备较高防御能力的服务器 能够抵御DDoS CC等网络攻击 高防服务器通常用于保护游戏 APP 金融 电商等业务 这些领域因为其业务特性 容易
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • 网工内推 | 上市公司同程、科达,五险一金,年终奖,最高12k*15薪

    01 同程旅行 招聘岗位 网络工程师 职责描述 1 负责职场 门店网络规划 建设 维护 2 负责网络安全及访问控制 上网行为管理和VPN设备的日常运维 3 负责内部相关网络自动化和系统化建设 4 优化与提升网络运行质量 制定应急预案 人员培

随机推荐

  • Vue.js 2.0 教程

    Vue js 介绍 Vue js 读音 vju 类似于 view 是一套构建用户界面的渐进式框架 Vue js 安装 全局安装 vue cli npm install global vue cli 创建一个基于 webpack 模板的新项目
  • linux idea 快捷键,Linux 下 IDEA 的 Ctrl+Alt+S

    前言 这是个困扰我一年多的问题 今天终于解决了 起因 一年前将主系统换成 Arch Linux 后 其他一切正常就是 IDEA 的打开设置的快捷键 ctrl alt s 失效 让我很是头疼 虽然不是很重要 但是对于我这种强迫症来说别提多难受
  • 大数据与云计算的关系

    就目前而言 要想发展好大数据 就离不开云计算 我们在进行大数据的时候同样也是离不开云计算的 于是很多人觉得大数据与云计算都有一定的关系 那么大家知道不知道大数据的云计算有什么关系呢 我们在这篇文章中给大家带来这个问题的答案 首先我们说一下大
  • Unity 解决添加自定义宏不生效的问题

    Unity版本 2020 3 平台 Android 问题描述 执行代码添加 删除宏定义 或者直接在PlayerSetting面板里直接添加 删除宏 通过if判断 获取的还是之前的 新增的宏并没有生效 代码添加 删除宏定义 添加宏定义 pri
  • 代码审计作业-area39/pikachu

    1 问答题 1 使用 docker 构建 pikachu镜像 1 搜索pikachu docker search pikachu 2 拉取镜像 docker pull area39 pikachu 3 启动pikachu镜像 docker
  • PaddlePaddle(3)——深度学习模型训练和关键参数调优详解

    转载请注明作者和出处 https blog csdn net qq 28810395 运行平台 Windows 10 AIstudio官网 https aistudio baidu com 飞桨领航团AI达人创造营 前言 1 什么是人工智能
  • ftp下载出现空文件,需要修改编码

    ftp下载出现空文件 需要修改编码 ftpClient retrieveFile new String ff getName getBytes gbk ISO 8859 1 is
  • Kafka集群的搭建以及java生产消费代码测试

    1 什么是Kafka 官网上 Kafka 用于构建实时数据管道和流式应用程序 它具有横向可扩展性 容错性 速度极快 在数千家公司的生产中运行 2 集群搭建准备 JDK Zookeeper集群 https blog csdn net qq 3
  • LDO原理简析

    LDO是低压差稳压器 并且是线性稳压器 只能用在降压的场景下 即输出电压只能比输入电压小 优点是负载响应快 并且十分稳定 纹波也比较小 缺点是输入电压和输出电压不能相差过大 负载也不能太大 并且效率较低 线性调节意谓着输入输出的电压差乘上平
  • Unity3D启动时卡在Loading界面

    首先说说我是怎么遇到这个问题的吧 当初是因为手贱无意中点了这个Sign out 退出当前用户 然后就一直卡在Loading界面死循环了 收集了一些网上的解决方法都不好使 难道是因为我是Mac系统的Unity 解决方案 一 Windows系统
  • 【待完善】python中调用 imread 报错: ImportError: cannot import name imread

    pip install Pillow 该问题排查有以下几种情况 未安装 Pillow库 scipy版本不对 ImportError cannot import name imread from scipy misc 是由于 imread i
  • 生成ltx文件命令_系统小技巧:实用简单的PowerShell命令

    从Windows 10 1703版开始 PowerShell取代了原命令提示符的位置 成为Windows管理的必备利器 然而许多普通Windows用户不知它的用途 其实 通过在PowerShell窗口中执行简单的命令 往往可以解决一些实际问
  • 2023/9/11 qt&c++

    include
  • LeetCode646.最长数对链

    题目描述 646 最长数对链 力扣 LeetCode 这是一道典型的贪心算法题 我们先对原数对进行排序 排序规则是按照数对的右边界值的大小进行升序排列 初始化变量end为升序后第一个数对的右边界值 这个数无疑是最小的右边界 之后依次遍历整个
  • Qt程序的打包和发布(使用windeployqt)

    将编写完成的Qt程序进行打包 使得没有安装Qt环境的电脑也可以运行编写完成的应用 1 Release文件生成 在Qt Creator中 将构建方式改为Release 点击运行 或ctrl r快捷键运行 2 找到exe文件 复制到一个空目录中
  • java单元测试之Mock静态方法

    用例子说明 例如有下面静态方法 public final class AmountUtil public static String CustomFormatWith2Digits int amount return 1 单元测试代码 需要
  • 服务器端虚拟化安卓,安卓服务器端实例

    安卓服务器端实例 内容精选 换一换 本章节以Linux操作系统为例 指导您通过内网IP的方式连接GaussDB for Redis 实例 目标实例必须与弹性云服务器在同一个虚拟私有云和子网内才能访问 弹性云服务器必须处于目标实例所属安全组允
  • vscode和vs有什么区别?

    vscode是微软新推出的一款代码编辑器 内置了一些编译器 免费开源跨平台的工具 VS是微软的商业企业级开发环境IDE 在这之前 我们写代码的工具可以分为三个层次 最轻量级的叫做代码编辑器 例如notepad notepad subline
  • OD查看字符串

    在反汇编窗口中右击 出来一个菜单 我们在 查找 gt 所有参考文本字串 上左键点击 在text string窗口后 再右击这个窗口里面随便一处 选 search for text 输入要查找的内容 把Case sensitive 区分大小写
  • 【RoCE】拥塞控制机制(ECN, DC-QCN)

    1 网络拥塞问题 在网络交换机中 当入口流量大于出口流量的带宽时会发生网络拥塞 典型的例子是多个发送方同时向同一个目的地发送网络数据 交换机的缓存可以处理暂时的拥塞 但是当拥塞太久时 交换机的缓存就会过载 当交换机缓存过载时 下一个收到的新