在数据中心网络中隔离大象流

1000 条短突发中混入几条大象流将严重影响短突发 p99 latency,造成抖动。这个我在 隔离网络流以优化网络 论证过了,还有另一种更直观的理解方式:

  • 规模差异越大,算术均值越偏离中位数,即算术均值的分位数越高。
    在这里插入图片描述

可以看出,无论洛伦兹曲线,基尼系数,或更普遍意义的 CDF 曲线,都能看出一个意思,扩大差异就拉高了均值和中位数之间的 gap,显得越发不公平。这里没有假设数据的任何分布特征,这是一般意义上的理解而不为建模,但它可以直击 p99,p90,p75 数据异常的本质。

早些年用指数分布建模的网络流量模型已不适用,现在微服务网络,AI 网络以及混杂着各种流量的云网络流量均展现出长程依赖,流量模型更符合帕累托分布,极少数大象流贡献了超过一半的流量以及绝大多数的时延抖动,因此,隔离大象流是高尚的。

还是那句话,按流的长度将不同流量装入不同的虚通道,以虚通道为粒度进行资源分配和资源隔离,就香了。

我曾建议应用程序自行用 getlength 获取数据长度,自行将流量按长度分类,但他们不肯。上层不配合提供有效信息,底层就要猜,这跟端到端拥塞控制的痛点一样痛,网络不提供有效信息,主机就要猜,所以知道 ecn 到底厉害在哪了吧。

既然猜就有误判,误判就有代价,成本是一定要支付的,所以要承认再好的启发式算法都有上限。
如果知道流量的统计分布就好办,但往往没有任何统计分布可以准确拟合数据,为了建模方便,我们假设流量的生存时间符合帕累托分布,问题显然就是给定一条流已经存活的时间 t,求它剩余寿命的期望。这是一道看起来不难,但算起来很麻烦的数学题。

帕累托分布的累积分布函数(CDF)为 F ( x ; α , θ ) = 1 − ( θ x ) α F(x; \alpha, \theta)=1 - \left(\frac{\theta}{x}\right)^{\alpha} F(x;α,θ)=1(xθ)α,如果一条流已经持续了时间 t(且 t ≥ θ t \geq \theta tθ),我们想要知道在此之后的剩余寿命,我们可以考虑事件在 ( t ) 时刻还未结束的概率,这实际上是条件分布的概念。

首先,我们需要计算该流已至少持续到时间 t 的概率,即 P(X>t)。根据 CDF,它是 1 − F ( t ; α , θ ) = ( θ t ) α 1 - F(t; \alpha, \theta) = \left(\frac{\theta}{t}\right)^{\alpha} 1F(t;α,θ)=(tθ)α ,接下来,为找到剩余寿命的条件分布,理论上需要对原始的帕累托分布进行适当缩放和规范化,使得它反映的是在 t 后的分布情况。在实践中需要依赖于数值模拟或高级统计方法来近似。

在上述理论下,如果我们已有流量长度的采样数据,就可得到一个更准确的分布(它不是建模用的帕累托分布),我们可以看出样本长度都集中在哪些区间,比如 80% 的流都只有 200us,有 10% 的流持续 1ms,8% 的流持续 5~10ms,1.5% 的流持续 800ms~20s,0.5% 的流持续到分钟级。如果有个流已经存活了 300us,显然我们就可以非常斩钉截铁地将其踢出短突发类别,以此类推。

实现很简单,借用 linux kernel 的 nf_conntrack,记录 conntrack 创建时间 t_start,主机流量进入网络前,计算 len = t_curr - conn.t_start,如果 len 统计数据中短突发区间上四分位值(即 p75 长度),就归入下一个类别,以此类推。

这种简单直接的做法非常有效,即使存在将流纳入大象流后它马上就结束了的可能,也不会有任何损失,首先,它已经离开了短流类别,无伤短流,其次它在该类别尚未有所作用力前就结束了,无伤自己和长流,如果它还将继续存活很久,那它将继续上升到更长的流类别中重复这样的事,在它所属某个类别的那段时间,它将和同属于该类别的其它流进入同一个虚通道。这保证了在某个特定的虚通道中,流量规模的差异很小,适合采用同一种调度策略。

如果不想借用 nf_conntrack,类似的实现逻辑也差不多,主要因为当前提到 nf_conntrack 这种老式机制太 low 了,还是要往 smartnic,ebpf,xdp,dpdk 上靠,但原理大差不差。比如实现下面的逻辑:

Mark(pkt): 
  key = hash(pkt)
  If flow[key].queue == null
    flow[key].queue = new_queue
    flow[key].queue.cnt = INIT_CNT
  flow[key].queue.cnt += pkt.pacing_gap
  flow[key].queue.len += pkt.pacing_gap
  pkt.type = flow[key].queue.len

Timer(10us):
  for each flow[i]:
      flow[i].queue.cnt -= DELTA_GAP
      if flow[i].queue.cnt == 0
          free flow[i].queue

如果怕短突发给 hash 冲突到长流里,就做个多轮 hash 起个 bloom filter 的作用。

类似的一个策略我在 dcn 隔离长短流的 aqm 里提到过,但它侧重队列和调度管理,本文描述的算法是部署在端主机的,在流量进入网络之前就将其按大小分门别类后注入特定虚通道,和 aqm 本质上不同。

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

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

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

相关文章

Redis 源码学习记录:散列 (dict)

散列 Redis 源码版本:Redis-6.0.9,本篇文章的代码均在 dict.h / dict.c 文件中。 散列类型可以存储一组无需的键值对,他特别适用于存储一个对象数据。 字典 Redis 通常使用字典结构体存储用户散列数据。字典是 Redis 的重要数据结构。除了散…

DNS服务的部署与配置(1)

一、DNS的定义 1、域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS使用UDP端口53。 当前&#xff0…

AUTOMATIC1111/stable-diffusion-webui/stable-diffusion-webui-v1.9.3

配置环境介绍 目前平台集成了 Stable Diffusion WebUI 的官方镜像,该镜像中整合如下资源: GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本:v1.9.3 Python版本:3.10.…

一维前缀和[模版]

题目链接 题目: 分析: 因为要求数组中连续区间的和, 可以使用前缀和算法注意:下标是从1开始算起的, 真正下标0的位置是0第一步: 预处理出来一个前缀和数组dp dp[i] 表示: 表示[1,i] 区间所有元素的和dp[i] dp[i-1] arr[i]例如示例一中: dp数组为{1,3,7}第二步: 使用前缀数…

02_前端三大件HTML

文章目录 HTML用于网页结构搭建1. 标签2. 客户端服务器交互流程3. 专业词汇4. html语法细节5. 安装VSCODE安装插件6. Live Server插件使用7. 标题&段落&换行&列表8. 超链接标签使用9. 图片10. 表格的写法11. 表单标签*(重点)12. 下拉框13. 页面布局标签14. 块元素和…

数理逻辑:1、预备知识

17.1 命题和联结词 ​ 命题:可以判定真假的陈述句。(则悖论,祈使句,疑问句都不是命题) ​ 原子命题:不能被分割为更小的命题的命题 例如: 2既是素数又是偶数 可以由$p: 2 是素数,…

基于移动多媒体信源与信道编码调研

前言 移动多媒体是指在移动通信环境下,通过无线网络传输的音频、视频、图像等多种媒体信息。移动多媒体的特点是数据量大、传输速率高、服务质量要求高,因此对信源编码和信道编码的性能提出了更高的要求。 本文对进3年的移动多媒体信源与信道编码的研究…

Docker 模块在宝塔中怎么使用

么是 Docker? Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分离,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 快速交付、测试和部署代码的方…

Django中model中的抽象类

Django中model中的抽象类 当我们在app中models.py文件中定义model表并执行python manage.py makemigrations和python manage.py migrate后,Django就会在数据库中创建表 但是我们也可以对其默认配置修改,定义model类但是不在数据库中创建 from django.…

ubuntu20.04 安装系统后-开机黑屏-nvidia显卡驱动没问题_thinkpad-intel-13700H

文章目录 硬件现象原因&解决 硬件 thinkpad p1 gen6笔记本, intel 13代cpu 13700H,nvidia rtx 2000 Ada laptop gpu 13700H应该是有集显的,但可能没装集显驱动or由于Bios设置的缘故,我的win任务管理器只能看到一个gpu(gpu0)&#xff1…

c++编程14——STL(3)list

欢迎来到博主的专栏:c编程 博主ID:代码小豪 文章目录 list成员类型构造、析构、与赋值iterator元素访问修改元素list的操作 list list的数据结构是一个链表,准确的说应该是一个双向链表。这是一个双向链表的节点结构: list的使用…

关于学习Go语言的并发编程

开始之前,介绍一下​最近很火的开源技术,低代码。 作为一种软件开发技术逐渐进入了人们的视角里,它利用自身独特的优势占领市场一角——让使用者可以通过可视化的方式,以更少的编码,更快速地构建和交付应用软件&#…

Capture One Studio for Mac:打造完美影像的利器

对于摄影师而言,每一次按下快门都是一次对完美影像的追求。而Capture One Studio for Mac正是这样一款能够帮助你实现这一追求的利器。 Capture One Studio for Mac v16.4.2.1中文直装版下载 首先,Capture One Studio for Mac拥有出色的图像处理能力。它…

java项目之人事系统源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的人事系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于vue的人事系统的主要使用者…

独享IP是原生IP吗?

原生IP: 原生IP是指由Internet服务提供商(ISP)直接分配给用户的IP地址,这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址,与用户的物理位置直接相关。在跨境电商中…

C++奇迹之旅:vector使用方法以及操作技巧

文章目录 📝前言🌠 熟悉vector🌉使用vector 🌠构造函数🌉vector遍历 🌠operator[]🌉迭代器 🌠Capacity容量操作🌉 size()🌉 capacity()🌉resize()…

【Android开发】Android请求出现网络请求失败,HTTP请求,安全网络通信与权限管理

额外权限 要有这个权限&#xff1a; <uses-permission android:name"android.permission.INTERNET" />HTTP安全考虑 从 Android 9&#xff08;API 级别 28&#xff09;开始&#xff0c;默认情况下不支持通过 HTTP 访问网络&#xff0c;而要求使用 HTTPS。这…

html 字体设置 (web端字体设置)

windows自带的字体是有版权的&#xff0c;包括微软雅黑&#xff08;方正&#xff09;、宋体&#xff08;中易&#xff09;、黑体&#xff08;中易&#xff09;等 版权算是个大坑&#xff0c;所谓为了避免版权问题&#xff0c;全部使用开源字体即可 我这里选择的是思源宋体&…

软考-下午题-试题二、三

主要是最后一问的不同解答 1、父图子图平衡 1、员工关系是否存在传递依赖&#xff1f;用100字以内的文字说明理由。2019 2、在职员关系模式中&#xff0c;假设每个职员有多名家属成员&#xff0c;那么职员关系模式存在什么问题&#xff1f; 应如何解决&#xff1f;2020 职员关系…

world machine学习笔记(3)

打开 可以打开场景设置&#xff0c;项目设置平铺构建设置 场景设置&#xff1a; 输出范围 设置中心点和范围 设置分辨率 项目设置&#xff1a; 设置地图颜色&#xff0c;单位&#xff0c;最高地形高度 点击这个图形进行预览设置 该按钮还有其他的功能 world machine基础流程…