iKuai爱快流控路由

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2743|回复: 15
打印 上一主题 下一主题

[其他] 对优先转发程序设计的优化思路

[复制链接]
跳转到指定楼层
楼主
发表于 2013-10-28 10:25:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chq00123 于 2013-10-30 08:54 编辑

一楼是程序设计思路,,二楼是解释程序原理
声明:之前,我提过,优先转发机制和公平转发机制之间,判定切换的方法,存在致命的技术性错误。

具体如下:当流量负载大的时候,10*N≥60%*M,10*N≥40%*M,是必然成立的,那么这时候两种机制运行的时间的一样的,也就是两种机制发送的流量,是各占总带宽的50%,没有达到预期的效果。所以这种判定方法是错误的。

为了满足不同的策略需求,要实现对2种机制的通过的流量来进行限制,可以用其他的方法来实现,具体的方法就不说。方法比较简单(比之前的10*N≥60%*M还要简单),也比较有效。

其实对这种优先转发的思路,给我最大启发的是磊科!(虽然磊科的也没有开源,但可以从他的参数的设置等方面做猜测)~这种方法跟磊科的很类似,同样的,跟X盟也很类似。(X盟跟磊科的QOS是出自同宗,只是后期大家的优化不一样)。但是磊科(X盟)的要做预留(因为识别不准确,而这种方法不需要预留!~不需要预留的前提是L7识别精准!~


下面的2个图,是我之前发过的,第一张是 优先转发的程序设计图,第二张,是在这种优先转发机制下,要解决的2个问题。今天开个帖子,用我的思路来解决第一个问题:如何解决高优先级,一直抢占带宽,导致低优先级饿死的情况。(这种情况比较常见于视频电影的优先级设置比下载高,而且,视频电影,通常会导致带宽占用率达到100%,导致下载等比他低优先的应用饿死。)

为了解决这个问题,我的思路是这样的,加入,公平转发机制。什么是公平转发?顾名思义,就是对5个优先级缓存的数据,进行公平转发,怎么实现呢?类似与优先转发,同样先判断最高优先级的标志位,有数据,就转发一个包,没有数据,就直接判断下个优先级的标志位,以此类推,完成一轮,就从头开始循环。这样,就可以确保,每循环一轮,只要各个优先级的缓存内有数据,就都会被转发一个数据包。

好了。。新的问题来了,,什么时候用公平转发,什么时候用优先转发?

为了解决这个问题,我引入一个参数,暂且命名为  优先系数。以百分比的形式存在。(在UI界面设个对话窗口,网管可以根据自己的需求在1%~100%之间调节)。  这个优先系数的作用是什么呢?他是以网络负载和机制的流量,来对上面的2种转发机制进行切换轮调的。说的这么玄!~要怎么实现呢?  请往下看!~~

优先系数,的百分比,是谁的百分比? 是外网总带宽的!~具体实现的方法如下:

外网总带宽为M KB/S。优先系数为60%

在公平转发对5个优先级的数据都转发一个包之后,开始第二轮循环之前,加入几个指令,用来实现统计5个包的数据大小,N(量)(再循环的话再累加,直到清零)

同理在优先转发程序,每转发出去一个数据包,对数据包大小N(量)统计。(这个N跟上面的N,是同一个,因为,N清零,是在2种转发机制切换的时候)

整个程序,还需要加入一个硬件时间计数器,用来触发中断,比如,设置为100ms,就是100ms执行一次中断,中断子程序的作用是什么呢?,,计算流量!就是计算N/100ms,并转化为秒,,既10*N,这就是,网络中的流量。

在公平转发对5个优先级的数据都转发一个包之后统计完5个数据包大小之后,开始第二轮循环之前,
把10*N跟60%*M进行比较,10*N≥60%*M的话,就把N清零,跳转到优先转发程序执行,10*N<60%*M的话,就继续循环公平转发程序。

同样的在优先转发程序,每转发出去一个数据包,对数据包大小N(量)统计完的后面,把10*N跟(1-60%)*M进行比较
10*N≥(1-60%)*M的话,就把N清零,跳转到公平转发程序执行,10*N<(1-60%)*M的话。就继续循环执行优先转发程序。


更正:刚才吃饭的时候,想到个BUG,那就是,需要在中断子程序中加入对N的清零操作,否则的话,N一直累加下去,就必然会出现10*N>60%*M的情况。具体更改的方法是:把10*N跟60%*M(或40%*M)的比较放在中断子程序中,并设置个判断位P,把比较的结果,存入P(例如大于等于,就把P置1,小于P就置0)并把N清零。转发程序中,就不需要做比较了,只要判断P=1还是0,就可以决定,是切换状态,还是继续循环了。同时,为了帮中断子程序判断,到底是执行10*N跟60%*M比较还是跟40%*M比较,在2个转发程序开头再加入,一个状态标志位Z,(Z置1为公平,Z置0为优先),中断子程序根据Z来选择10*N跟60%*M比较还是跟40%*M比较了。
再次更正:睡了一觉,起来再次发现个问题,特此更正。
BUG就是在高负载情况下,执行优先程序的时候,过了限定值,可以跳转回公平机制,来保障低优先级不被饿死。但是在优先机制中,低负载的情况下,却无法跳回了。。虽然低负载用优先机制,同样可以,但是为了防止一些难以预料的后果,还是决定要把他调回公平机制。具体的方法就是先对高负载判断,要是10*N还没超出40%*M,在把10*N与60%*M进行比较,要是10*N<60%*M,(比较方法同黑色更正,因为中断之后的N,已经被清零了,所以比较都要放到中断子程序内),那么也调回公平机制。

哎。久不摸编程了。一个小程序都七改八改的!~



QQ截图20131028090449.jpg (110.97 KB, 下载次数: 5)

QQ截图20131028090449.jpg

QQ截图20131028090525.jpg (33.66 KB, 下载次数: 4)

QQ截图20131028090525.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
沙发
 楼主| 发表于 2013-10-28 10:26:51 | 只看该作者
本帖最后由 chq00123 于 2013-10-30 05:25 编辑

现在就以60%为例,来解释一下原理
基本思路就是把带宽按比例手动分成两部分,一部分用来执行公平转发,一部分用来执行转发

当网络中的总流量在60%*M以内的时候,,是一直执行公平转发程序的。也就是。各个优先级,都有自己的通道,网页秒开,游戏不卡。视频流畅,下载也有速度,同时,也不会造成带宽的浪费,因为,高优先级没有数据的时候,程序不是停在那,等他来数据,而是,直接转发下个优先级的数据的。

当网络中的流量超过60%*M的时候就会切换到优先执行机制,但并不是后面的一直按照优先执行机制执行的,而是判断优先执行机制的流量,是否超过了剩余40%*M的量,一旦超过了,就切换回公平转发机制。

所以当我们把优先系数设置为60%时。即使,网络的使用率是100%,其中60%是按公平转发机制进行的,40%是按优先转发机制进行的,  确保了,在任何负载下,网页秒开,游戏不卡,同时,低优先级的也不至于饿死。(当然,可以根据不同的策略和需求,对优先系数进行设置)

在这种转发机制下。对策略协议的总限速,可以取消了。但保留单机限速,因为,我对之前提到的第二个问题怎么解决,同级 优先级流量的主机之间的带宽分配。我还没有思路,只能继续沿用爱快的设计了。

这是我的设计思路,希望爱快的开发人员,进行参考。
板凳
发表于 2013-10-28 10:44:39 | 只看该作者
楼主是不是想加入爱快研发呢?
地板
发表于 2013-10-28 10:46:51 | 只看该作者
如果全部都是楼主自己写的,可以与我联系。
5#
 楼主| 发表于 2013-10-28 10:53:21 | 只看该作者
小C 发表于 2013-10-28 10:46
如果全部都是楼主自己写的,可以与我联系。

确实是原创,不过,我并不想加入爱快研发,也没有那个实力,对于编程,只学过底层语言(汇编语言),所以程序的设计,都是以底层语言为思路,用高级语言来实现也许更简单吧,不过效率嘛,还是比不过底层语言!~
6#
发表于 2013-10-28 11:38:48 | 只看该作者
chq00123 发表于 2013-10-28 10:53
确实是原创,不过,我并不想加入爱快研发,也没有那个实力,对于编程,只学过底层语言(汇编语言),所以 ...

那你汇编写。。。。


另外效率上,汇编不一定比C高。为啥呢?因为编译器对汇编的掌握,要比一般的汇编程序员要强。

所以不到万不得已,不通过反汇编分析,不是特殊场景,一般都不会汇编了
7#
发表于 2013-10-28 11:48:06 | 只看该作者
支持楼主的想法,另外提一个建议,流控大师里面有动态调整的功能和楼主说的这个类似吧。
智能带宽能做到闲时忙时做不同的策略最好了。
8#
 楼主| 发表于 2013-10-28 12:21:48 | 只看该作者
GFree_Wind 发表于 2013-10-28 11:38
那你汇编写。。。。

兄弟,谢谢支持,不过本人自从毕业后,就一直做财会工作,N年没摸过程序了,现在能提出思路,已经证明脑袋还没生锈,哪里还写得出程序!~~只是把自己的思路分享出来,给爱快的开发做个参考。爱快的优化方式,可能比我的还要完美,人家才是正正经经的程序员!~~~
9#
发表于 2013-10-28 12:45:52 | 只看该作者
chq00123 发表于 2013-10-28 12:21
兄弟,谢谢支持,不过本人自从毕业后,就一直做财会工作,N年没摸过程序了,现在能提出思路,已经证明脑 ...

从程序转到财会?跨度不小啊。


10#
发表于 2013-10-28 13:52:04 | 只看该作者
爱快论坛牛人多啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|论坛规章制度|iKuai Inc. ( 京ICP备13042604号 )

GMT+8, 2024-9-28 13:22

Powered by Discuz! X3.3

© 2001-2024 Comsenz Inc.

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