- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本文档的Copyleft归wwwlkk所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。
E-mail: wwwlkk@126.com
来源: /?businessaid=6un=wwwlkk#7
(一)空闲资源流控算法 1
(二) cbq流速整形实现机制 3
(一)空闲资源流控算法
算法概述:单位时间内产生的空闲资源一定,每发送一个字节都要消耗相应大小的空闲资源,当空闲资源不足时停止发送数据包,设定的流速越大,发送一个字节所消耗的空闲资源就越小,通过设置发送一个字节所消耗的空闲资源来进行流速控制。
基本概念:
1. 空闲资源:发送一个数据包都必须消耗空闲资源,如果某个对象的空闲资源为0,将无法发送数据包,只要空闲资源足够多就可以发送数据包。(TC用户空间规则定每秒产生的空闲资源是TIME_UNITS_PER_SEC 1000000,而TC内核根据空闲时间来计算空闲资源。)
2.空闲时间:假设对象最近一次发送数据包的时刻是T1,系统当前的时刻是T2,则空闲时间tk = T1 – T2。
2. 流速rate:每秒允许发送的的字节个数。
3. 空闲资源积累量:以空闲时间为参数根据一定的算法得到的值(比如可以将空闲时间乘上一个正数),但是要保证空闲时间越大,对应的空闲资源的积累量必定要越大。
4. 空闲资源剩余量:最近一次发送数据包以后,空闲资源的剩余量。
5. 当前可用空闲资源:以空闲资源的剩余量和空闲资源的积累量为参数根据一定的算法得到的值(比如可以 = 1/6空闲资源的剩余量 + (1 – 1/6)空闲资源的积累),但是要保证当前可用空闲资源都是空闲资源剩余量和空闲资源积累量的递增函数。
为了更好的理解空闲资源流控算法,需要引入流速概念的第二种描述,也就是,使用空闲资源来描述流速的概念。
6.流速kc(用空闲资源描述):假设每秒产生的空闲资源是TIME_UNITS_PER_SEC,流速rate(每秒允许发送的数据量是rate个字节),则发送一个字节的流量需要消耗的空闲资源是
kc = TIME_UNITS_PER_SEC/rate
这里的kc就是新引入的流速描述方法。流速rate越大,kc就越小。
如果要发送size字节的数据包需要消耗size*(TIME_UNITS_PER_SEC/rate)的空闲资源。
只要空闲资源足够多,就可以发送数据包,每发送一个数据包,空闲资源减去相应的消耗量。
只要空闲时间一直累积,空闲资源将会变得很大,这时就失去了调控流速的意义,所以引入最大空闲资源,以使空闲资源不会太大。
调控流速的过程:
假设只要空闲资源非零,就试图发送一个长度是L的数据包,流速是kc。
初始时刻空闲资源和空闲时间都为0,显然不允许发送数据包。
休眠一段时间,空闲时间大于0,计算空闲资源累积量,并计算当前可用空闲资源tu。
计算L长度的数据包需要消耗kc*L的空闲资源,如果tu a*L,发送数据包,否则再休眠一段时间。
发送数据包后减少空闲资源:tu = tu – a*L,如果tu 0,重复3的过程,直到再次休眠。
最理想的状态是:总是成立ts = a*L。
基本上时可以达到调控的目的,但是结果是不准确的,相同的算法,相同的参数,在不同的网络环境(主要是硬件的配置不同)中流控的结果肯定不同。
但是可以根据具体的网络环境,来选择适当的参数来提高算法的准确度。
可以调整的参数有两类:1. 算法参数,2. 配置参数。
可调整算法参数有:1. 空闲时间和空闲资源的换算参数 2. 每秒可产生的空闲资源TIME_UNITS_PER_SEC。
可以调整的配置参数很多,可以参看《linux高级路由与流量控制》。比如,实际要的流速是real_rate,当配置流速是rate1时,实际的流速比要求的大,此时就可以减小配置流速,还可以通过调整其它的配置参数来调整精确度。
下面分析一下linux内核的具体实现:(令牌桶和CBQ流控都是使用这个流控算法,不同点在于算法参数不同)
具体的实现是把数据包长度和空闲资源的消耗量的对应关系放在一个256大的数组内,数组的大小固定且不大,而数据包的大小是不固定的且可能比较大,那么数据包和数组如何建立对应关系呢?看linux的的实现代码。
int tc_calc_rtable(struct tc_ratespec *r, __u32 *rtab,
int cell_log, unsigned mtu,
enum link_layer linklayer)
{
int i;
unsigned sz;
unsigned bps = r-rate;获得配置流速(字节单位)
unsigned mpu = r-mpu;最小数据包长度
if (mtu
您可能关注的文档
最近下载
- 大学生个人简历表格空白模板通用.docx
- 23S516混凝土排水管道基础及接口图集.pdf VIP
- (完整版)《小型露天采石场安全生产标准化评分办法》.pdf
- 砌筑砂浆配合比设计规程.docx VIP
- 医院物业后勤化管理重点部位强化清洁方案及消毒隔离措施方案.docx
- 增量学习与类增长的融合.pptx
- 可编程逻辑控制器(PLC)系列:Siemens S7-1200 (煤炭工业应用)_(11).项目案例分析:矿井提升机控制.docx
- 课题申报书:大学生“慢就业缓就业”心理成因及干预对策研究.docx VIP
- PROE-Program程序设计全解析.doc VIP
- 2014抗爆、泄爆门窗及屋盖、墙体建筑构造14J938.docx
文档评论(0)