OpenvswitchQos rate-limiting原理

OVS的qosrate-limiting功能是采用令牌桶(Token-Bucket)机制进行的。这里的“令牌桶”是指网络设备的内部存储池,而“令牌”则是指以给定速率填充令牌桶的虚拟信息包。

一 令牌桶算法原理

在令牌桶处理包的行为方面,RFC中定义了两种令牌桶算法——单速率三色标记算法和双速率三色标记算法,其评估结果都是为包打上红、黄、绿三色标记。QoS会根据包的颜色,设置包的丢弃优先级,其中单速率三色标记比较关心包尺寸的突发,而双速率三色标记则关注速率上的突发,两种算法都可工作于色盲模式和非色盲模式。下面分别介绍这两种算法原理。

1.单速率三色标记算法原理

这里首先要理解“单速率”是什么意思,那就是算法中的两个令牌桶有同样的承诺信息速率(CIR),也就是具有相同平均访问速率。这两个令牌桶分别是正常使用的令牌桶(C桶)和超出令牌桶容量的突发令牌桶(E桶),可以理解为两个水桶,一个是正常使用的水桶,另一个是用来当正常使用的水桶满后装多余的水的水桶。

单速率三色标记算法关注的是数据包的突发尺寸,数据包的色标记评估依据以下3个参数:承诺信息速率(CommittedInformationRate,CIR)、承诺突发尺寸(CommittedBurstSize,CBS)和超额突发尺寸(ExcessBurstSize,EBS)。CIR是指向令牌桶中填充令牌的平均速率,即允许的通信流平均速度;CBS是指每次突发所允许的最大的流量尺寸,也相当于允许的最大取令牌的速率,等于桶的容量(最大时就是一个包就可以全部领取桶中的全部令牌)。EBS是指每次突发允许超出CBS的最大流量尺寸。CBS和EBS的单位都是bit(位)。

单速率三色机制采用双桶结构:C桶和E桶(之所以用这两个字母来表示,为的就是与前面说的CBS和EBS两种速率的头个字母一致,便于描述),且两个令牌桶的CIR一样。C令牌桶中任何未用的令牌都被放入E令牌桶中,用做以后临时超过CIR的突发流量的令牌;另外,当C令牌桶满时,超出的令牌也都会放在E令牌桶中。

Tc和Te分别表示C令牌桶和E令牌桶中的令牌数,也就是桶中当前的容量(单位也为bit),两桶的总容量分别为CBS和EBS,也就是对应前面介绍的承诺突发尺寸和超额突发尺寸,最初它们都是满的,即Tc和Te初始值分别等于CBS和EBS。正常情况下,不会使用第二个令牌桶(也就是E桶),而是把任何CBS(也就是C桶)中未使用的令牌都放入E桶中,只有当C令牌桶满后,后面来的令牌才放到E令牌桶中,为可能出现的突发数据提供信用令牌(也就是经过允许的令牌)。

在这种单速率三色标记算法中,两个令牌桶中令牌的添加是按照相同的CIR速率进行的。即每隔1/CIR时间添加一个令牌。添加的顺序是先添加C桶再添加E桶,当两个令牌桶中的令牌都满时,再产生的令牌就会被丢弃。至于在发送数据包时,令牌的使用IEEE又定义了三种颜色(分别为红色、黄色和绿色)以及两种模式:色盲模式和感色模式,默认为色盲模式。三种颜色的功能与我们日常生活中的交通指示灯中的三种颜色类似,红色表示违规数据,直接丢弃,黄色表示数据包虽然违法,但不直接丢弃,而是延迟发送,绿色为合法数据包,直接发送。

在色盲(color-blind)模式下是假设包都是没有经过“着色”处理的(不辨别包中原来标记的颜色),是根据包长度来确定包被标记的颜色。现假设到达的包长度为B(单位为bit)。若包长度B小于C桶中的令牌数Tc(也就是C桶中的令牌数足够该包发送所需),则包被标记为绿色,表示包符合要求,包发送后C桶中的令牌数Tc减少B。如果Tc<B<Te(也就是包长度大于C桶中的令牌数,而小于E桶中的令牌数),则标记为黄色,则从E桶中取出所需令牌,E桶中的令牌数Te减少B;若B>Te,标记为红色,表示是违反规定的包,直接丢弃,两令牌桶中的总令牌数都不减少。

在感色(color-aware)模式下是假设包在此之前已经过“着色”处理(会辨别包中原来标记的颜色),如果包已被标记为绿色,或包长度B<Tc(注意只要满足其中一个条件即可,下同),则包被标记为绿色,C桶中的令牌数Tc值随之也相应减少B;如果包已被标记为黄色,或Tc<B<Te,则包被标记为黄色,同时E桶中的令牌数Te也随之相应减少B;如果包已被标记为红色,或B>Te,则包被标记为红色,Tc和Te都不减少。

2.双速率三色算法

这里同样首先要稿清楚“双速率”是什么意思,它是指该算法中两个令牌桶中的CIR速率不同,存在两个令牌填充速率。

IETF的双速率三色标记(trTCM)算法主要是根据四种流量参数来评估:CIR、CBS、峰值信息速率(PeakInformationRate,PIR),峰值突发尺寸(PeakBurstSize,PBS)。CIR和CBS参数与单速率三色算法中的含义相同,PIR就是允许的最大突发信息传输速率,当然它的值肯定不会小于CIR的;PBS是允许的最大突发信息尺寸,它的值也不会小于CBS。

与单速率三色标记算法不同,双速率三色标记算法中的两个令牌桶是C桶和P桶(不是C桶和E桶),但它们的令牌填充速率是不同的,C桶填充速率为CIR,P桶为PIR;两桶的容量分别为CBS和PBS(之所以用C桶和P桶表示也是基于方便描述,因为表示不同速率的参数与对应桶的容量参数相同,第一个字母对应为C,或者P)。用Tc和Tp表示两桶中的令牌数目,初始状态时两桶是满的,即Tc和Tp初始值分别等于CBS和PBS。

双速率三色标记算法关注的是速率的突发,但它不像单速率三色标记算法那样把第一个桶中未使用的令牌放到第二个桶中,而是使用两个独立的令牌桶。第一个令牌桶为PIR,大小为PBS,第二个令牌桶为CIR,大小为CBS。数据的测量是先比较PIR,然后再比较CIR。也就是在双速率三色标记中,首先判断的是数据发送速率是否符合规定的突发要求,而不是正常情况下的色标方法。

双速率三色标记算法也有色盲模式和感色模式两种。

在色盲模式下,当包速率大于PIR,此时未超过Tp+Tc部分的包会分别从P桶和C桶中获取令牌,而且从P桶中获取令牌的部分包被标记为黄色,从C桶中获取令牌的部分包被标记为绿色,超过Tp+Tc部分无法得到令牌的包被标记为红色;当包速率小于PIR,而大于CIR时,包可以得到令牌,但超过Tc部分的包将从P桶中获取令牌,此时这部分包都被标记为黄色,而从C桶中获取令牌的包被标记为绿色;当包速率小于CIR时,包所需令牌数不会超过Tc,只需从C桶中获取令牌,包被标记为绿色。

在感色模式下,如果包已被标记为红色,或者超过Tp+Tc部分无法得到令牌的包,被标记为红色;如果标记为黄色,或者超过Tc但未超过Tp部分包记为黄色;如果包被标记为绿,或者未超过Tc部分包,被标记为绿色。

二  令牌桶算法的应用

1在流量监管中的应用

约定访问速率(CAR)是流量监管常用技术之一,可以应用在端口进和出方向,一般应用在入方向,它的监管原理如图1所示。

a.按特定的速率向令牌桶投放令牌

b. 根据预设的匹配规则先对报文进行分类,不符合匹配规则的报文不需要经过令牌桶的处理,直接发送;

c. 符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌 量按报文的长度做相应的减少;

d. 当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。这就可以限制报文的流量只能是小于等于令牌生成的速度,达到限制流量的目的。

2在通用流量整形中的应用

a.按特定的速率向令牌桶投放令牌

b. 根据预设的匹配规则先对报文进行分类,不符合匹配规则的报文不需要经过令牌桶的处理,直接发送;

c. 符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌 量按报文的长度做相应的减少;

d. 对超过速率限制的报文进行缓冲即当令牌桶的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送,

e. 当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。

通用流量整形中(GTS)与CAR的原理稍有差别:

第一,GTS只用于出方向流量限速,CAR出入方向均可以,但一般多用于入方向;

第二,利用CAR进行报文流量控制时,对超过速率限制的报文直接丢弃,而GTS是对超过速率限制的报文进行缓冲即当令牌桶的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送,这样就减少了报文的丢弃,但是要注意的是,如果缓存队列已满,这时到达的报文仍旧会被丢弃。

3在端口限速 中的应用

端口限速(LR)(如图3所示)也用于出方向,但不同于GTS 的是:第一,GTS与CAR是在IP层实现的,所以对于不经过IP层处理的报文不起作用,而LR能够限制在物理接口上通过的所有报文;第二,LR不但能够对超过流量限制的报文进行缓存,并且可以利用QoS丰富的队列如优先级队列(PQ)、自定 义 队列(CQ)、加权公平对列(WFQ)等来缓存报文。

a.按特定的速率向令牌桶投放令牌

b. 根据预设的匹配规则先对报文进行分类,利用QoS丰富的队列如优先级队列(PQ)、自定 义 队列(CQ)、加权公平对列(WFQ)等来缓存报文

c. 符合匹配规则的报文,则需要令牌桶进行处理。当桶中有足够的令牌则报文可以被继续发送下去,同时令牌桶中的令牌 量按报文的长度做相应的减少;

d. 对超过速率限制的报文进行缓冲即当令牌桶的令牌少到报文不能再发送时,报文将被缓存入队列,等有了足够的令牌之后再发送,

e. 当令牌桶中的令牌不足时,报文将不能被发送,只有等到桶中生成了新的令牌,报文才可以发送。

Open vswitch 之Qos rate-limiting 原理的更多相关文章

  1. 高可用服务设计之二:Rate limiting 限流与降级

    <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制 ...

  2. How To Change Log Rate Limiting In Linux

    By default in Linux there are a few different mechanisms in place that may rate limit logging. These ...

  3. [译]Ocelot - Rate Limiting

    原文 Ocelot支持对上游做访问限流,这样就可以保证下游不要负载太大了. 如果要启用访问限流,需要做如下配置: "RateLimitOptions": { "Clien ...

  4. Openvswitch手册(6): QoS

    这一节我们看QoS,Qos的设置往往是和flow中的policy一起使用的 Open vSwitch QoS capabilities 1 Interface rate limiting 2 Port ...

  5. Yii2 Restful API 原理分析

    Yii2 有个很重要的特性是对 Restful API的默认支持, 通过短短的几个配置就可以实现简单的对现有Model的RESTful API 参考另一篇文章: http://www.cnblogs. ...

  6. QOS

    QoS控制原理 · 基于设备的QoS保障技术——CAC· 基于优先级设置的QoS保障技术· 基于减小抖动的QoS保障-Jitter BufferIP传输在时延.抖动.丢包率方面的性能不及TDM传输,而 ...

  7. OpenvSwitch/OpenFlow 架构解析与实践案例

    目录 文章目录 目录 前言 软件定义网络(SDN) 虚拟交换机(vSwitch) 为什么说云计算时代的 SDN 非常重要 OpenFlow 简介 Open vSwitch Open vSwitch 的 ...

  8. REST服务介绍二

           之前一篇文章写过REST服务介绍, 今天再次来自回顾一下. REST是一种架构风格. 首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是 HTTP 规范 ...

  9. System Error Codes

    很明显,以下的文字来自微软MSDN 链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx M ...

随机推荐

  1. Node.js笔记4

    4. 文件系统 fs fs模块是文件操作的封装,提供了同步跟异步操作2个版本 * fs.readFile(filename,[encoding],[callback(err,data)]) 是最简单的 ...

  2. using的用法

    1.using指令.using + 命名空间名字.命名空间名字可以是系统本有,也可是自己定义的class. 2.using别名.using + 别名 = 包括详细命名空间信息的具体的类型. 达成条件: ...

  3. activity的横屏和竖屏设置

    主要在清单文件这样配置: <application android:allowBackup="true" android:icon="@drawable/ic_la ...

  4. 零行代码为App添加异常加载占位图

    前文提要 近期准备重构项目,需要重写一些通用模块,正巧需要设置App异常加载占位图的问题,心血来潮设想是否可以零行代码解决此问题,特在此分享实现思路. 思路分享 对于App占位图,通常需要考虑的控件有 ...

  5. UVa 12299 RMQ with Shifts(线段树)

    线段树,没了.. ----------------------------------------------------------------------------------------- # ...

  6. 200常用JS

    .文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件 &l ...

  7. 01_什么是Elasticsearch

    Logstash是一个开源的用于收集,分析和存储日志的工具. Kibana4用来搜索和查看Logstash已索引的日志的web接口.这两个工具都基于 Elasticsearch. Logstash: ...

  8. 开源html5_kiwijs_helloworld

    本次须要的下载文件已经共享出来 网盘地址 由于我使用的是黑苹果系统, window我就无视了. 开发工具使用 网盘里的 dmg :Sublime Text 打开开发工具后在helloworld中找到 ...

  9. PHP程序猿必须学习的第二课——站点安全问题预防

    作为PHP程序猿.第一课我们学习了基本的语法.那么在熟悉基本的语法之后我们应该学些什么呢?我觉得是安全问题.安全问题基于一个站点宛如基石,一着不慎,意味着灾难性的事故. 这里主要就提三点最简单,也是最 ...

  10. JavaScript 高级程序设计(第3版)笔记——chapter5:引用类型(基本包装类型部分)

    一.介绍 为了方便操作基本类型值,ECMAScript还提供了3个特殊的引用类型:Boolean, Number, String. 实际上,每当读取一个基本类型值得时候,后台就会创建一个对应的基本包装 ...