随机化 bbr probebw cycle phase

常打磨常新,bbr 和 inflight 守恒算法的模型和仿真也在不断优化。

再次给出 bbr 模型,这次修改了 d x d t \dfrac{dx}{dt} dtdx 的表达式,由 g 2 ⋅ x ⋅ r m i n g_2\cdot x\cdot r_{min} g2xrmin计算。同时加入了微观建模 probebw phase 的支持:

C = Bltbw,R = RtProp,T_r = ProbeRTT 周期,T 为 ProbeBW phase cycle 周期,g1 = Startup gain,g2 = ProbeBW gain。设 x = estimated bandwidth,r = round trip time,w = inflight:

g 2 ( t ) = { 1.25 , t m o d T = 1 1 , 1 < t m o d T ≤ T − 1 g_2(t)=\begin{cases} 1.25 ,& t\mod T=1\\\\1,&1<t\mod T\leq T-1 \end{cases} g2(t)= 1.25,1,tmodT=11<tmodTT1

I ( t ) = ∑ i = 0 n g 2 ( t + ϕ i ) ⋅ w i ( t ) I(t)=\displaystyle\sum_{i=0}^n g_2(t+\phi_i)\cdot w_i(t) I(t)=i=0ng2(t+ϕi)wi(t)

d x d t = { ( g 1 − 1 ) x , r = R C ⋅ g 2 ( t ) ⋅ x ⋅ r m i n I ( t ) − w x + g 2 ( t ) ⋅ x ⋅ r m i n − x , r > R \dfrac{dx}{dt} = \begin{cases} (g_1-1)x, & r = R \\\\ C\cdot \dfrac{g_2(t)\cdot x\cdot r_{min}}{I(t)-w_x+g_2(t) \cdot x\cdot r_{min}}-x, & r \gt R \end{cases} dtdx= (g11)x,CI(t)wx+g2(t)xrming2(t)xrminx,r=Rr>R

r ( t ) = { I ( t ) C , I ( t ) > C ⋅ R R , I ( t ) ≤ C ⋅ R r(t)=\begin{cases} \dfrac{I(t)}{C} ,& I(t)>C\cdot R\\\\R,&I(t)\leq C\cdot R \end{cases} r(t)= CI(t),R,I(t)>CRI(t)CR

r m i n = min ⁡ x ∈ [ t , t + T r ] r ( x ) r_{min}=\displaystyle\min\limits_{x\in[t,t+T_r]}r(x) rmin=x[t,t+Tr]minr(x)

d w x ( t ) d t = { x ( t ) ⋅ r m i n − w x ( t ) , t m o d T r ≠ 0 4 − w x ( t ) , t m o d T r = 0 \dfrac{dw_x(t)}{dt}=\begin{cases} x(t) \cdot r_{min}-w_x(t),& t\bmod T_r \neq 0 \\\\ 4-w_x(t),& t\bmod T_r = 0 \\ \end{cases} dtdwx(t)= x(t)rminwx(t),4wx(t),tmodTr=0tmodTr=0

这个模型描述原始的 bbr1 算法,但由于相位差的问题可能会导致不收敛(比如跌入同步 mimd):
在这里插入图片描述

bbr 充分考虑到这个问题,于是在每一轮 ProbeRTT 后会随机 place cycle phase 以打破这个局面,bbr 论文中有下列段落:

Furthermore, to improve mixing and fairness, and to reduce queues when multiple BBR flows share a bottleneck, BBR randomizes the phases of ProbeBW gain cycling by randomly picking an initial phase—from among all but the 3/4 phase—when entering ProbeBW. Why not start cycling with 3/4? The main advantage of the 3/4 pacing_gain is to drain any queue that can be created by running a 5/4 pacing_gain when the pipe is already full. When exiting Drain or ProbeRTT and entering ProbeBW, there is no queue to drain, so the 3/4 gain does not provide that advantage. Using 3/4 in those contexts only has a cost: a link utilization for that round of 3/4 instead of 1. Since starting with 3/4 would have a cost but no benefit, and since entering ProbeBW happens at the start of any connection long enough to have a Drain, BBR uses this small optimization. 【避开 0.75 印证了 dw/dt = x*R - w 这个方程的独立性和重要性】

然而原先不同步的流也可能因为这个机制而同步陷入僵局。不管怎样,这种局面一旦陷入,就要僵持一个 ProbeRTT 周期。

同步问题的万能解药就是随机。在 ProbeBW cycle 中直接用随机打破它即可。

为此,需要先做一个函数,它做如下输出,每 8 个时间单位(round-trip)随机输出且仅输出 1 次 1.25,其余输出 1:

-----cycle:0-----
phase: 0  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 1  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 2  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 3  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 4  gain: flow 1:1.00 flow 2:1.00 flow 3:1.25
phase: 5  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 6  gain: flow 1:1.25 flow 2:1.25 flow 3:1.00
phase: 7  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
-----cycle:1-----
phase: 0  gain: flow 1:1.00 flow 2:1.25 flow 3:1.00
phase: 1  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 2  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 3  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 4  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 5  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 6  gain: flow 1:1.25 flow 2:1.00 flow 3:1.25
phase: 7  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
-----cycle:2-----
phase: 0  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 1  gain: flow 1:1.00 flow 2:1.25 flow 3:1.00
phase: 2  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 3  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 4  gain: flow 1:1.25 flow 2:1.00 flow 3:1.25
phase: 5  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 6  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
phase: 7  gain: flow 1:1.00 flow 2:1.00 flow 3:1.00
-----cycle:3-----
...

以下是一个 AI 协助改出来的非常不雅观的 python 函数:

def get_value(i, seed=None):rng = random.Random(seed)cycle = i // 8index_within_cycle = i % 8if not hasattr(get_value, 'state'):get_value.state = {}if seed not in get_value.state:get_value.state[seed] = {'cycle': -1,'values': None,'rng_state': rng.getstate()}if cycle!= get_value.state[seed]['cycle']:rng.setstate(get_value.state[seed]['rng_state'])values = [1] * 8special_index = rng.randint(0, 7)values[special_index] = 1.25rng.shuffle(values)get_value.state[seed]['cycle'] = cycleget_value.state[seed]['values'] = iter(values)get_value.state[seed]['rng_state'] = rng.getstate()value_iter = get_value.state[seed]['values']try:value = next(value_iter)except StopIteration:rng.setstate(get_value.state[seed]['rng_state'])values = [1] * 8special_index = rng.randint(0, 7)values[special_index] = 1.25rng.shuffle(values)value_iter = iter(values)get_value.state[seed]['values'] = value_iterget_value.state[seed]['rng_state'] = rng.getstate()value = next(value_iter)return value

有了这个随机支持,相位差的同步僵局就解除了,即便某次不巧同步了,下一次就能解除:

    g1 = get_value(n, 1)g2 = get_value(n, 2)g3 = get_value(n, 3)x[n] = x[n-1] + dt * (C*g1*x[n-1]*R/(g1*x[n-1]*R + g2*wy[n-1] + g3*wz[n-1]) - x[n-1])y[n] = y[n-1] + dt * (C*g2*y[n-1]*R/(g2*y[n-1]*R + g1*wx[n-1] + g3*wz[n-1]) - y[n-1])z[n] = z[n-1] + dt * (C*g3*z[n-1]*R/(g3*z[n-1]*R + g1*wx[n-1] + g2*wy[n-1]) - z[n-1])wx[n] = wx[n-1] + dt * (x[n-1]*R - wx[n-1])wy[n] = wy[n-1] + dt * (y[n-1]*R - wy[n-1])wz[n] = wz[n-1] + dt * (z[n-1]*R - wz[n-1])r[n] = (wx[n] + wy[n] + wz[n]) / Cif r[n] < R:r[n] = R

取消了相位差,效果如下:
在这里插入图片描述

浙江温州皮鞋湿,下雨进水不会胖。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5.注册中心的其他实现-Nacos

文章目录 1.Nacos简介2.Nacos的安装2.1Nacos Windows本地启动不成功&#xff1f;2.2Linux环境下载并启动 3. Nacos的使用4.Nacos的负载均衡5.Nacos 健康检查6.Nacos 环境隔离7.Nacos 配置中心7.1为什么需要配置中心7.2 Nacos配置中心使用7.3 Data id7.4Nacos 上Linux部署服务7.…

XSS LABS - Level 13 过关思路

关注这个靶场的其他相关笔记&#xff1a;XSS - LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 进入靶场&#xff0c;老样子&#xff0c;右击&#xff0c;查看页面源码&#xff0c;找找不同&#xff1a; 可以看到&#xff0c;本关又多了一个新字段 t_cook&#xf…

#C++ 笔记二

四、运算符重载 1.友元 1.1 概念 类实现了数据的隐藏和封装&#xff0c;类的数据成员一般定义为私有成员&#xff0c;仅能通过类的公有成员函数才能进行读写。 如果数据成员定义成公共的&#xff0c;则又破坏了封装性。但是在某些情况下&#xff0c;需要频繁的读写数据成员…

【Transformer】基本概述

文章目录 提出背景核心思想—注意力机制流程解析参考资料 提出背景 在Transformer模型出现之前&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变体&#xff0c;如长短期记忆网络&#xff08;LSTM&#xff09;和门控循环单元&#xff08;GRU&#xff09;&#xff0c;…

Ethercat设备数据 转IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 5 设置网关采集ETHERCAT数据 5 6 用IEC61850协议转发数据 7 7 网关使用多个逻辑设备和逻辑节点的方法 9 8 安装NPCAP 10 9 案例总结 11 1 案例说明 设置网关采集EtherCAT设备数据把采集的数据转成IEC61850协议转发给其…

Ollydbg提示:xxxxxx可能不是一个 32 位 PE 文件,无论如何都尝试载入吗?

原标题&#xff1a;OD提示C:\Users\XuanRan\Desktop\xxxx.exe’可能不是一个个 32 位 PE 文件,无论如何都尝试载入吗? 它的意思就是告诉你&#xff0c;OD现在只能用于32位软件。 如果要调试64位程序&#xff0c;去使用x64dbg x64dbg下载链接&#xff1a; https://github.com…

记一次ssh伪终端修改为shell

问题 用户ssh进行连接后&#xff0c;默认为伪终端。 解决办法&#xff0c;可以先拿到终端shell&#xff0c;查看用户是否为/bin/bash&#xff1a; 不是/bin/bash&#xff0c;使用如下命令进行修改&#xff1a; chsh -s /bin/bash rootservice sshd restart

【WPF】WPF学习之【二】布局学习

WPF布局学习 常用布局Grid网格布局StackPanel 布局CanvasDockPanel布局WrapPanel布局 常用布局 1、StackPanel: 学习如何使用StackPanel进行垂直和水平布局。 2、Grid: 掌握Grid的网格布局技术。 3、Canvas: 了解Canvas的绝对定位布局。 4、DockPanel: 学习DockPanel的停靠…

计算机毕业设计选题推荐-茶园茶农文化交流平台-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【Redis】Redis 主从复制

文章目录 1 前言2 主从模式介绍3 配置 Redis 主从结构3.1 建立复制3.2 断开复制3.3 其他特性3.4 拓扑结构 4 Redis 主从复制原理4.1 复制过程4.2 PSYNC 数据同步4.3 PSYNC 运行流程 5 主从复制流程5.1 全量复制流程5.2 部分复制流程5.3 实时复制流程 1 前言 分布式系统中存在一…

电路基础 ---- 负反馈放大电路的方框图分析法

1 方框图分析法 方框图如下&#xff1a; 图中 A u o A_{uo} Auo​是一个电压输入的放大器的放大倍数&#xff0c;称为开环放大倍数。 F F F为反馈系数&#xff0c;是一个矢量&#xff0c;是指输出信号 x o x_{o} xo​的多少倍回送到放大器的输入端。 M M M为衰减系数&#x…

新生开学分班用这个查询系统,1分钟即可制作同款系统

新学期已经开始了&#xff0c;老师们又要开始头疼分班的事情了。但别担心&#xff0c;现在有个超好用的查询系统&#xff0c;让分班变得简单又快速&#xff01; 在以前分班可麻烦了&#xff0c;老师们得一个个核对学生信息&#xff0c;还得通知家长。但现在&#xff0c;有了这…

VSCode + Git的常规操作(一)【描述详细直白,小白一学就会】

目录 一、文章简介 二、具体操作流程 1、操作前提 2、设置用户名、用户邮箱 &#xff08;1&#xff09;打开命令框 &#xff08;2&#xff09;配置用户名 &#xff08;3&#xff09;配置用户名邮箱 &#xff08;4&#xff09;查看配置 3、SSH密钥对的介绍、生成及配置…

软考计算机软件基础知识总结

目录 前言 计算机软件概述 操作系统 数据库 文件系统 网络协议 中间件 软件构件 应用软件 最后 前言 早期的计算机软件和计算机程序 (Computer Program) 的概念几乎不加区别&#xff0c;后来计算机 软件的概念在计算机程序的基础上得到了延伸。计算机软件是指计算机系…

HTTP 状态码:解析与处理的全面指南

一、HTTP 状态码概述 HTTP 状态码&#xff08;HTTP Status Code&#xff09;是用以表示网页服务器 HTTP 响应状态的 3 位数字代码。它在客户端与服务器之间的通信中起着至关重要的作用。 其主要作用在于向客户端清晰准确地传达服务器对请求的处理结果。例如&#xff0c;当客户…

ARCGIS 纸质小班XY坐标转电子要素面(2)

本章用于说明未知坐标系情况下如何正确将XY转要素面 背景说明 现有资料&#xff1a;清除大概位置&#xff0c;纸质小班图&#xff0c;图上有横纵坐标&#xff0c;并已知小班XY拐点坐标&#xff0c;但未知坐标系。需要上图 具体操作 大部分操作同这边文章ARCGIS 纸质小班XY…

SprinBoot+Vue餐厅点餐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

使用docker容器部署考试系统

8.30 回顾 1、使用harbor仓库 python --version yum -y update yum -y install python2-pip 部署考试系统 使用docker部署project-exam-system 1、在一台主机内&#xff0c;实现容器的编排看&#xff0c;发布考试系统 2、环境准备 docker docker-compose docker脚本 …

C语言实现SHA-256算法校验文件(win32-API)

一、前言 在数字化时代&#xff0c;信息安全与数据完整性成为了不可忽视的关键议题。在众多保障数据完整性的方法中&#xff0c;散列函数扮演着至关重要的角色。SHA-256&#xff08;Secure Hash Algorithm 256&#xff09;作为一种先进的散列算法&#xff0c;以其高度的安全性…

VScode + Python 下载及安装|python环境配置|中文乱码解决

1&#xff0c;下载安装VScode 直接点击2024.9https://vscode.download.prss.microsoft.com/dbazure/download/stable/fee1edb8d6d72a0ddff41e5f71a671c23ed924b9/VSCodeUserSetup-x64-1.92.2.exe 或者百度搜索VScode&#xff0c;可下载安装最新版 点击后等一下&#xff0c;就…