拥塞控制算法系列之:Swift-谷歌2020年SIGCOM-包级别端到端TIMELY拥塞控制算法

核心要点:

  1. 谷歌 2020 SIGCOM
  2. 基于delay的AIMD
  3. 拥塞拆分EC和FC,时延敏感场景优势
  4. 分别计算EC和FC的wnd(最核心)
  5. 保障吞吐和低延迟。Swift 因利用延迟的简单性和有效性而闻名
  6. 包级别的
  7. 论文:https://dl.acm.org/doi/pdf/10.1145/3387514.3406591
  8. 论文翻译版:参考附件

其他:

  • Swift 是 Google 提出的一种用于数据中心内通信的基于延迟的拥塞控制算法
  • 基于delay的拥塞控制算法(不是基于丢包)
  • Swift 的发展是由存储工作负载、主机网络堆栈和数据中心交换机的趋势推动的
  • 通过AIMD(加性增加乘性减少)控制和在极端拥塞情况下的流量控制来实现端到端的延迟目标
  • 拆分拥塞:Swift 将拥塞分为两个部分:NIC-to-NIC (fabric) 延迟(数据中心内不同节点间)、Endpoint 延迟(主机之间的传输延迟)。EC和FC,fabric congeston和endpoint congestion。
  • Swift 通过分别计算这两部分的拥塞窗口(ecwnd 和 fcwnd)来控制发送速率
  • 传统的研究主要集中在 fabric 拥塞上
  • 包级别的CC,perPacket。(其他算法还有QP级别、IP级别等)
  • 记录数据包在各个时间戳,包括软件、NIC等收发时间戳
  • 时间戳影响点:(参考论文原文图)
    • 端侧Tx delay,影响因子Tx queue
    • 交换机 Forward delay,影响因子 SW queue
    • 端侧Rx delay,影响因子Rx queue
      在这里插入图片描述
      在这里插入图片描述
  • 广域网和数据中心网络延迟不一样,端侧影响也不一样
  • 包含快速恢复机制,拥塞消退时,迅速增加发送速率,以便快速恢复到高效的传输状态。
  • 支持QoS,共享网络环境中,在大规模incast流量发生时,保持关键业务流量的性能。
  • 在拥塞窗口小于1的情况下,启用流控,计算数据包之间的发送间隔(基于RTT)控制速率。保障在高拥塞情况下维持低延迟和减少丢包。
  • 特点:
    • 易于部署和维护:使用简单的延迟目标来控制拥塞
    • 端到端的RTT分解为网络基础设施(fabric)和主机(host)部分,从而分别对不同原因的拥塞做出响应。
    • 能够在每台服务器上维持约100Gbps的吞吐量,同时保持低延迟和接近零的数据包丢失。long RPC场景要吞吐,short RPC要时延都能满足
    • 能够有效地处理大规模的incast流量,并且在多租户环境中保持良好的性能。
    • 延迟作为拥塞信号简单而有效,Swift的设计从TIMELY演变而来,通过简化绝对目标延迟的使用,提高了性能和鲁棒性。
    • 关注主机层面的拥塞,这在处理延迟敏感、IOPS密集型和字节密集型工作负载方面有帮助。
    • Swift算法的未来发展方向,包括如何进一步提高在极短传输中的延迟预测能力。
  • 优势:
    • 低延迟:在网络负载接近100%时仍能保持低延迟。
    • 简单:简单,易部署和维护。无需特殊的交换机配置,无需交换机协调
    • 端到端控制:独立适应网络和主机(包括NIC和主机网络栈)的拥塞,提供了端到端的拥塞控制,而不仅仅是在网络层面。
  • 不足:
    • 特定环境:只能数据中心,无法广域网
    • 对硬件的依赖:主要是时间戳精度
    • 动态调整挑战:快速变化的网络条件时,需要精心设计和调整算法参数。
    • 兼容性:混合使用传统TCP和其他拥塞控制算法的环境中需要适配。
    • 大规模incast流量的处理:虽然Swift算法设计了处理大规模incast流量的机制,但在实际部署中可能需要额外的策略来确保在极端情况下的性能。
    • 高性能:保持高吞吐量的同时,实现低延迟和低丢包率。关键关注点:吞吐、实验、丢包
    • 多租支持:为不同的流量类型提供有效的拥塞控制,避免单租大量流量影响其他租户
  • 典型拥塞场景支持:
    • 多租场景:不会相互干扰。
    • 混合流量场景:混合,包括短期、突发流量和长期的、稳定的流量。适应这种多样性,通过动态调整拥塞窗口和目标延迟来优化性能。
    • 存储和分析工作负载场景:适合于对存储和分析工作负载进行优化,这些工作负载通常需要高IOPS(输入/输出操作每秒)和低延迟的网络性能。
    • 大规模并行计算场景:低延迟和高吞吐
    • 网络拓扑变化场景:适应拓扑变化,如节点添加或移除,以及链路速度的变化。通过动态调整目标延迟。
    • 网络故障和恢复场景:包含快速恢复机制
    • 数据中心网络升级场景:适应速率升级如100G到200G这些变化,调整目标延迟来优化新旧硬件的性能。
    • 虚拟化和容器化环境场景:可在虚拟化和容器化环境中工作
  • 术语:AIMD英文全称:Additive Increase Multiplicative Decrease。TCP/IP模型中,属于运输层,为了解决拥塞控制的一个方法,即:加性增,乘性减,或者叫做“和式增加,积式减少”。加增乘减
  • 论文摘要信息:
    在这里插入图片描述
  • 论文:https://dl.acm.org/doi/pdf/10.1145/3387514.3406591
  • 其他
    • 行业中闪存的需求是100K+ IOPS的delay在100u (u表示us )
    • 行业中NVMe的需求是 1M+ IOPS的delay在 10u,需求来源是如果等太久服务器资源浪费
    • 拥塞控制是数据中心系统性能的关键推动因素(或限制因素)
    • DCTCP在长尾延迟在ms级别,尤其是大规模时候
    • DCTCP 、PFC 、DCQCN 和 HPCC 等协议使用来自交换机的显式反馈ECN来保持网络队列较短和 RPC 完成时间较短。它们可以提供良好的性能,但在大型incase和 IOPS 密集型工作负载下无济于事。原文:

    but they do not help under large incasts and IOPS-intensive workloads.

  • 核心算法(待进一步研究)
    在这里插入图片描述

参考:
https://zhuanlan.zhihu.com/p/566563035
https://baike.baidu.com/item/AIMD/10641459?fr=ge_ala

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

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

相关文章

【保姆级讲解如何计算机视觉入门】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

江协STM32:对射式红外传感器计次和旋转编码器计次

对射式红外传感器计次 还是复制粘贴之前的文件 创建外部中断文件 然后写初始化函数 外部中断函数创建 这里写外部中断函数 看着这个图来配置 具体步骤就是: 第一步,配置RCC,把我们这里涉及的外设的时钟都打开,不打开时钟&#…

深入浅出 -- 系统架构之微服务中OpenFeign最佳实践

前面我们讲了一下 Ribbon 和 RestTemplate 实现服务端通信的方法,Ribbon 提供了客户端负载均衡,而 RestTemplate 则对 http 进行封装,简化了发送请求的流程,两者互相配合,构建了服务间的高可用通信。 但在使用后也会发…

c++的学习之路:12、vector(1)

这章主要是根据cplusplus中的文档进行使用Vector,文章末附上测试代码。 目录 一、什么是vector 二、vector的简单使用 三、代码 一、什么是vector 下图是cplusplus的简介,上面一共有六点,如下: 1、vector是表示可变大小数组…

Leetcode 216.组合总和III

题目 思路 题目说只使用数字1-9,是k个数的和 树的宽度是1-9,树的深度是k 1.确定递归函数的返回值及参数: 返回值是void,参数这里还是先设定两个全局变量。一个是path存放符合条件单一结果。如:(1,2&…

VSCODE EIDE使用debug记录

用上vscode之后就感觉之前的keil不太爽了,找什么东西搜索都很麻烦,之前有写过eide的文章,想着能不能在eide里面就把debug也做了,发现真的可以,下面记录一下,主要是参考这个大佬的文章,非常感谢。…

微电网优化:基于肝癌算法(Liver Cancer algorithm, LCA)的微电网优化(提供MATLAB代码)

一、微电网优化模型 微电网是一个相对独立的本地化电力单元,用户现场的分布式发电可以支持用电需求。为此,您的微电网将接入、监控、预测和控制您本地的分布式能源系统,同时强化供电系统的弹性,保障您的用电更经济。您可以在连接…

离线数仓(十)【ADS 层开发】

前言 剩下的 ADS 层主要就是写 SQL 了,就像我们之前练习的 HQL 题一样,不同的是这里的数据从哪张表读取(DWD 还是 ADS 甚至个别表需要从 DIM 层读取)需要我们自己来分析。 ADS 的建表语句和 MySQL 是对应的,我们到时候…

网络协议——HTTP协议

目录 ​编辑 一,HTTP协议基本认识 二,认识URL 三,http协议的格式 1,发送格式 2,回应格式 四,服务端代码 五,http报文细节 1,Post与Get方法 2,Content_lenth 3&…

OpenCV-python安装教程

先安装opencv-contrib-python pip install opencv-contrib-python 再换源安装opencv-python pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 如果出现 使用这个,3.6环境下不能安装opencv的最新版本 pip install opencv-python4.5.5.62…

ST表(Segment Tree)

目录 1.概述 2.引入 3.ST表对引入的优化 1.概述 ST表是一种基于树形结构的数据结构,用于处理区间查询和更新操作。它通过预处理的方式将原始数据存储在树状结构中,以支持高效的区间查询。ST表的构建时间复杂度为O(nlogn),其中n为原始数据…

算法——分治(快速排序)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享分治算法关于快速排序的专题 对于快速排序在我个人主页专栏 <排序> 有详细的介绍,此专题对快排进行了优化操作,并介绍了优化后的快排的几种运用 如果有不足的或者错误的请…

数组方法汇总

数组和链表类似&#xff0c;都是用双指针&#xff0c;但数组不需要额外的指针&#xff0c;可以使用索引来当作指针。&#xff08;链表的时候要注意&#xff0c;什么时候是移动的指针&#xff0c;什么时候是改变的节点&#xff09;删除有序数组中的重复项 注意&#xff0c;本题中…

【数据结构】--- 探索栈和队列的奥秘

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა &#x1f4a1;个人主页&#xff1a;9ilk &#x1f4a1;专栏&#xff1a;数据结构之旅 上回我们学习了顺序表和链表&#xff0c;今天博主来讲解两个新的数据结构 — 栈和队列 &#xff0c; 请放心食用 文章目录 &#x1f3e0; 栈&#x1…

红黑树内部结点数量分析

红黑树内部结点数量分析 一、红黑树的性质二、黑高与内部结点数量2.1最大内部结点数量2.2最小内部结点数量 三、伪代码实现四、C语言代码实现五、结论 红黑树是一种自平衡的二叉搜索树&#xff0c;它通过一系列复杂的性质和操作来维持平衡&#xff0c;从而确保各种动态集合操作…

来get属于你的达坦科技令人心动的offer吧!

我们是谁 达坦科技始终致力于打造高性能Al Cloud 基础设施平台DatenLord&#xff0c;积极推动AI应用的落地。DatenLord通过软硬件深度融合的方式&#xff0c;提供高性能存储和高性能网络。为AI 应用提供弹性、便利、经济的基础设施服务&#xff0c;以此满足不同行业客户对AICl…

【Unity每日一记】如何让Sprite精灵图集的背景图层变成透明,方便切割

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

CSS基础:4种简单选择器的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 261篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中 后台回复“前端基础…

Axure案例分享—垂直手风琴(附下载地址)

今天分享的案例是Axure8(兼容9和10)制作的垂直手风琴 一、功能介绍 折叠或展开多个面板内容&#xff0c;默认为展开一项内容&#xff0c;点击任一收起的选项&#xff0c;展开面板&#xff0c;其他面板收起二、制作过程 原型是由矩形组件以及动态面板构成&#xff0c; 拖入一…

面向C++程序员的Rust教程(二)

先序文章请看&#xff1a; 面向C程序员的Rust教程&#xff08;一&#xff09; 所有权与移动语义 要说Rust语言跟其他语言最大的区别&#xff0c;那笔者觉得非数这个所有权和移动语义莫属。 深浅复制 对于绝大多数语言来说&#xff0c;变量/对象之间的赋值通常都是复制语义。…