DCQCN学习

news/2025/6/13 8:44:52/

主要思想

发送端的拥塞控制主要有两种形式,一种是基于发送窗口的,另一种是基于rate的

DCQCN是一种基于rate的CC,并主要由ECN机制实现

初始设置sending rate为max line rate

接下来CC主要分为三个部分

CP(Congestion Point) 交换机

出端口当前queue length超过阈值K,则给packet打上ECN标记

NP(Notification Point) 接收端

对于每一个flow设置一个计时器,如果当前flow收到ECN标记且前 N μ s N \mu s Nμs内都未收到ECN,则返回一个CNP报文给发送端,且重置计时器

RP(Reaction Point) 发送端

收到CNP报文则执行以下操作:
R T = R C , R C = R C ( 1 − α / 2 ) , α = ( 1 − g ) α + g , R_T=R_C, \newline R_C=R_C(1-\alpha/2), \newline \alpha=(1-g)\alpha+g, RT=RC,RC=RC(1α/2),α=(1g)α+g,
其中, R T R_T RT为旧的sending rate, R C R_C RC为现在的sending rate, α \alpha α为拥塞程度, g g g为设定的更新常数

此外,RP处也设有一个定时器,如果发现连续 K K K时间内均未收到CNP报文,则
α = ( 1 − g ) α , \alpha=(1-g)\alpha, α=(1g)α,
DCQCN没有使用Slow Start算法恢复sending rate,它同QCN类似,定义了两个计数器, T T T B C BC BC,每经过 T T T单位时间,计数器 T = T + 1 T=T+1 T=T+1,每转发 B B B字节,计数器 B C = B C + 1 BC=BC+1 BC=BC+1

M a x ( T , B C ) < 5 Max(T,BC)<5 Max(T,BC)<5时,启用Fast Recovery,每经过一个周期:
R C = ( R T + R C ) / 2 , R_C=(R_T+R_C)/2, RC=(RT+RC)/2,
否则当 M i n ( T , B C ) ≤ 5 Min(T,BC)\le5 Min(T,BC)5时,启用Additive Increase,每经过一个周期:
R T = R T + R A I , R C = ( R T + R C ) / 2 , R_T=R_T+R_{AI}, \newline R_C=(R_T+R_C)/2, RT=RT+RAI,RC=(RT+RC)/2,
这里的 R A I R_{AI} RAI是一个常数

否则,启用Hyper Increase,每经过一个周期:
R T = R T + R H I ⋅ ( m i n ( T , B C ) − 4 ) , R C = ( R T + R C ) / 2 , R_T=R_T+R_{HI}\cdot (min(T,BC)-4), \newline R_C=(R_T+R_C)/2, RT=RT+RHI(min(T,BC)4),RC=(RT+RC)/2,
Additive Increase,这里的 R H I R_{HI} RHI也是一个常数

Buffer设置

对于buffer的设置应遵循两个原则:

1.PFC触发不能过早,保证ECN在其之前触发即可

2.PFC触发不能过晚,要保证网络无丢包

t f l i g h t t_{flight} tflight表示启用PFC后到PFC完全作用后这一段时间内进入buffer的数据量

t P F C t_{PFC} tPFC表示触发PFC的队列长度阈值,假设交换机有 n n n个出端口, B B B为总buffer大小, s s s为已占用buffer大小,则有:
t P F C ≤ ( B − 8 n t f l i g h t − s ) / 8 n , t_{PFC}\le (B-8nt_{flight}-s)/8n, tPFC(B8ntflights)/8n
但实际情境下当Buffer仍有较多空余,随着出端口不断转发,我们不需要过早地触发PFC,所以:
t P F C ≤ β ( B − 8 n t f l i g h t − s ) / 8 , t_{PFC}\le \beta(B-8nt_{flight}-s)/8, tPFCβ(B8ntflights)/8,
t E C N t_{ECN} tECN表示触发ECN的队列长度阈值,显然 s ≤ n t E C N s\le nt_{ECN} sntECN

又由于PFC要在ECN之后触发,所以:
t P F C ≥ n t E C N , t_{PFC}\ge nt_{ECN}, tPFCntECN,
最终可以得到:
t E C N < β ( B − 8 n t f l i g h t ) / ( 8 n ( β + 1 ) ) t_{ECN}<\beta(B-8nt_{flight})/(8n(\beta+1)) tECN<β(B8ntflight)/(8n(β+1))

一些特点

CNP generation

一段时间内只会发送一个CNP,并且与RTT无关,所以对反向链路拥塞不敏感

Rate based congestion control

基于rate的CC比基于窗口的CC更加细粒度且更容易实现

The need for PFC

由于一开始以满速率发送,所以不使用PFC仍会造成大量丢包,故DCQCN须与PFC搭配使用


http://www.ppmy.cn/news/47733.html

相关文章

MySQL数据库系统学习(从入门到精通)

MySQL数据库系统学习 一&#xff0c;了解数据库 1.什么是数据库 英文单词DataBase&#xff0c;简称DB。按照一定格式存储数据的一些文件的组合。 顾名思义&#xff1a;存储数据的仓库&#xff0c;实际上就是一堆文件。这些文件中存储了具有特定格式的数据。 2.什么是SQL S…

转义字符(\)对JavaScript中JSON.parse的影响概述

转义字符(\)对JavaScript中JSON.parse的影响 按照ECMA262第五版中的解释&#xff0c;JSON是一个提供了stringify和parse方法的内置对象&#xff0c;前者用于将js对象转化为符合json标准的字符串&#xff0c;后者将符合json标准的字符串转化为js对象。json标准参考<a href&q…

Java中的序列化与反序列化(一)

1、概述 大家好&#xff0c;我是欧阳方超。今天来看一下Java序列化与反序列化的问题。 2、序列化与反序列化 2.1、序列化与反序列化的概念 在Java中&#xff0c;序列化是将对象转换为可存储或传输的格式&#xff08;一般为字节流&#xff09;的过程&#xff0c;序列化后的字…

为什么网络安全缺口很大,招聘却很少?

2020年我国网络空间安全人才数量缺口超过了140万&#xff0c;就业人数却只有10多万&#xff0c;缺口高达了93%。这里就有人会问了&#xff1a; 1、网络安全行业为什么这么缺人&#xff1f; 2、明明人才那么稀缺&#xff0c;为什么招聘时招安全的人员却没有那么多呢&#xff1…

TensorFlow 2 和 Keras 高级深度学习:6~10

原文&#xff1a;Advanced Deep Learning with TensorFlow 2 and Keras 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#x…

C# Lambda表达式

目录 Lambda表达式的语法如下&#xff1a; Lambda表达式的内联特性 Lambda表达式常用的方法 C# Lambda表达式简介 Lambda表达式是C#语言中一种函数式编程的特性&#xff0c;它的主要作用是简化代码和提高代码的可读性。在使用Lambda表达式时&#xff0c;可以通过其内联特性…

【C++STL精讲】stack与queue的基本使用及模拟实现

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;stack是什么&#xff1f;&#x1f337;stack的基本使用&#x1f337;stack的模拟实现&#x1f337;queue是什么&#xff1f;&#x1f337;queue的基本使用&#x1f337;queue的模拟实现 &#x1f490;专栏导读…

SpringBoot起步依赖和自动配置

文章目录 1、起步依赖2、自动配置 1、起步依赖 概念 起步依赖本质上是一个Maven项目对象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;&#xff0c;定义了对其他库的传递依赖&#xff0c;这些东西加在一起支持某一功能。 简单的说&#xff0c;起步依赖就…