ROS软路由论坛 ROSABC.com

 找回密码
 会员注册
查看: 18888|回复: 66

[Queue流量控制] [队列类型(Queue Type)] 操作路径: /queue type 在这个子目录

  [复制链接]
发表于 2013-6-24 12:01:17 | 显示全部楼层
ROS软路由论坛
来学习PCQ了
发表于 2013-5-31 14:52:27 | 显示全部楼层
ROS软路由论坛
RE: RouterOS网页断流解决办法与探讨 [
 楼主| 发表于 2013-4-21 02:44:07 | 显示全部楼层 |阅读模式
队列类型(Queue Type)



操作路径: /queue type

在这个子目录你可以创建自己的客户队列类型。之后,将可以在/queue tree, /queue simple 或 /queue interface 使用了PFIFO 及 BFIFO.

这些队列规则是基于先进先出算法的(FIFO:First-In First-Out)。PFIFO 和 BFIFO 的区别在于一个是以数据包为单位衡 量的,而另一个是以字节为单位。其中只有一个叫做 pfifo-limit (bfifo-limit)的参数,它是用来定义一个 FIFO 队列可 以容纳多少数据的。每一个不能排队(如果队列满了)的包都要被丢弃,队列长度过大会增加执行时间。
游客,如果您要查看本帖隐藏内容请回复



如果你的连接不拥塞的话,建议使用 FIFO 队列规则。



SFQ  

随机公平排序(SFQ)不会一开始就对流量限制。它的主旨是当你的连接完全满的时候均衡业务流(TCP 会话或者 UDP 流)。SFQ 的公平性是由散列法和 round-robin 算法保证的。散列算法把会话流分成一个有限数量的子队列。在 sfq-perturb时间之后散列算法改变并划分会话流为其他子队列。Round-robin 算法把从每个子队列的 pcq-allot 字节按照顺序出队列。
11.2.2.jpg


整个 SFQ 队列可以容纳 128 个数据包并且对这些包有 1024 个子队列可用。对拥挤的连接使用 SFQ 可以保证一些连接不至于空等待(starve)。

PCQ

为了解决 SFQ 的不完美,每次连接排序 Per Connection Queuing (PCQ)便产生了。它是唯一一种能限流的无等级排序类 型。它是一种去掉了随机特性的进化版 SFQ。PCQ 也会根据 pcq-classifier 参数产生子队列。每个子队列都有一个pcq-rate 的数据率限制和 pcq-limit 大小的数据包。PCQ 队列的总大小不能大于 pcq-total-limit 包。

以下实例说明了 PCQ 对数据包的用法,以它们的源地址分类。
11.2.3.jpg


如果你以 src-address 对包分类那么所有带有不同源 IP 地址的包将被集合在不同的子队列中。现在你可以使用 pcq-rate 参数对每一个子队列进行限制或均衡。或许最重要的部分是决定我们到底应该把这个队列附属到哪个接口上。如果我们把它 依附在本地接口上,那么所有来自公网接口的数据流都将以 src-address(很可能这不是我们想要的)地址分组;相反地如 果我们把它依附到公共接口,所有来自我们客户的数据都会以 src-address 分组——于是我们可以很容易的限制或者均衡客 户的上载。

用 pcq-classifier 分类后为了在子队列中均衡速率,设置 pcq-rate 为 0 几乎不用管理,PCQ 也可以用来对多用户动态 均衡或者形成流量,

RED

随机早先探测(RED)是一种通过控制平均队列长度避免网络拥塞的排序机制。当平均队列长度达到 red-min-threshold时,RED 随机选择该丢弃哪个包。当平均队列长度变长时,堆砌多少包数的可能性会增加。如果平均队列长度达到red-max-threshold,则丢弃该包。尽管如此,也存在真实队列长度(非平均的)远大于 red-max-threshold 时, 丢弃所有超过 red-limit 的数据包的情况。
11.2.4.jpg


注意:RED 应用在高数据率的拥挤的连接上,它在 TCP 协议上工作的很好,但在 UDP 上就没那么理想了。

属性描述

bfifo-limit (整数; 默认: 15000) - BFIFO 队列可以容纳的最大字节数

kind (bfifo | pcq | pfifo | red | sfq) – 选择队列控制类型

bfifo - 字节先进先出 pcq – 每次连接队列 pfifo – 数据包先进先出 red – 随机早先探测

sfq - 随机公平队列

name (名称) - 队列类型相关名称

pcq-classifier (dst-address | dst-port | src-address | src-port; 默认: "") - PCQ 对其子队列进行分 组的分类器。可以同时被数个分类器使用。例如:src-address,src-port 可使用不同源地址和源端口把所有 包分为独立的子队列

pcq-limit (整数; 默认: 50) - 可以容纳一个单个 PCQ 子队列的包的数目

pcq-rate (整数; 默认: 0) - 对每个子队列允许的最大数据率。 0 值指的是没有任何限制

pcq-total-limit (整数; 默认: 2000) - 可以容纳整个 PCQ 队列的包的数目

pfifo-limit (整数) - PFIFP 队列可以容纳包的最大数目

red-avg-packet (整数; 默认: 1000) - 被 RED 用来对平均队列长度计算

red-burst (整数) - 用来决定平均队列长度被真实队列长度影响的快慢的字节值。较长的值将减慢 RED 的计 算速度——较长的脉冲串也是允许的

red-limit (整数) - 以字节计算。如果真实队列长度(非平均值)超过了这个值那么所有大于这个值的包都将 被丢弃。

red-max-threshold (整数) - 以字节计算。数据包标记概率最高的平均队列长度

red-min-threshold (整数) - 当平均 RED 队列长度达到这个值时,数据包标记才有可能

sfq-allot (整数; 默认: 1514) - 在一个 round-robin 循环中从子队列发出的字节数 sfq-perturb (整数; 默认: 5) - 以秒计时。指定改变 SFQ 的散列算法的频率 Bursts 脉冲串

脉冲串用来在一段很短的时间允许更高数据率。每 1/16 burst-time 时间,路由器都会计算每个类在上一个 burst-time 时间的平均数据率。如果这个平均数据率小于 burst-threshold,脉冲串就会被启用且实际数据率达到 burst-limit bps, 否则实际数据率将跌至 max-limit 或 limit-at。

让我们考虑如果我们有个 max-limit=256000, burst-time=8, burst-threshold=192000 以及

burst-limit=512000 的设置情况。当一个用户通过 HTTP 下载一个文件,我们可以观察到这样的现象:
游客,如果您要查看本帖隐藏内容请回复



在最开始的 8 秒中平均数据率是 0bps 因为在应用队列规则前没有流量通过。由于这个平均数据率小与 burst-threshold(192kbps),所以脉冲串会被使用。在第一秒之后,平均数据率为(0+0+0+0+0+0+0+512)/8=64kbps,低于burst-threshold。在第二秒后,平均数据率为(0+0+0+0+0+0+512+512)/8=128kbps。在第三秒之后达到临界点 此时平均数据率变得大于 burst-threshold。这个时候脉冲串将被禁用且当前数据率降至 max-limit (256kbps)。


发表于 2013-6-29 21:05:23 | 显示全部楼层
学习啊啊啊啊啊啊
发表于 2013-5-28 14:29:01 | 显示全部楼层
rtrfgfhfghgfjh
发表于 2013-5-30 09:56:09 | 显示全部楼层
看看看看看
发表于 2013-7-14 12:40:28 | 显示全部楼层
非常感谢
发表于 2013-8-9 17:38:50 | 显示全部楼层
see  see see  see  see
发表于 2013-6-24 20:41:58 | 显示全部楼层
学习一下!
发表于 2013-6-28 16:50:32 | 显示全部楼层
学习学习学习
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则



不良信息举报Q:2000617

不良信息举报Q:2000617|Archiver|小黑屋|ROS软路由论坛 ROSABC.com

GMT+8, 2021-1-24 07:50 , Processed in 0.088038 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表