Scalable TCP 如何优化长肥管道

来看一个极简的拥塞控制实现 net/ipv4/tcp_scalable.c,去掉注释不到 50 行代码。它的介绍在 Scalable TCP-improving performance in highspeed networks。由于太简单,估计没什么人会在意。

本文说一下它背后的道理。

无论 bic/cubic,westwood,还是 scalable,都是针对 reno 的优化,reno 是大道,是本质,其它这些是针对长肥管道的拓展。reno tcp 的 aimd 过程很简单,每收到一个 ack(不考虑 ack 聚集和 delayed ack) 以及丢包时的行为如下:

w = w + 1 R T T w=w+\dfrac{1}{RTT} w=w+RTT1

w = w − 0.5 ⋅ w w=w-0.5\cdot w w=w0.5w

而 scalable tcp 更新为如下:

w = w + 0.01 w=w+0.01 w=w+0.01

w = w − 0.125 ⋅ w w=w-0.125\cdot w w=w0.125w

这么一个微小的改动,取消了 rtt 相关性,与 cubic 无异,但它到底 scalable 在哪,先来一个总体观感,先看 reno 和 scalable 分别在 rtt 10,20,50,100 的共存收敛:
在这里插入图片描述
随 rtt 的增加,管道不断变长,scalable tcp 的优势逐渐体现,当 rtt 巨大时,将 reno tcp 彻底压制,但在 rtt 很小时,reno tcp 体现出优势。这个结果的原因可从下图解释:
在这里插入图片描述
reno tcp 的锯齿随着 rtt 增加而变钝,scalable tcp 与 rtt 无关,万年不变。这意味着:

  • 更慢的增长期应对丢包 md 的代价更大;
  • 更大的 md 系数使锯齿均值更小。

但这也只是定性分析的结论,接下来用 response function 的曲线定量看结果。

scalable tcp 一次 probe 过程(一个锯齿)的时间(锯齿宽度)与 rtt 无关,只与 a,b 有关,求它:

W m i n ⋅ ( 1 + a ) t ⋅ ( 1 − b ) = W m i n W_{min}\cdot(1+a)^t\cdot(1-b)=W_{min} Wmin(1+a)t(1b)=Wmin

解得:

t = − ln ⁡ ( 1 − b ) ln ⁡ ( 1 + a ) t=-\dfrac{\ln(1-b)}{\ln(1+a)} t=ln(1+a)ln(1b)

接着求丢包率,按积分法,一个锯齿连同其下面的矩形的面积等于一个 probe 过程发送的数据量,该过程中丢 1 个报文,可用一个锯齿定义丢包率 p,用 Wmax 指代 W(用均值 (Wmax + Wmin) / 2 更合适),即:

p = 1 t ⋅ ( 1 − b ) ⋅ W + 1 2 ⋅ t ⋅ b ⋅ W = − ln ⁡ ( 1 + a ) ln ⁡ ( 1 − b ) ⋅ ( 1 − b 2 ) ⋅ W p=\dfrac{1}{t\cdot (1-b)\cdot W+\dfrac{1}{2}\cdot t\cdot b\cdot W}=\dfrac{-\ln(1+a)}{\ln(1-b)\cdot(1-\dfrac{b}{2})\cdot W} p=t(1b)W+21tbW1=ln(1b)(12b)Wln(1+a)

p 与 W 在式子里可对换,如果嫌这个式子太复杂,可化简它。按照泰勒展开:

W = − ( a − a 2 2 + a 3 3 − . . . ) ( − b − b 2 2 + . . . ) ⋅ ( 1 − b 2 ) ⋅ p ≈ a b ⋅ p = 0.08 ⋅ p W=\dfrac{-(a-\dfrac{a^2}{2}+\dfrac{a^3}{3}-...)}{(-b-\dfrac{b^2}{2}+...)\cdot(1-\dfrac{b}{2})\cdot p}\approx\dfrac{a}{b\cdot p}=0.08\cdot p W=(b2b2+...)(12b)p(a2a2+3a3...)bpa=0.08p

最后约等于的理由是 a 为 0.01,b 为 0.125,都很小。

同理,做出 reno tcp 的 W§ 表达式。依然按照面积的倒数求 p:

p = 1 ( 1 2 ⋅ W ) 2 + 1 2 ⋅ ( 1 2 ⋅ W ) 2 = 8 3 ⋅ W 2 p=\dfrac{1}{(\dfrac{1}{2}\cdot W)^2+\dfrac{1}{2}\cdot (\dfrac{1}{2}\cdot W)^2}=\dfrac{8}{3\cdot W^2} p=(21W)2+21(21W)21=3W28

因此:

W = ( 8 3 p ) W=\sqrt (\dfrac{8}{3p}) W=( 3p8)

在对数坐标系中分别画出 scalable tcp 和 reno tcp 的 W 关于 p 的图像,scalable 的原因就一目了然了:
在这里插入图片描述

如前文,p 是管道最大容量(锯齿面积的倒数)的度量,reno tcp 和 scalable tcp 是两种度量方法,显然后者在双对数坐标系中更加线性可扩展,这是因为斜率越接近 -1 扩展性越均衡,作为极端反例,如果斜率为 0,将会是水平线,扩展性为 0。

可见,reno tcp 过于躺平,相同的 p,在高 bdp 时表现不佳,而 scalable tcp 比较斜但不至于过陡,在高 bdp 表现良好,但在小 bdp 表现一般,稍微差于 reno tcp。

注意 scalable 和 reno 的 response 曲线的交点,常见的手段是,当 cwnd 大于该交点所指示纵坐标时,使用 scalable tcp,其它情况使用 reno tcp,但这显然不是本质,反而容易弄巧成拙。

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

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

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

相关文章

leetcode:反转字符串II

题目链接 string reverse(string s1) {string s2;string::reverse_iterator rit s1.rbegin();while (rit ! s1.rend()){s2 *rit;rit;}return s2; } class Solution { public:string reverseStr(string s, int k) {string s1;int i 0;//标记字符串下标int j 0;int length …

react+ts+vite 别名一直爆红问题

已经配置如下代码安装了types/node import path from "path"; // https://vitejs.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {"/api": {target: "http://localhost:3000",changeOrigin: true,rewrite: (pa…

数字电路尚硅谷学习笔记

学习视频:01_数字电路_从零搭建计算机引导_哔哩哔哩_bilibili 第1章数字电路基础 1.引言 数字电路是现代科技和工程领域中不可或缺的基础。从计算机系统到通信设备,从家庭电子产品到工业自动化,数字电路无处不在,影响着我们的生…

手写mybatis之解析和使用ResultMap映射参数配置

前言 学习源码是在学习什么呢? 就是为了通过这些源码级复杂模型中,学习系统框架的架构思维、设计原则和设计模式。在这些源码学习手写的过程中,感受、吸收并也是锻炼一种思维习惯,并尝试把这些思路技术迁移到平常的复杂业务设计开…

1.MySQL存储过程基础(1/10)

引言 数据库管理系统(Database Management System, DBMS)是现代信息技术中不可或缺的一部分。它提供了一种系统化的方法来创建、检索、更新和管理数据。DBMS的重要性体现在以下几个方面: 数据组织:DBMS 允许数据以结构化的方式存…

“云计算+高职”:VR虚拟仿真实训室的发展前景

随着科技的飞速进步,云计算与虚拟现实(VR)技术的结合正在深刻改变着教育领域,尤其是在高等职业教育中,这一融合为实训教学带来了革命性的变革。VR虚拟仿真实训室作为这一变革的前沿阵地,正展现出广阔的发展…

Chromium 如何查找V8 引擎中JavaScript 标准内置对象

JavaScript 标准内置对象 - JavaScript | MDN (mozilla.org) 一、JavaScript 标准内置对象 本章介绍和说明了 JavaScript 中所有的标准内置对象、以及它们的方法和属性。 这里的术语“全局对象”(或标准内置对象)不应与 global 对象混淆。这里的“全局…

出海快报 | “三消+短剧”手游横空出世,黄油相机“出圈”日本市场,从Q1看日本手游市场趋势和机会

编者按:TopOn出海快报栏目为互联网出海从业者梳理出海热点,供大家了解行业最新发展态势。 1.“三消短剧”横空出世,融合创新手游表现亮眼 随着竞争的加剧,新产品想要突出重围,只能在游戏中加入额外的元素。第一次打开…

Spring Boot项目的创建与使用

1.SpringBoot初识 SpringBoot是什么 介绍 ​ 为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是 Spring Boot。 Spring Boot是由Pivotal团队提供的全新,其设计目的是用来新应用的初始…

Java JWT:原理、机制及案例示范

一、什么是JWT? 1.1 JWT的基本概念 JWT(JSON Web Token)是一种用于在各方之间传递JSON格式信息的紧凑、URL安全的令牌(Token)。JWT的主要作用是验证用户身份或权限。它由三部分组成: Header(…

Ubuntu 上安装 MySQL 并且实现远程登录

目录 1. 安装MySQL 2. 安全配置MySQL 3. 配置MySQL远程登录 3.1. 允许远程连接 3.2. 重启MySQL服务 3.3. 为用户分配远程访问权限 进入MySQL后,执行以下命令: 3.4. 创建新用户 3.5. 授予权限 3.6. 刷新权限 3.7. 退出 MySQL 控制台 4. 配置防火…

大数据新视界 --大数据大厂之大数据驱动下的物流供应链优化:实时追踪与智能调配

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

科研绘图系列:R语言蝴蝶图(Butterfly Chart)

文章目录 介绍加载R包数据函数画图系统信息介绍 蝴蝶图(Butterfly Chart),也被称为龙卷风图(Tornado Chart)或双轴图(Dual-Axis Chart),是一种用于展示两组对比数据的图表。这种图表通过在中心轴两侧分别展示两组数据的条形图,形似蝴蝶的翅膀,因此得名。蝴蝶图的特点…

汉语言文学做大数据七年实际工作经验分享普通人快来围观

(一)没有人带你 社会上,都很现实。就是进了公司,有师傅,师傅也没空带你,最多就是有空的时候帮你解决问题。 无论是做啥工作,都要靠自己努力。努力不会成为笑话,不努力就是笑话。就…

STM32 QSPI接口驱动GD/W25Qxx配置简要

STM32 QSPI接口GD/W25Qxx配置简要 📝本篇会具体涉及介绍Winbond(华邦)和GD(兆易创新) NOR flash相关型号指令差异。由于网络上可以搜索到很多相关QSPI相关知识内容,不对QSPI通讯协议做深度解析。 🔖首先确保所使用的ST…

VScode 自定义代码配色方案

vscode是一款高度自定义配置的编辑器, 我们来看看如何使用它自定义配色吧 首先自定义代码配色是什么呢? 看看我的代码界面 简而言之, 就是给你的代码的不同语义(类名, 函数名, 关键字, 变量)等设置不同的颜色, 使得代码的可读性变强. 其实很多主题已经给出了定制好的配色方案…

闯关leetcode——88. Merge Sorted Array

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/merge-sorted-array/description/ 内容 You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements …

为什么人工智能用 Python?

人工智能领域倾向于使用Python,主要归因于Python的多个显著优势: 简洁性与可读性:Python的语法设计简洁明了,代码易于阅读和理解,这对于涉及复杂算法和逻辑的人工智能项目尤为重要。它降低了编程门槛,使得…

Unity3D 单例模式

Unity3D 泛型单例 单例模式 单例模式是一种创建型设计模式,能够保证一个类只有一个实例,提供访问实例的全局节点。 通常会把一些管理类设置成单例,例如 GameManager、UIManager 等,可以很方便地使用这些管理类单例,…

DGX的优势

NVIDIA DGX 的 AI 领导力 文章目录 前言一、概述推动跨行业的 AI 创新二、优势客户体验到哪些好处?1. 利用生成式 AI 释放研究人员的潜力2. 加快现代应用程序的上市时间3. 利用 AI 改善客户体验三、性能性能很重要1. 为世界上最先进的超级计算机提供动力2. 打破世界纪录3. 提高…