首页 > 其他分享 >用 PID 优化拥塞控制

用 PID 优化拥塞控制

时间:2024-06-23 21:03:10浏览次数:3  
标签:cubic probe PID inflight 算法 拥塞 srtt 优化

这算是一篇读书实践,最近读了 B 站 up 主 DR_CAN 的《控制之美》,本想写篇读后感,有了 PID 和我的 inflight 守恒算法的结合,就算是习题和实践了。PS:这本书非常不错,但并非专业计算机范畴的作品,控制论大多数被应用在机械自动化,电子自动化,航空航天,机器人,运筹学等,但拥塞控制肯定也属于控制论范畴,这一点我早就提到过。

PID 是最简单易用的闭环控制方案,它的连续形式如下:

C ( t ) = K p e ( t ) + K i ∫ 0 t e ( r ) d r + K d d e ( t ) d t C(t)=K_pe(t)+K_i\displaystyle\int_0^te(r)dr+K_d\dfrac{de(t)}{dt} C(t)=Kp​e(t)+Ki​∫0t​e(r)dr+Kd​dtde(t)​

第一项表示当前误差作用,第二项表示历史累积误差作用,第三项表示当前误差趋势而直指未来,三项之和覆盖整个时间轴。

调参方面,Kp 调节逼近速度,Ki 调节准确性,消除稳态误差,Kd 调节稳定性,减缓震荡,三者代表所谓快,准,稳。

端到端可靠传输协议作为典型的闭环反馈系统,看起来也能用 PID,以前曾思考过这问题,参见 TCP拥塞控制和PID控制器,然而网络传输并非线性系统,PID 相对不好使,但选对目标误差,让 PID 作用于该目标,而不是整个系统就很高尚。

以 tcp ack 时钟为例,我使用 PID 离散形式(微分项的 Δ t \Delta t Δt已经并入了 Kd):

C = K p e i + K i Σ j = 0 i e j + K d ( e i − e i − 1 ) C=K_pe_i+K_i\Sigma_{j=0}^ie_j+K_d(e_i-e_{i-1}) C=Kp​ei​+Ki​Σj=0i​ej​+Kd​(ei​−ei−1​)

现在准备将它作用于 E_best 共识。

我曾经用两项 inflight 逼近传输管道最佳效能:

  • 保持 inflight = b * minrtt + (minrtt / (srtt^gamma * bw)) * beta

两项和有闭环负反馈之意,但和 PID 相比还是复杂,用 PID 逼近 E_best 更高尚,做法如下:

  • E_previous = delivery_rate_previous / srtt_previous,用刚采样值滚动计算;
  • E_curr = delivery_rate / srtt,用一个 minrtt 后的采样值滚动计算;
  • Err = E_curr - E_previous 作为 PID 的 error 输入;
  • 以 PID 的输出 C 做 cwnd 调节依据 cwnd += Kr*C。

就这么多,超简单。高端食材只需要最简单的烹饪方法。这就是 PID 版本的 inflight 守恒算法,但这是基本版。

原始的 ccr 版本(仓场路版本,因为我在仓场路的一个公园亭子里写的代码)苦于无法和 cubic 等 aimd 算法共存,和 vegas 的毛病一样,在深 buffer 场景会无限吃亏,但 PID 版本可以解决这个问题,作为一个开关特性:

  • 定期 probe;

当开启时,每间隔 p_interval 个 srtt 就用 1.25X 的 inflight 进行 probe,若 E = bw / delay 增加则继续 probe,若 E 减少则回退 probe 的 inflight。

整个算法的效果如下:

  • 用 bbr startup 进行慢启动;
  • 若有新流量进入,srtt 增加,E 减少,Err 变为负值,C 持续收敛(效率取决于 PID 参数);
  • 若有流量退出,srtt 减少,E 增加,Err 变为正值,C 持续收敛(效率取决于 PID 参数);
  • 开启 probe,若 cubic 挤占 buffer,probe 后 E 增加,直到占据足够和 cubic 均分的 buffer,E 不再增加。
  • 关闭 probe,遇到 cubic 会吃亏,但与同类算法,vegas,bbrv3 可以公平共存。

若开启 probe,当 cubic 流量执行 md 时,E = bw / delay 会跟着变高,引发算法注入更多 inflight,但随着 cubic 流量卷土重来,E 会下来,而 PID 会把 inflight 再次拉低,若没有 cubic 流量,probe 只会让 E 变小而不起作用。

但在很多异步 cubic 流量存在的情况下,probe 的震荡效应并不明显,因为多流异步共享 buffer,单独流的行为对统计波动影响并不大,只要不发生全局同步,事情就当没发生,而全局同步的概率非常低。

有个细节值得一提。inflight 守恒算法对过冲非常敏感,因为它会引发拥塞加剧甚至丢包,而在 PID 控制中过冲几乎是一定的,因此需要稍微调整:

  • 调整 Kd 参数,收缩过冲;
  • 积分下限不从 0 开始,而是维持一个窗口。

由于 PID 收敛需要一个稍微久(主要由 Kp 参数决定)的过程,该算法时标相对长,对于精细时标可能并不有效,因此不适合 dcn 场景(只是可能,并没有深入分析论证)。在长时标场景,inflight 守恒是一个可容忍的收敛结果,通过调节 PID 参数,算法对抖动的抵抗力也有所不同。

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

标签:cubic,probe,PID,inflight,算法,拥塞,srtt,优化
From: https://blog.csdn.net/dog250/article/details/139886493

相关文章

  • 全面掌握 CrystalDiskInfo使用教程 的各项高级功能,实现专业级别的硬盘健康管理、性能
    CrystalDiskInfo的初级应用大纲:介绍:CrystalDiskInfo是一款免费的硬盘健康监测工具,可以帮助用户监测硬盘状态,预测故障,并提供警报通知。安装和启动:下载并安装CrystalDiskInfo软件;启动CrystalDiskInfo软件。界面导览:主界面介绍:显示硬盘信息、健康状态、温度......
  • YOLOv5模型优化&性能提升&实战项目 专栏介绍
    订阅专栏后,私信发一下微信号和订阅截图。专栏权益:1、一份深度学习源码(如果没有源码,会在一周内制作完成,不额外收费)!!!2、免费远程部署源码!!!4、加微信免费答疑!!!5、VPN加速器永久使用!!!6、专栏内内容持续更新,永久观看,包含项目结果图!!!7、已有项目可视化定制!!!8、第二份源码价格半......
  • 用ChatGPT革新SEO:搜索引擎优化的AI驱动策略
    用ChatGPT革新SEO:搜索引擎优化的AI驱动策略引言搜索引擎优化(SEO)是数字营销中不可或缺的一部分,它影响着网站在搜索引擎结果页(SERP)上的表现。随着人工智能(AI)技术的兴起,ChatGPT等AI工具为SEO带来了新的机遇。本文将深入探讨如何利用ChatGPT辅助SEO,提供一系列创新策略和实践指......
  • Flutter 长列表优化
    Flutter长列表优化固定列表和长列表的区别固定列表中的组件,每次都会被重新构建ListView.builder会按需构建列表元素,也就是只有那些可见得元素才会调用itemBuilder构建元素减少列表项的构建次数addRepaintBoundaries:将列表项用一个RepaintBoundary(重绘边界)包裹,在......
  • 智能优化算法应用:基于平衡优化器算法PID参数优化 - 附代码
    智能优化算法应用:基于平衡优化器算法PID参数优化-附代码文章目录智能优化算法应用:基于平衡优化器算法PID参数优化-附代码1.PID简介2.平衡优化器算法简介3.适应度函数设计4.算法实验与结果5.参考文献:6.Matlab代码摘要:本文主要介绍如何用平衡优化器算法进行PID参......
  • 四. TensorRT模型部署优化-quantization(calibration)
    目录前言0.简述1.校准2.calibrationdataset3.calibrationalgorithm4.如何选择calibrationalgorithm5.calibrationdataset与batchsize的关系总结参考前言自动驾驶之心推出的《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考本次课......
  • 手把手教你java CPU飙升300%如何优化
    背景今天有个项目运行一段时间后,cpu老是不堪负载。排查top命令TOP命令topt按cpu排序topm按内存使用率排序从上面看很快看出是pid4338这个进程资源消耗很高。top-Hppidtop-Hp4338找到对应线程消耗的资源shft+pcpu占用进行排序,shift+m按照内存排......
  • 基于鲸鱼优化的knn分类特征选择算法matlab仿真
    1.程序功能描述       基于鲸鱼优化的KNN分类特征选择算法。使用鲸鱼优化算法,选择最佳的特征,进行KNN分类,从而提高KNN分类的精度。 2.测试软件版本以及运行结果展示MATLAB2022a版本运行    3.核心程序  %---开始迭代-------------------------------......
  • 为什么JavaScript要书写优化?
    第一个原因:我们写代码是给机器看的,也是给程序员看的第二个原因:JS是弱类型语言,写得太随意编码风格就不好第三个原因:潜移默化提高程序性能那要怎么书写优化?要按强类型风格写代码varnum,str,obj;//没有指明类型varnumVal=0,strVal=......
  • Android面试题:App性能优化之Java和Kotlin常见的数据结构
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点Java常见数据结构特点ArrayListArrayList底层是基于数组实现add、删除元素需要进行元素位移耗性能,但查找和修改块适合不需要频繁添加删除的链表LinkedList是双......