srTCM和trTCM介绍
本文是用于QoS Meter功能的算法的RFC的阅读笔记。DPDK的QoS_meter示例程序用的就是这个算法。
srTCM
srTCM的英文全称是Single Rate Three Color Marker,单速率三颜色标记
Configuration
该算法要预先在系统中设定三个参数,三个参数如下:
- Committed Information Rate(CIR),提交信息率。
- Committed Burst Size(CBS),提交Burst大小。
- Excess Burst Size(EBS),超量Burst大小。
CIR用于表示每秒IP包的字节数,header包括在内。bytes of IP packets per second, it includes the IP header
CBS和EBS以字节为单位。必须被设置。推荐值:它们之一必须大于0,且若大于0的CBS和EBS,值要大于MTU。
颜色有三种:绿、黄、红。简单来说,颜色与参数的对应关系是这样的:
- 如果没有超过CBS就是绿的。
- 超过了CBS但没有超过EBS就是黄的。
- 超过了EBS就是红的。
Metering & Marking
算法流程图长这样:
+------------+
| Result |
| V
+-------+ +--------+
| | | |
Packet Stream ===>| Meter |===>| Marker |===> Marked Stream
| | | |
+-------+ +--------+
Meter(限速器)用于限速,具体的逻辑因不同的具体设定而异(例如,红色丢包,黄色正常发送,绿色往特定队列发送等)。而且Meter会对每一个packet进行计算,将得到的结果交给Marker(标记器)。Marker收到的是每一个packet和其对应的结果值,根据计算结果在所有packet的IP header的DS field中标记上不同的“颜色”(上色,mark,或者说tag)。
Meter有两种工作模式:
- 色盲模式(Color-Blind mode),假定所有incoming packet是无色的。
- 非色盲模式(Color-Aware mode),假定所有incoming packet已经被先前的网络元素上了色。如果Meter工作在非色盲模式,它会认为每一个packet都有一种颜色,要么绿要么黄要么红。
Meter动作由两个令牌桶来表示(C和E)。C和E有共同的CIR。令牌桶的C的size是CBS,E的size是EBS。
用Tc(t)表示t时刻,令牌桶C中有的令牌数量,Te(t)同理。起始时,Tc(0)=CBS,Te(0)=EBS。
之后,每秒钟都执行CIR次如下操作:若令牌桶不满,则令牌数量自增1,先增加Tc后增加Te:
- If Tc is less than CBS, Tc is incremented by one, else
- if Te is less then EBS, Te is incremented by one, else
- neither Tc nor Te is incremented.
Meter的工作算法如下:
如果工作在色盲模式下,且大小为B字节的包在t时间到达,算法工作如下:若令牌桶C足以让B通过,则tag此包为绿色,并减去对应的Tc;若C不足以让B通过而E足以让B通过,则tag此包为黄色,并减去对应的Te;否则tag此包为红色。
- If Tc(t)-B >= 0, the packet is green and Tc is decremented by B down to the minimum value of 0, else
- if Te(t)-B >= 0, the packets is yellow and Te is decremented by B down to the minimum value of 0, else
- the packet is red and neither Tc nor Te is decremented.
如果工作在非色盲模式下,大小为B字节的包在t时间到达,算法工作如下:若包先前tag成绿色,且令牌桶C足以让B通过,则此包依旧tag成绿色,减去对应的Tc;若令牌桶C不足以让B通过,且该包先前tag的是绿色或黄色,且令牌桶E足以让B通过,就tag成黄色,并减去对应的Te;否则(两种情况:先前此包tag成红色或令牌桶E不足以让B通过)tag为红色。
- If the packet has been precolored as green and Tc(t)-B >= 0, the packet is green and Tc is decremented by B down to the minimum value of 0, else
- If the packet has been precolored as green or yellow and if Te(t)-B >= 0, the packets is yellow and Te is decremented by B down to the minimum value of 0, else
- the packet is red and neither Tc nor Te is decremented.
trTCM
全称 Two Rate Three Color Marker ,双速率三颜色标记。基本思路和srTCM相同,有一些细节上的差异。
Configuration
四个参数
- Peak Information Rate (PIR),峰值信息率。
- Peak Burst Size (PBS),峰值Burst大小。
- Committed Information Rate (CIR),提交信息率。
- Committed Burst Size (CBS),提交Burst大小。
PIR和CIR用于表示每秒IP包的字节数。PBS和CBS以字节为单位,必须大于0,推荐设置成大于当前路径MTU。
简单来说,pkt的颜色和四个参数的对应关系是:若packet超过PIR,则标记为红色。若没有超过PIR,则看packet是否超过了CIR,若超过,则标记为黄色;若没有超过则标记为绿色。
A packet is marked red if it exceeds the Peak Information Rate (PIR). Otherwise it is marked either yellow or green depending on whether it exceeds or doesn't exceed the Committed Information Rate (CIR).
Metering & Marking
Meter同样分为色盲模式和非色盲模式。
由两个令牌桶来表示,P和C。P和C的速率分别是PIR和CIR,大小分别是PBS和CBS。起始时,Tp(0)=PBS,Tc(0)=CBS。之后,若令牌桶没满,则桶P递增1,每秒PIR次。桶C递增1,每秒CIR次。
Thereafter, the token count Tp is incremented by one PIR times per second up to PBS and the token count Tc is incremented by one CIR times per second up to CBS.
工作算法如下:
如果工作在色盲模式下,且大小为B字节的包在t时间到达,算法工作如下:若令牌桶P不足以让B通过,则tag为红色,否则:若令牌桶C不足以让B通过,则tag为黄色且扣除桶P的令牌;若令牌桶C足以让B通过,则tag为绿色且同时扣除桶C和桶P的令牌。
- If Tp(t)-B < 0, the packet is red, else
- if Tc(t)-B < 0, the packet is yellow and Tp is decremented by B, else
- the packet is green and both Tp and Tc are decremented by B.
如果工作在非色盲模式下,大小为B字节的包在t时间到达,算法工作如下:若先前tag成红色,或令牌桶P不足以让B通过,则tag为红色,否则:若先前tag成黄色,或令牌桶C不足以让B通过,则tag为黄色且扣除桶P的令牌;若令牌桶C足以让B通过且先前标记成绿色,则tag为绿色且同时扣除桶C和桶P的令牌。
- If the packet has been precolored as red or if Tp(t)-B < 0, the packet is red, else
- if the packet has been precolored as yellow or if Tc(t)-B < 0, the packet is yellow and Tp is decremented by B, else
- the packet is green and both Tp and Tc are decremented by B.
Service Example
实际的QoS Meter实现可能仅是对RFC的参照而不一定完全一样(The actual implementation of a Meter doesn't need to be modeled according to the above formal specification.)
应用程序可以根据 DS field 里 tag 上的 color 对 packet 做合适的调度,例如:
For example, a service may discard all red packets, because they exceeded both the committed and excess burst sizes, forward yellow packets as best effort, and forward green packets with a low drop probability.
总结
可以看出srTCM算法是根据 length of burst 来进行限速的。“单速率”指的是这个算法里两个令牌桶的增长速率都是一样的每秒CIR。两个令牌桶拥有不同的大小,就好像一条数轴用两个点分成了三个阶段,对应绿、黄、红。
trTCM的“双速率”是指两个令牌桶有不同的增长速率。增长的较慢的令牌桶是发放绿色标记的较为严苛的指标,增长的较快的令牌桶是一个下限,若这个令牌桶也handle不过来的流量就要无情的tag为红色,两者之间的就是黄色。
Reference
RFC 2697 and 2698
srTCM和trTCM介绍的更多相关文章
- DPDK QoS_meter 源码阅读
main.c /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2010-2016 Intel Corporation */ #inclu ...
- CSS3 background-image背景图片相关介绍
这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML5 介绍
本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...
随机推荐
- node vue 开发环境部署时,外部访问页面出现: Invalid Host header 服务器域名访问出现的问题
这是新版本 webpack-dev-server 出于安全考虑, 默认检查 hostname,如果hostname不是配置内的,将中断访问.顾仅存在于开发环境: npm run dev,打包之后不会 ...
- Go指南 - 笔记
Go指南 - 笔记 标签(空格分隔): Go Go指南 一.基础 1.包 每个Go程序都是由包构成的. 程序从main包开始运行. 包名与导入路径的最后一个元素一致 2.导入 分组导入:使用圆括号组合 ...
- Java基础加强——动态代理
代理模式: 为其他对象提供一种代理以控制对这个对象的访问. 代理模式主要分为两类: 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了. ...
- Android JS interaction
WebView web; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst ...
- EDB*Plus的当前路径问题
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页 [作者 高健@博客园 luckyjackg ...
- Catalan&Stirling数
Catalan&Stirling数 Tags:数学 作业部落 评论地址 Catalan数 \(1,1,2,5,14,42,132,429,1430,4862,16796,58786...\) ...
- 【转载】COM 组件设计与应用(十八)——属性包
原文:http://vckbase.com/index.php/wv/1265.html 一.前言 书接上回,本回着落在介绍属性包 IPersistPropertyBag 接口的实现方法和调用方式.属 ...
- linux下centos7中mysql崩溃问题的解决
---恢复内容开始--- 出现错误: 尝试解决: 错误解释是说系统运行过程中丢失了pid:我最先想到是 可能磁盘满了:于是 df -h 检查了一下:磁盘并没有满! 于是我对/etc/my.cnf [m ...
- 基于Vue的弹框实例
看到博客的人,请养成写博客的习惯,不会不会,就怕曾经会过,现在想不起来了,一起加油.................... 让学习真的成为一种习惯,同时要注意身体 <!DOCTYPE html ...
- js 删除url指定参数
/** * 删除当前url中指定参数 * @param names 数组或字符串 * @returns {string} */ function funcUrlDel(names) { if(type ...