按位实现的队列轮询算法

由于Nagle所提出的队列轮询算法,实际上是以报文为单位进行公平轮询,进而发送报文,但是没有考虑报文大小不同带来的不公平性,导致使用大报文的连接占用较多的网络带宽。来看一下为解决此问题,理想的按照比特位为单位进行的轮询算法。

首先,假设一个理论上的队列服务机制,其可以按照比特位轮询方式(bit-by-bit round robin)进行数据发送,这样,此服务机制可保证在任意时刻每个连接队列都可获得公平的带宽服务。使用R(t)表示在t时刻已进行的轮询次数,R(t)为连续函数,分数结果表示当前存在一次还没有完成的轮询。另外,使用Nac(t)表示t时刻活动的连接(会话)数量,即在其相应队列中存有未发送的数据位bit的连接。那么,可得到以下等式:

δ R δ t = μ N a c ( t ) \frac{\delta R}{\delta t}=\frac{\mu }{N_{ac}(t)} δtδR=Nac(t)μ

其中,μ为出口链路的线速(为方便起见,可假设μ=1),得到每个队列获得的公平带宽份额。

假设一个长度为P的报文,其首个数据位bit在时间t0获得发送服务,那么,最后一个数据位将在之后的第P次轮询获得服务,假定时间为t,可得以下等式:

R ( t ) = R ( t 0 ) + P R(t) = R(t_{0}) + P R(t)=R(t0)+P

泛化以上的定义,使用tia表示属于连接a的第i个报文到达网关的时间,定义Sia和Fia分别表示此报文开始获得服务和服务结束时的R(t)的值,另外,使用Pia表示此报文的大小,以下等式成立:

F i a = S i a + P i a F_{i}^{a} = S_{i}^{a} + P_{i}^{a} Fia=Sia+Pia

以及:

S i a = M A X ( F i − 1 a , R ( t i a ) ) ) S_{i}^{a} = MAX(F_{i-1}^{a}, R(t_{i}^{a}))) Sia=MAX(Fi1a,R(tia)))

如果网关的队列中有数据位,那么R(t)始终为一个单调递增的函数,网关的每个队列(连接)中报文的Fia结束周期始终与Bit-by-bit Round-Robin机制定义的报文结束服务时间一致。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页