dctcp 比 reno,cubic 好在哪

news2024/12/23 23:32:26

dctcp 相比标准 aimd 如 reno,cubic 到底好在哪,理论上讲 dctcp 本质上也是 aimd 算法,但它的 cwnd 根据 mark rate 来实时缩放,而标准 reno/cubic 则一致缩放 β = 0.5(reno) or β = 0.3(cubic),直观上看 dctcp 是连续平滑的缩放,而 aimd 则是一瞬间缩放,这对随机丢包环境非常不抗造。

在非随机丢包的拥塞丢包场景,dctcp 对拥塞的敏感性要比 reno/cubic 强很多,它会按照 mark rate 来缓慢降 cwnd,并且在拥塞缓解时迅速感知,不必继续降 cwnd:

W = W − α 2 ⋅ W W=W-\dfrac{\alpha}{2}\cdot W W=W2αW

为此,我对 dctcp 做了如下的模拟:

d W d t = { 1 , y ≤ 0 − 0.5 ⋅ y ⋅ W , y > 0 \dfrac{dW}{dt} = \begin{cases} 1, & y \leq 0 \\ -0.5\cdot y\cdot W, & y \gt 0 \end{cases} dtdW={1,0.5yW,y0y>0

而相应的 reno/cubic 过程则是:

d W d t = { 1 , y ≤ 0 − β ⋅ W , y > 0 \dfrac{dW}{dt} = \begin{cases} 1, & y \leq 0 \\ -\beta\cdot W, & y \gt 0 \end{cases} dtdW={1,βW,y0y>0

这就能绘制出经典的 tcp 锯齿了,如下图:
在这里插入图片描述

可以非常清晰得看出在连续拥塞和缓解(sin 函数模拟),密集随机丢包和稀疏随机丢包三种模式下,dctcp 均可获得更小的 cwnd 损失。

dctcp 这个收益难道来自算法的精妙吗?不!它来自 ecn 带来的更加确定的信息。

上图的代码如下:

#!/opt/homebrew/bin/python3

import sys
import numpy as np
import matplotlib.pyplot as plt
import random

type = "0"
beta = 0.5

def dxdt(x, y, t):
    if y > 0:
        return - 0.5 * y * x
    else:
        return 1

def dzdt(z, y, t):
    if y > 0:
        return - beta * z
    else:
        return 1

def ydt(y, t):
    if type == "sin":
        return 0.5*(-np.cos(0.1*t) +  np.cos(0.4*t))
    elif type == "xishu":
        prob = random.random()
        if prob < 0.8:
            return 0
        return 2*random.random() - 1
    elif type == "miji":
        return 2*random.random() - 1
    return 0

if len(sys.argv) < 3:
    sys.exit()

type = sys.argv[1]
beta = float(sys.argv[2])

t = np.linspace(0, 50, 500)
x = np.zeros_like(t)
y = np.zeros_like(t)
z = np.zeros_like(t)

x[0], z[0] = 5, 5

for i in range(1, len(t)):
    dt = t[i] - t[i - 1]
    dy = ydt(y[i - 1], i)
    dx = dxdt(x[i - 1], dy, t[i - 1])
    dz = dzdt(z[i - 1], dy, t[i - 1])
    x[i] = x[i - 1] + (dx) * dt
    z[i] = z[i - 1] + (dz) * dt
    y[i] = dy

plt.plot(t, y, label='y') # mark rate < 1
plt.plot(t, x, label='x') # dctcp
plt.plot(t, z, label='z') # reno/cubic
plt.legend()
plt.xlabel('t')
plt.grid(True)
plt.show()

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

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

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

相关文章

PostgreSQL数据库内核(一):增加系统表pg_test_catalog

目录 编译环境准备 gdb调试 CLion配置 增加系统表pg_test_catalog 编译环境准备 使用PostgreSQL14.5源码版本编译&#xff0c;操作系统CentOS&#xff0c;本地windos系统CLion代码工具&#xff0c;首先下载pg源码&#xff0c;上传CentOS系统&#xff1a; more /etc/os-rel…

要 set 还是 map? 我全要

引子&#xff1a; 时隔多日&#xff0c;我又回来啦&#xff0c;接上回&#xff0c;我们讲到set的一小部分&#xff0c;我们今天来讲详细讲set与map&#xff0c;满满干货启动&#xff01;根据应用场景的不同&#xff0c;STL总共实现了两种不同结构的管理式容器&#xff1a;树型…

[240803] Prompt Fuzzer 新版本发布 | Windows 会在更新时进行时间调整以减少碳排放

目录 Prompt Fuzzer 新版本发布&#xff1a;更强大、更灵活的 GenAI 应用安全评估工具Windows 会在更新时进行时间调整以减少碳排放 Prompt Fuzzer 新版本发布&#xff1a;更强大、更灵活的 GenAI 应用安全评估工具 Prompt Security 发布了新版 Prompt Fuzzer&#xff0c;这是…

CSS+js:顶部导航栏背景滚动渐变、顶部背景滚动渐变

一、效果图 图1 图2 图3 二、gradual.html代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>顶部导航栏渐变和顶部背景渐变</title></head><body><div class"content-root" id&quo…

Linux PSCI框架

Linux PSCI框架 概述 参考链接&#xff1a; 简单讲解Linux PSCI框架-Linxu内核栈 概述 PSCI &#xff08;Power State Coordination Interface&#xff09; 是ARM定义的电源管理接口规范&#xff0c;由firm来实现。Linux系统通过smc/hvc指令&#xff08;设备树可查看是那种&a…

5.7软件质量和软件度量

软件质量和软件度量 软件质量软件质量特性ISO/EC9126软件质量模型练习题Mc Call质量模型 软件质量保证软件评审软件容错技术结构冗余信息冗余时间元余冗余附加技术 软件度量练习题 软件质量 软件质量&#xff1a;是指反映软件系统或软件产品满足规定或隐含需求的能力的特征和特…

代码随想录算法训练营day32 | 509. 斐波那契数 、70. 爬楼梯 、746. 使用最小花费爬楼梯

碎碎念&#xff1a;开始动态规划了&#xff01;加油&#xff01; 参考&#xff1a;代码随想录 动态规划理论基础 动态规划常见类型&#xff1a; 动规基础类题目背包问题打家劫舍股票问题子序列问题 解决动态规划问题应该要思考清楚的&#xff1a; 动态规划五部曲&#xff1…

使用 continue 自定义 AI 编程环境

一直在使用github 的 copilot 来编程&#xff0c;确实好用&#xff0c;对编码效率有很大提升。 但是站在公司角度&#xff0c;因为它只能对接公网&#xff08;有代码安全问题&#xff09;。另外&#xff0c;它的扩展能力也不强&#xff0c;无法适配公司特定领域的知识库&#x…

c# winform 创建日志登录界面

一.创建一个用于登录的Login的复合控件 1.右击项目文件&#xff0c;点击添加用户控件&#xff0c;设置为控件名为Login。 2.拉动两个lable控件&#xff0c;两个textBox控件&#xff0c;一个button,一个CheckBox控件。 3.将控件的权限&#xff08;Modifiers&#xff09;设置为Pu…

Unity2D在处理精灵表过程中出现不清晰的解决方法

问题阐述 在我们拿到一张精灵表的时候&#xff0c;我们通常要进行切割。但这样往往导致切割的效果不是很好&#xff0c;这里举一个简单的例子。 这是举例子用到的精灵表 我们先对他进行切割处理。 将single改为Multiope 进入精灵编辑器后&#xff0c;我们选择切割方式 此时我…

【数据结构】链表篇

1.链表的概念以及结构 概念&#xff1a;链表是一种物理储存结构上的非连续、非顺序的储存结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链式结构在逻辑上是连续的&#xff0c;但是在物理上不一定连续现实中的节点一般都是从堆上申请出来的从堆上申…

中度自闭症儿童上普校还是特校好呢

当家中有中度自闭症儿童时&#xff0c;家长们常常面临一个艰难的抉择&#xff1a;是让孩子进入普通学校&#xff08;普校&#xff09;接受融合教育&#xff0c;还是选择特殊教育学校&#xff08;特校&#xff09;接受更具针对性的教育&#xff1f;这是一个没有标准答案的问题&a…

Python基于逻辑回归的L1正则化(Lasso Logistic Regression)进行分类数据的特征选择项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 可以使用Lasso回归进行特征选择&#xff0c;尽管它本质上是一个用于回归问题的技术&#xff0c;但通过…

Python基于Prophet实现时间序列数据趋势周期特征提取项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Prophet是Facebook开源的一个用于时间序列预测的库&#xff0c;它主要用于处理具有趋势、季节性和假期…

Springboot功能模块之文件上传(minio)

一、概述 1.1什么是MinIO&#xff1f; MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用&#xff0c;它兼容亚马逊 S3 云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 官网…

基础第二关:8G 显存玩转书生大模型 Demo

基础任务 复现过程 结果截图 进阶任务 任务一 复现过程 结果截图 任务二 复现过程 结果截图

OpenFoam waves2foam 虚拟机 镜像 下载 Ubuntu

编译完成截图及安装版本信息&#xff1a; 下载地址(资源整理不易&#xff0c;下载使用需付费&#xff0c;且文件较大&#xff0c;不能接受请勿浪费时间下载): 链接&#xff1a;https://pan.baidu.com/s/1j0-MYpaG2rTYuizSWPFcxg?pwdmoxv 提取码&#xff1a;moxv

【String的介绍及使用】

String的介绍及使用 ## 小杨 为何学习string以及string的简单介绍 学习string类的原因 C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&am…

详解基于百炼平台及函数计算快速上线网页AI助手

引言 在当今这个信息爆炸的时代&#xff0c;用户对于在线服务的需求越来越趋向于即时性和个性化。无论是寻找产品信息、解决问题还是寻求建议&#xff0c;人们都期望能够获得即时反馈。这对企业来说既是挑战也是机遇——如何在海量信息中脱颖而出&#xff0c;提供高效且贴心的…

【C语言】fseek、ftell以及rewind函数(随机文件读写)

文章目录 前言1. fseek1.1 fseek函数原型1.2 fseek函数的形式参数1.3 fseek实例演示 2. ftell2.1 ftell函数原型2.2 ftell函数的实例演示 3. rewind3.1 rewind函数原型3.2 rewind函数实例演示 前言 在之前&#xff0c;我讲过文件的顺序读写。但是我们可不可以随机读写文件呢&a…