Bloom filter-based AQM 和 BBR 公平性

news2024/11/20 10:46:30

设 B 为 Delivery rate,D 为 Delay,将 E = B/D 作为衡量效能,所有流量的收敛状态是一个 Nash 均衡,没有任何流量有动机增加或者减少 inflight。参见:更合理的 BBR。

并不是都知道这道理,增加 inflight 能挤出吞吐是共识,但却得不到好处(E)却鲜有人理解,换句话说,吞吐并非好处的全部,除了高吞吐,还有低延时,用高延时换来的高吞吐,总效能 E 反而更低。

即便排除上述恶意,将全网节点看作一个多方博弈系统,惩罚违规者,奖励谦让者,分布式端到端处理非常难。两方博弈尚有办法,三方及以上就麻烦,总有置身事外者引入不确定,比如猜谁放的屁,两人很容易确定是谁放的,三人则不行。

回到拥塞话题,两条流情景,一条 YaBBR(Yet another BBR,参见此文) 老鼠流与一条 YaBBR 大象流共享带宽,老鼠流拥有更大的加速比,确实可以通过早期的激进发送用一点点 D 挤兑更多 B 从而提高 E,大象流由于检测到 E 的降低,尝试降低 inflight 后找到 “新的山脊”,这让带宽分配趋向公平。

但 3 条流就比较麻烦,可以比划一下,很快就会陷入三体问题。

引入一个有趣的 AQM 很高尚。它将协助端侧快速收敛到公平的 Nash 均衡状态。它不仅对 YaBBR 有用,它对所有端到端拥塞控制算法都有帮助,不依赖 ECN,一点点空间换来比 CHOKe 更加精细的控制效果。

该 AQM 之所以高尚,因为与 CHOKe 不同,它不依赖队列(so?不能叫 AQ(queue)M?),这完全适应了 BBR 不排队的特征。如果一个拥塞控制算法本身就不产生队列,基于队列的 CHOKe(以及任何别的 AQM) 岂不终成无米之炊?

在 egress 排队前加一个 Counting Bloom filters(计数布隆过滤器):

  • 每一个位组计数的定义域为 bits 允许的有符号整型。
  • 以报文的五元组(或 srcIP,dstIP 二元组等不变量)计算 hash。
  • 对每个报文进行 “插入” 操作,对应 k 个位组 inc 1。
  • 对 “插入” 后的对应位组计数 x 1 x_1 x1 x 2 x_2 x2,… x k x_k xk,代入函数 G ( x 1 . . . x k ) G(x_1...x_k) G(x1...xk),计算丢弃概率 p p p,执行概率性丢弃。
  • 以 “固定速率” 对过滤器的每个位组计数(可为负数)执行 dec 1。

将精力集中在设计一个 G G G,而不是过滤器的细节。 G G G 约束于:

  • 若流 n n n 是需要被惩罚的流,则所有 k 个位组计数均不小于 α \alpha α
  • 为弱化布隆过滤器误判,若流 n n n 不需要被惩罚,k 个位组计数方差大于 β \beta β
  • 为强化反向判断,若流 n n n 需要被奖励,k 个位组最小计数需小于 γ \gamma γ
  • 如何奖励?增加突发?允许犯错?增加缓存?…

将以上约束拟合成函数 G G G,对每个报文确定一个 p = G ( x 1 . . . x k ) p=G(x_1...x_k) p=G(x1...xk),以概率 p p p 决定如何对当前报文实施什么 action:

  • 直接转发报文(正常行为)?
  • 排队延迟报文(轻度惩罚)?
  • 丢弃报文?

欲使位组计数降低,需要端侧主动识别到该装置施加的延迟或丢包从而降速,否则来几个丢几个,且误伤善者概率极低。

不基于队列,action 也不仅限于丢包,引入 “延迟action” 可改变端侧的 D 以减少它的 E,从而促使端侧的 YaBBR 降低 inflt 以爬到最佳的 “山脊”。

通过该装置调速,端侧的 YaBBR 将很快公平收敛到 E=B/D 标识的 Nash 均衡状态。

这就是全部,算不上 AQM ,只是 AQM 的前置处理。尚未引入布隆过滤器时,我的最初想法如下:
在这里插入图片描述
但意思差不多。

下面是形而上扯淡时间。

写这篇文章来自于 5 点思考:

  • 上周的 YaBBR 未能有一个清晰的收敛模型,陷入了三体问题(以及三人猜谁放屁问题),所以这周继续思考了一下,还是要集中 AQM 去辅助。
  • 我曾说 AIMD 是零存整取的 CSMA/CD,将总线冲突集中管理起来就是交换机,可总线以太网能实现分布式排队吗?Linux 争抢自旋锁可轻易转到 ticket 自旋锁,依赖原子++,-- 即可,而共享以太网原子操作代价多大?拿 ticket 及释放 ticket 的开销是否大于冲突检测和退避开销(这不就是令牌环嘛…)?关键还是时间问题,以太网线太长了,光速太慢了,仲裁时间太久了。
  • 交换机 AQM 只能用丢包或 ECN 提示拥塞吗?难道不能有意延迟代替丢包,比如检测到激进流,用下凸曲线控制延迟,将该流延迟越放越大,期待其后知后觉,屡教不改再丢包,这肯定能提高全局带宽利用率,丢包少了重传必然也少了,无用功少了,总效能就高了。至于排队所需的能耗是否大于重传能耗,应该小很多,前者只是锁存,后者则必须经过高功耗光电转换。
  • POC 端侧的拥塞控制机制,比如写个 cc 算法,有一台主机就行,交换节点的机制可以尝试基于 nf_conntrack 来修改。
  • AQM 是管理队列的,但如果稳定点就没有队列,AQM 还管理什么呢?CHOKe 非常不错,但它依赖队列,所以要有一个不依赖队列的 just in time 算法。

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

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

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

相关文章

Java环境配置——Linux 安装JDK

注意这是用普通用户登录后,单独设置用户的java环境变量,非root用户 root用户的编辑命令是 vi /etc/profile 下载安装包 创建java目录 mkdir java 进入目录 cd java 上传安装包 将jdk-8u161-linux-x64.tar.gz上传到java目录 配置环境变量 解压安…

并查集详解

1.并查集原理 某公司今年校招全国总共招生10人,西安招4人,成都招3人,武汉招3人,10个人来自不同的学校,起先互不相识,每个学生都是一个独立的小团体,现给这些学生进行编号:{0, 1, 2,…

156. 如何在 SAP UI5 应用里显示 PDF 文件

SAP 不少标准应用都可以在业务流程进行到某个阶段,根据系统里的业务数据和 SAP 事先开发好的表单模板,生成最终的 PDF 文件并显示在应用页面上。 本文介绍一种在 SAP UI5 页面里嵌入显示 PDF 文件内容的方式,效果如下。 点击屏幕右上角的下载图标,可以将这个显示的 PDF 下…

ASP.NET 企业人力资源管理系统源码 HR源码 前端bootstrap框架开发

中小型企业HR人力资源管理系统源码带使用手册和操作说明 了解更多,可私信我! 【程序语言】:.NET 【数据库】:SQL SERVER 2008 【运行环境】:WINDOWSIIS 【其他】:前端bootstrap框架 运行环境&#xff1…

学习记录-mybatis+vue+elementUi实现分页查询(前端部分)

前端这一块最方便的莫过于是element已经提供好了 接口,三个最关键的接口这里首先解决第一个,总数。 //总记录数totalCount:100,我直接在data中将其先初始化为100,之后直接在响应中设置,这是从后端查询到的值,不需要任何…

华为被迫开源,从认知到落地SpringBoot企业级实战手册(完整版)

前言 本手册重在引导读者进入真实的项目开发体验,围绕Spring Boot技术栈全面展开,兼顾相关技术的知识拓展,由浅入深,步步为营,使读者既能学习基础知识,又能掌握. 一定的开发技巧。本书的目标是让读者拥有一…

图文详解 (Kubernetes)K8S 和 容器中的退出状态码含义和原因及解决方法

图文详解 (Kubernetes)K8S 和 容器中的退出状态码含义和原因及解决方法。 什么是容器退出码 当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本…

Hadoop3.3.4最新版本安装分布式集群部署

Index of /dist/hadoop/commonhttps://archive.apache.org/dist/hadoop/common 集群规划: 注意: NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。 …

PHP 变量

变量是用于存储信息的"容器"&#xff1a; 实例 <?php $x5; $y6; $z$x$y; echo $z; ?> 运行实例 与代数类似 x5 y6 zxy 在代数中&#xff0c;我们使用字母&#xff08;如 x&#xff09;&#xff0c;并给它赋值&#xff08;如 5&#xff09;。 从上面的…

echarts的grid——图表的位置配置

首先还是先认识grid&#xff0c;要弄清楚grid是哪一块区域&#xff0c;这就牵扯到对echarts图表元素的基本认识。为此&#xff0c;我做了一个总结&#xff0c;如图所示&#xff1a; 数学里的笛卡尔坐标系分为直角坐标系 和斜坐标系。而grid只适用于直角坐标系&#xff01; 我们…

分布式理论之分布式互斥

写在前面 本文一起看下分布式理论中的分布式互斥&#xff08;distributed mutual[ˈmjutʃuəl] exclusion&#xff09;问题&#xff0c;以及解决该问题相关算法。 1&#xff1a;什么是分布式互斥 我们先看下什么是临界资源&#xff08;critical resource&#xff09;&#…

如何提高苹果商店ASA广告的展示份额

众所周知&#xff0c;APP获得曝光后&#xff0c;才会有用户的点击率和下载&#xff0c;接下来柚鸥ASO会告诉大家&#xff0c;如何在保障ROI&#xff08;是指投入成本跟获得的收益的比值&#xff09;的情况下&#xff0c;为ASA获得最大的展示份额。 CPM是指通过商家付费&#x…

【nowcoder】笔试强训Day2

目录 一、选择题 二、编程题 2.1排序子序列 2.2倒置字符串 一、选择题 1.A 派生出子类 B &#xff0c; B 派生出子类 C &#xff0c;并且在 java 源代码有如下声明&#xff1a; 1. A a0new A(); 2. A a1new B(); 3. A a2new C(); 问以下哪个说法是正确的&#xff08;&…

19. 【gRPC系列学习】拦截器Interceptor

无论客户端还是服务端在远程调用前后执行一些通用逻辑,例如Gin框架,实现日志、监控、认证、Recover等通用逻辑,gRPC也提供这样的机制。 拦截器分为:一元拦截器、流拦截器,这两种拦截器在客户端、服务端都可以使用。拦截器的执行流程如图:其中InHandlerx与outHandlerx是同…

1 月 25 日见|Flutter Forward 活动日程表正式发布!

2023 年 1 月 25 日 (正月初四)&#xff0c;我们将在肯尼亚首都内罗毕举办 Flutter Forward 大会&#xff0c;并同时开启线上直播。本次活动将为展示最新的 Flutter 技术更新&#xff0c;包括一个主题演讲以及多个技术演讲和线上问答&#xff0c;全方位展示 Flutter 如何推动 U…

B+树 [数据结构与算法][Java]

B树 B树是B树的一种变形 我们通过一颗四阶B树来理解认识一下B树:(如下:) 我们其实从图上就可以看出B树和B树是有很多不同之处的 比如我们的B树中将叶子结点层的所有结点使用一个链表串联了起来B树中对于非叶子结点都是只是存储的索引(指针), 并没有存储关键字, 所以我们最终查…

离散数学数理逻辑部分

前言 本文创作的起因是&#xff0c;经历了离散数学的学习&#xff0c;深感学习离散之艰辛。所以产生了写一些内容帮助大家期末复习。虽然在csdn发表本文&#xff0c;有些不太合适&#xff0c;但是还是相信本文的质量和内容&#xff0c;可以给正在学习离散数学的大学生提供一些…

vscode使用shift+alt+f格式化html文件时不生效

关于vscode配置相关文章&#xff08;方便作者之后复习&#xff09;: VScode如何在敲代码时自动导入包怎么在VScode中写代码模板【以创建express模板为例】如何根据项目的eslint去配置vscode的setting 1-1 下载Beautify插件 该插件已停止维护&#xff0c;输入下载其他插件 1-2 在…

【Linux】进程概念(上)

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;冯诺依曼体…

1754. 构造字典序最大的合并字符串

摘要 1754. 构造字典序最大的合并字符串 一 贪心算法分析 题目要求合并两个字符串 word1 与 word2&#xff0c;且要求合并后的字符串字典序最大。首先需要观察一下合并的选择规律&#xff0c;假设当前需要从 word1​ 的第 i 个字符和 word2​ 的第 j个字符选择一个字符加入到…