排队系统拥塞控制的位置
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.****.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
前两篇文章,我零零散散地介绍了关于本地队列和中间队列的一些管理机制和算法:
《TCP BBR算法中Pacing,cwnd,fq以及TSQ对RTT的影响》
《TSQ/CoDel队列管理以及TCP BBR如何解决Bufferbloat问题》
然而这太零散了,如果你想将所有这一切融合在一个统一的框架中,会发现在它们之上的层次上还有很多工作要做。本文为了这个目的写出,给出一个提纲挈领。顺便感谢一下与我讨论拥塞临界点的那位研究生朋友,不然我还没想到要写这篇文章,万分感谢。
膝点和崖点
在一个排队系统中,有两个临界点,将该排队系统分割成了三个状态:
而上图中的队列长度如果分布在一个连续的时间维度,便是到达率了,在一个典型的排队系统中,到达率符合泊松分布。
排队论的结论
上一节描述了膝点和崖点的特性并且定义了它们,我们来看看算出它们的值,这就需要排队论的知识。本文并不推导这些结论,而是直接使用。
N:队列长度
T:排队延时
a:泊松分布的到达率
b:固定服务率
- 一个排队系统的队列长度
N=ab−a
可见,要想不拥塞,服务率要大于到达率的期望值…当到达率和服务率之比等于1/2的时候,系统从完全不排队开始排队,当该比值为1的时候,队列趋向于无穷大,因此我们按照这个理论重新定义膝点和崖点:
体现在坐标系里就是:
队列管理和拥塞控制的位置
知道了那么一大堆理论,有何用呢?
现在问题来了,如何来做拥塞控制?
手里有一把钉子,有一把锁,眼前有个门要装锁,随之的问题就是把锁装在哪个位置。要给出一个拥塞控制机制,问题是一样的,要在哪个位置做拥塞控制呢?
根据上述的排队系统模型,有两个地方可以做拥塞控制,装上这把锁。一个位置是膝点,一个位置是崖点。哪个位置是正确的位置呢?其实这代表了两种不同的理念,本身都是无可厚非的,在膝点做拥塞控制的理念在于从根本上避免排队,从而避免拥塞,而在崖点做拥塞控制的理念则在于直接控制队列长度从而避免拥塞,孰是孰非,现实生活中均有各自的例子,存在即是合理的,因此都对。
现实中的例子
膝点拥塞控制的例子
高速公路与互通立交
高速公路通过一个全程恒定的限速来避免排队现象,而互通立交则通过四向匝道来复用时间,到达交叉路口的同时四向通行,避免排队现象。
CoDel队列管理
CoDel限制最大排队时间以及最长容忍时间来避免排队现象。为什么容忍时间段是一个合理的概念,请参见圣经《新约•马太福音》里那个打脸名句。
BBR拥塞控制算法
BBR监控最大的采集带宽以及最小RTT来探测排队并主动避免之。BBR使用的时间窗口概念迎合了CoDel的容忍时间段概念。
崖点拥塞控制的例子
红绿灯
在普通道路的交叉路口,采用时延较大的红绿灯来复用时间,这必然会造成两个方向的被动排队,然而这是另外两个方向通行所必须的,红绿灯的切换间隔控制了队列长度。
高速公路收费站
由于万恶的高速公路收费制度,收费站工作人员的收费延时必然造成收费站口的排队现象,然而队列长度有个红线(不知你是否注意),队列超过此红线则免费放行。
RED队列管理
传统的路由器交换机,由于摩尔定律造成存储设备越发便宜从而队列缓存的增加,为了充分利用它们(不然没有购置的必要便无人买单),RED在最大可接受的队列长度内限制了队列长度的阈值。
Reno/CUBIC拥塞控制算法
这看起来完全是迎合了RED AQM机制的,然而早期的设计动机却不是这样,那时路由器的队列都比较短(存储设备太贵!),早期的动机是在迎合一个数学上收敛的AIMD控制论模型,最终偏偏不偏不倚地正中了AI排队,MD清空这么一个同步过程。
Why?
我发现,凡是在膝点做拥塞控制的,大部分是高速环境,而在崖点做拥塞控制的,则是相对低速的环境,这是为什么呢?
当然,我的结论并不一定正确,但是在我的这个观察结论中,理由很简单,因为在高速环境中,从膝点到崖点的时间非常短,可能来不及拥塞控制机制的反应,在一个负反馈系统中,信号从感受器到效应器总是会有滞后性的,这个滞后的延时一般会大于等于从膝点到崖点的过渡延时,所以会造成拥塞的代价非常大。
而在一个低速的环境中,只需要依照标准控制论中的收敛模型进行负反馈即可,反馈的滞后时间远小于从膝点到崖点(即从排队到拥塞)的过渡时间。
总结一下
可见,拥塞控制离不开两个理论,一个是排队理论,一个是控制理论。
给我老师的人工智能教程打call!http://blog.****.net/jiangjunshow
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to-HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 是通过欧拉积分
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram functionality to mermaid
section 现有任务
已完成 :done, des1, 2014-01-06,2014-01-08
进行中 :active, des2, 2014-01-09, 3d
计划一 : des3, after des2, 5d
计划二 : des4, after des3, 5d
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
-
注脚的解释 ↩︎
前两篇文章,我零零散散地介绍了关于本地队列和中间队列的一些管理机制和算法:
《TCP BBR算法中Pacing,cwnd,fq以及TSQ对RTT的影响》
《TSQ/CoDel队列管理以及TCP BBR如何解决Bufferbloat问题》
然而这太零散了,如果你想将所有这一切融合在一个统一的框架中,会发现在它们之上的层次上还有很多工作要做。本文为了这个目的写出,给出一个提纲挈领。顺便感谢一下与我讨论拥塞临界点的那位研究生朋友,不然我还没想到要写这篇文章,万分感谢。
膝点和崖点
在一个排队系统中,有两个临界点,将该排队系统分割成了三个状态:
而上图中的队列长度如果分布在一个连续的时间维度,便是到达率了,在一个典型的排队系统中,到达率符合泊松分布。
排队论的结论
上一节描述了膝点和崖点的特性并且定义了它们,我们来看看算出它们的值,这就需要排队论的知识。本文并不推导这些结论,而是直接使用。
N:队列长度
T:排队延时
a:泊松分布的到达率
b:固定服务率
- 一个排队系统的队列长度
N=ab−a
可见,要想不拥塞,服务率要大于到达率的期望值…当到达率和服务率之比等于1/2的时候,系统从完全不排队开始排队,当该比值为1的时候,队列趋向于无穷大,因此我们按照这个理论重新定义膝点和崖点:
体现在坐标系里就是:
队列管理和拥塞控制的位置
知道了那么一大堆理论,有何用呢?
现在问题来了,如何来做拥塞控制?
手里有一把钉子,有一把锁,眼前有个门要装锁,随之的问题就是把锁装在哪个位置。要给出一个拥塞控制机制,问题是一样的,要在哪个位置做拥塞控制呢?
根据上述的排队系统模型,有两个地方可以做拥塞控制,装上这把锁。一个位置是膝点,一个位置是崖点。哪个位置是正确的位置呢?其实这代表了两种不同的理念,本身都是无可厚非的,在膝点做拥塞控制的理念在于从根本上避免排队,从而避免拥塞,而在崖点做拥塞控制的理念则在于直接控制队列长度从而避免拥塞,孰是孰非,现实生活中均有各自的例子,存在即是合理的,因此都对。
现实中的例子
膝点拥塞控制的例子
高速公路与互通立交
高速公路通过一个全程恒定的限速来避免排队现象,而互通立交则通过四向匝道来复用时间,到达交叉路口的同时四向通行,避免排队现象。
CoDel队列管理
CoDel限制最大排队时间以及最长容忍时间来避免排队现象。为什么容忍时间段是一个合理的概念,请参见圣经《新约•马太福音》里那个打脸名句。
BBR拥塞控制算法
BBR监控最大的采集带宽以及最小RTT来探测排队并主动避免之。BBR使用的时间窗口概念迎合了CoDel的容忍时间段概念。
崖点拥塞控制的例子
红绿灯
在普通道路的交叉路口,采用时延较大的红绿灯来复用时间,这必然会造成两个方向的被动排队,然而这是另外两个方向通行所必须的,红绿灯的切换间隔控制了队列长度。
高速公路收费站
由于万恶的高速公路收费制度,收费站工作人员的收费延时必然造成收费站口的排队现象,然而队列长度有个红线(不知你是否注意),队列超过此红线则免费放行。
RED队列管理
传统的路由器交换机,由于摩尔定律造成存储设备越发便宜从而队列缓存的增加,为了充分利用它们(不然没有购置的必要便无人买单),RED在最大可接受的队列长度内限制了队列长度的阈值。
Reno/CUBIC拥塞控制算法
这看起来完全是迎合了RED AQM机制的,然而早期的设计动机却不是这样,那时路由器的队列都比较短(存储设备太贵!),早期的动机是在迎合一个数学上收敛的AIMD控制论模型,最终偏偏不偏不倚地正中了AI排队,MD清空这么一个同步过程。
Why?
我发现,凡是在膝点做拥塞控制的,大部分是高速环境,而在崖点做拥塞控制的,则是相对低速的环境,这是为什么呢?
当然,我的结论并不一定正确,但是在我的这个观察结论中,理由很简单,因为在高速环境中,从膝点到崖点的时间非常短,可能来不及拥塞控制机制的反应,在一个负反馈系统中,信号从感受器到效应器总是会有滞后性的,这个滞后的延时一般会大于等于从膝点到崖点的过渡延时,所以会造成拥塞的代价非常大。
而在一个低速的环境中,只需要依照标准控制论中的收敛模型进行负反馈即可,反馈的滞后时间远小于从膝点到崖点(即从排队到拥塞)的过渡时间。
总结一下
可见,拥塞控制离不开两个理论,一个是排队理论,一个是控制理论。