Bloom filter-based AQM 和 BBR 公平性

news/2024/5/10 16:28:50/文章来源:https://blog.csdn.net/dog250/article/details/128401148

设 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。
  • 对 “插入” 后的对应位组计数x1x_1x1x2x_2x2,…xkx_kxk,代入函数 G(x1...xk)G(x_1...x_k)G(x1...xk),计算丢弃概率 ppp,执行概率性丢弃。
  • 以 “固定速率” 对过滤器的每个位组计数(可为负数)执行 dec 1。

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

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

将以上约束拟合成函数 GGG,对每个报文确定一个 p=G(x1...xk)p=G(x_1...x_k)p=G(x1...xk),以概率 ppp 决定如何对当前报文实施什么 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.luyixian.cn/news_show_616861.aspx

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

相关文章

【Java 数据结构】-二叉树OJ题

作者:学Java的冬瓜 博客主页:☀冬瓜的博客🌙 专栏:【Java 数据结构】 分享:宇宙的最可理解之处在于它是不可理解的,宇宙的最不可理解之处在于它是可理解的。——《乡村教师》 主要内容:二叉树的…

一维树状数组

引入 树状数组和线段树具有相似的功能,但他俩毕竟还有一些区别:树状数组能有的操作,线段树一定有;线段树有的操作,树状数组不一定有。但是树状数组的代码要比线段树短,思维更清晰,速度也更快&a…

雷神科技在北交所上市首日破发:上半年业绩下滑,路凯林为董事长

12月23日,青岛雷神科技股份有限公司(下称“雷神科技”,BJ:872190)在北京证券交易所(即北交所)上市。本次上市,雷神科技的发行价为25.00元/股,发行数量为1250万股,发行后总…

目标检测之Fast RCNN概述

基本原理 Fast Rcnn主要步骤为 利用SR算法生成候选区域利用VGG16网络进行特征提取利用第一步生成的候选区域在特征图中得到对应的特征矩阵利用ROI pooling将特征矩阵缩放到相同大小并平展得到预测结果 相对于RCNN的优化 主要有三个改进 不再将每一个候选区域依次放入CNN网络…

el-Dropdown 两个下拉框之间的动态绑定 实现默认选中值

目录 业务场景 官方链接 实现效果 使用框架 代码展示 template代码 script代码 变量定义 事件定义 onMounted事件 courseClass事件--课程班级绑定 defaultValue事件 optionChange事件 changeClass事件 为什么要给课程的每个选项也绑定click事件?作用是什么…

文字对称中的数学与魔术(二)——英文字母到单词的对称性

早点关注我,精彩不错过!在上一篇文章中,我们引入了语言文字对称性这个领域,重点介绍了阿拉伯数字的对称性,相关内容请戳:文字对称中的数学与魔术(一)——阿拉伯数字的对称性今天我们…

el-pagination 动态切换每页条数、页数切换

目录 业务场景 官方链接 实现效果 使用框架 代码展示 template代码 script代码 变量定义 事件定义 handleSizeChange事件--实现每页条数改变表格动态变化 handleCurrentChange事件--切换页码 css代码 完整代码 总结 业务场景 当表格中的数据量如果非常庞大的时候我们…

2022-忙碌的一年

(点击即可听音频)前言花有重开日,人无再少年.每当这个时候,回头驻足,不是感慨万千,就是惜时如金,一年悄无声息的从指尖划过,星海横流,岁月如碑.那些被偷走的时光,发生了大大小小的事无论是平淡无奇,还是历久难忘,有惊喜,有遗憾,终将都会隐入尘烟。大到国…

【Vant相关知识】

目录 1 什么是Vant 2 Vant的优势 3 Vant特性 4 第一个Vant程序 4.1 创建Vue项目 4.2 安装Vant支持 4.3 添加Vant引用 5 按钮组件 6 表单页面 7 area省市区选择 8 商品列表 1 什么是Vant Vant是一个轻量,可靠的移动端组件库,2017开源 目前 Va…

力扣(LeetCode)200. 岛屿数量(C++)

深度优先遍历 求连通块数量。可以遍历所有格子,当格子是岛屿,对岛屿深度优先遍历,找到整个岛,并且将遍历的岛屿标记,以免重复遍历,或递归死循环。标记可以使用状态数组,也可以修改格子的值。本…

【源码共读】Css-In-Js 的实现 classNames 库

classNames是一个简单的且实用的JavaScript应用程序,可以有条件的将多个类名组合在一起。它是一个非常有用的工具,可以用来动态的添加或者删除类名。 仓库地址:classNames 使用 根据classNames的README,可以发现库的作者对这个…

我国牛血清行业现状:FBS是最常用血清添加剂 但目前市场亟需规范化

根据观研报告网发布的《中国牛血清行业现状深度研究与投资前景分析报告(2022-2029年)》显示,牛血清是血清的一种,是一种浅黄色澄清、无溶血、无异物稍粘稠液体,内含有各种血浆蛋白、多肽、脂肪、碳水化合物、生长因子、…

Unity下如何实现RTMP或RTSP流播放和录制

技术背景 在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前,我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程: 通过Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式;Unity下创建相应的RGB/YU…

c# winform 重启自己 简单实现

1.情景 有些时候,系统会出问题,问题原因很难排除,但是重启问题就能修正,这时候我们就需要在一个检测到问题的时机,让系统进行一次重启。 2.代码 using System; using System.Windows.Forms;namespace 程序重启自己 …

IDEA创建kotlin项目

今天新建了一个kotlin项目,竟然不能导入jar包,原因是新建项目的时候,选择了kotlin作为Gradle的开发语音,kotlin语音里面,下面这行配置识别不了: implementation fileTree(dir: libs, include: [*.jar])所以…

Selenium 常用函数总结

Seleninum作为自动化测试的工具,自然是提供了很多自动化操作的函数, 下面列举下个人觉得比较常用的函数,更多可见官方文档: 官方API文档: http://seleniumhq.github.io/selenium/docs/api/py/api.html 1) 定位元素 f…

Fragment

Fragment简单认识 1.简介 在大屏幕设备上支持更加动态和灵活的UI设计就是一种卡片的设计思路一个Activity可以有多个Fragment,一个Fragment可以被多个Activity使用可以进行动态的添加,替换和删除Fragment有着自己的生命周期,同时受到Activity…

Shiro之授权

授权 1、角色认证 在controller层创建接口 使用shiro中的注解RequiresRoles指定能访问的角色名称 /*** 登录认证角色*/ RequiresRoles("admin") GetMapping("/userLoginRoles") ResponseBody public String userLoginRoles(){System.out.println("…

微信键盘终于正式发布,张小龙说:其目的并不是为了抢夺输入法市场

自从2021年1月份,张小龙在微信公开课透露:微信将上线属于自己的专属输入法,到现在已经快2年过了。 今天终于正式发布了,下面我们一起来体验下。 1、安装 打开App Store,输入“微信键盘”,点击获取就可以…

基于Springboot+Mybatis+mysql+element-vue高校就业管理系统

基于SpringbootMybatismysqlelement-vue高校就业管理系统一、系统介绍二、功能展示1.用户登陆注册2.个人信息(学生端)3.查看企业岗位信息(学生端)4.我的应聘(学生端)5.学生信息管理(辅导员)6.三方协议书审核(辅导员&am…