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

news2024/11/18 23:51:29

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 本质上不同。

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

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

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

相关文章

web4.0-元宇宙虚拟现实

互联网一直在不断演变和改变我们的生活方式,从Web逐渐 1.0时代的静态网页到Web 2.0时代的社会性和内容制作,再从Web逐渐 在3.0阶段,互联网发展一直推动着大家时代的发展。如今,大家正站在互联网演化的新起点上,迈入Web…

两步将 CentOS 6.0 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文介绍如何将一个 CentOS 6.0 的系统升级并转换迁移到 RHEL 7.9。 本文是《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》阶进篇。 所有被测软件的验证操作可参见上述前文中对应章节的说明。 准备 CentOS 6.…

紫光同创PGL22G开发板|盘古22K开发板,国产FPGA开发板,接口丰富

盘古22K开发板是基于紫光同创Logos系列PGL22G芯片设计的一款FPGA开发板,全面实现国产化方案,板载资源丰富,高容量、高带宽,外围接口丰富,不仅适用于高校教学,还可以用于实验项目、项目开发,一板…

爆火!开源多模态大模型在手机端进行本地部署!

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型& AIGC 技术趋势、大模型& AIGC 落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了…

神经网络模型结构和参数可视化

神经网络模型结构和参数可视化 一、前言二、Netron2.1Netron简介2.2TensorFlow、Keras、Caffe模型文件实测结果2.3PyTorch、scikit-learn模型文件实测结果 三、NN-SVG四、Netscope五、PlotNeuralNet六、Graphviz七、总结参考文档 一、前言 在神经网络的某些应用场景中&#xf…

[STM32-HAL库]AS608-指纹识别模块-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、详细步骤 1.光学指纹模块 2.配置STM32CUBEMX 3.程序设计 3.1 输出重定向 3.2 导入AS608库 3.3 更改端口宏定义 3.4 添加中断处理部分 3.5 初始化AS608 3.6 函数总览 3.7 录入指纹 3.8 验证指纹 3.9 删除指纹 3.10 清空指纹库 三、总结及资源 一、前言 …

线程的概念和控制

文章目录 线程概念线程的优点线程的缺点线程异常线程用途理解虚拟地址 线程控制线程的创建线程终止线程等待线程分离封装线程库 线程概念 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一…

kali模块及字典介绍

1. 基本模块介绍 模块 类型 使用模式 功能 dmitry 信息收集 命令行 whois查询/子域名收集/端口扫描 dnmap 信息收集 命令行 用于组建分布式nmap,dnmap_server为服务端;dnmap_client为客户端 i…

踩坑——纪实

开发踩坑纪实 1 npm安装1.1 查看当前的npm镜像设置1.2 清空缓存1.3 修改镜像1.4 查看修改结果1.5 重新安装vue 2 VScode——NPM脚本窗口找不到3 springboot项目中updateById()失效4 前端跨域4.1 后端加个配置类4.2 CrossOrigin注解 5 路由出口6 springdoc openapi3 swagger3文件…

2024.5.21欧洲商会网络安全大会(上海)

本次安策将将参加超越 2024 年网络安全大会:驾驭数字前沿大会(上海),2024年5月21日,期待和欢迎新老朋友在大会上会面和交流。 时间 2024-05-21 |14:00 - 16:30 场地: 上海瑞士大酒店 地址: 3rd Floor, Davo…

零门槛微调大模型:基于 Ludwig 低代码框架使用 LoRA 技术微调实践

一、Ludwig 介绍 自然语言处理 (NLP) 和人工智能 (AI) 的飞速发展催生了许多强大的模型,它们能够理解和生成如同人类般的文本,为聊天机器人、文档摘要等应用领域带来了革命性的改变。然而,释放这些模型的全部潜力需要针对特定用例进行微调。…

php发送短信功能(创蓝短信)

一、以下是创蓝发送短信的功能&#xff0c;可以直接执行&#xff1a; <?php$phone 12312312312;$msg 测试短信功能;echo 发送手机号&#xff1a;.$phone.<br/>;echo 发送内容&#xff1a;.$msg.<br/>;$send sendMessage($phone, $msg);var_dump($send);…

(一)vForm 动态表单设计器之使用

系列文章目录 &#xff08;一&#xff09;vForm 动态表单设计器之使用 文章目录 前言 一、VForm是什么&#xff1f; 二、使用步骤 1.引入库 2.使用VFormDesigner组件 3.使用VFormRender组件 4.持久化表单设计 总结 前言 前段时间在研究Activiti工作流引擎&#xff0c;结合业务…

群晖搭建网页版Linux Ubuntu系统并实现远程访问

文章目录 1. 下载Docker-Webtop镜像2. 运行Docker-Webtop镜像3. 本地访问网页版Linux系统4. 群晖NAS安装Cpolar工具5. 配置异地访问Linux系统6. 异地远程访问Linux系统7. 固定异地访问的公网地址 docker-webtop是一个基于Docker的Web桌面应用&#xff0c;它允许用户通过浏览器远…

[实例] Unity Shader 逐像素漫反射与半兰伯特光照

漫反射光照是Unity中最基本最简单的光照模型&#xff0c;本篇将会介绍在片元着色器中实现反射效果&#xff0c;并会采用半兰伯特光照技术对其进行改进。 1. 逐顶点光照与逐像素光照 在Unity Shader中&#xff0c;我们可以有两个地方可以用来计算光照&#xff1a;在顶点着色器…

网创教程wordpress插件自动采集并发布

使用教程 出现404的请搞定自己网站的伪静态。一般都是伪静态问题。 需要定制可以联系我。 本次更新主要更新了。界面的设置。用户可以直接设置文章的分类。 设置文章发布的金额。 使插件更加的人性化。优化了采集更新发布的代码。 更新了网站的界面。 主要功能&#xff1a; w…

K8s Service 背后是怎么工作的?

kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一。它是一个网络代理&#xff0c;运行在每个节点上, 用于 service 资源的负载均衡。它有两种模式&#xff1a;iptables 和 ipvs。 iptables iptables 是 Linux 系统中的一个用户空间实用程序&#xff0c;用于…

Ubuntu 20/22 安装 Jenkins

1. 使用 apt 命令安装 Java Jenkins 作为一个 Java 应用程序&#xff0c;要求 Java 8 及更高版本&#xff0c;检查系统上是否安装了 Java。 sudo apt install -y openjdk-17-jre-headless安装完成后&#xff0c;再次验证 Java 是否已安装 java --version2. 通过官方存储库安…

冯喜运:5.24现货黄金趋势解读,黄金原油行情分析及操作建议

【黄金消息面分析】&#xff1a;美国劳工部公布的最新数据显示&#xff0c;截至5月18日的一周内&#xff0c;首次申请失业救济人数下降至21.5万人&#xff0c;创下自去年9月以来的最大降幅。数据公布后&#xff0c;现货黄金短线下挫6美元&#xff0c;报2362.71美元/盎司。这表明…

泰迪智能科技分享:2024年职业院校中职组ZZ052大数据应用与服务赛项赛题第01套【子任务二:Hadoop 完全分布式安装配置】答案

Hadoop完全分布式安装配置 任务内容 本实训需要使用root用户完成相关配置&#xff0c;master、slave1、slave2三台节点都需要安装JDK与Hadoop&#xff0c;具体要求如下&#xff1a; 将JDK安装包解压到/root/software目录下&#xff1b;在“/etc/profile”文件中配置JDK环境变…