一种抑制非响应流和服务区分的双队列缓存管理方法
技术领域
本发明涉及缓存管理技术领域,具体来说,涉及一种抑制非响应流和服务区分的双队列缓存管理方法。
背景技术
队列管理算法对提高数据传输性能至关重要。队列管理算法可分为:被动式队列管理(Passive Queue Management,PQM)和主动式队列管理(Active Queue Management,AQM)。其中被动式队列管理方案,如DropTail在当前网络中得到广泛应用,但其存在易造成死锁、满队列、全局同步的缺陷。主动队列管理方案(AQM)核心思想是在队列未满时提前丢弃报文,使用主动队列管理机制可以控制何时丢弃报文以及丢弃的数量。
主动队列管理方案主要有两类两类:基于平均队列长度的方案和基于队列负载的方案。随机早期检测(Ramdom Early Detection,RED)通过增加非突发流的丢包率以适应突发流,相较于DropTail,RED提高了吞吐量、减少了路由队列长度,但参数配置不合理易导致RED性能出现较大震荡;LQD(Longest Queue Drop)为每条流分配单独的队列,并记录每条队列的长度,在拥塞发生时丢弃最长队列的数据包;为抑制非响应流,研究学者提出CHOKe方案,在新数据包到达时,随机从队列中抽取已有数据包与新包进行比较,若属于同一条流,则丢弃这两个数据包,如果不相同则同RED方案类似以一定概率丢弃新数据包。然而,频繁的S-M(Sample-Match)操作在数据量较大时极易增加排队时延,同时由于数据分组的随机性使得CHOKe采取无差别丢包,易造成响应流分组大量丢弃。为满足数据包严格的时延需求,提出了CoDel(Controlled Delay Management)和PIE(Proportional Integralcontroller Enhanced)等低时延主动队列管理算法。其中,CoDel算法无需设置参数,根据队列中数据包的停留时间来决定是否丢包。该方案在突发流量到达时,能够保持较低的时延。PIE算法基于比例积分控制器严格控制队列中数据包的排队时延,保证时延敏感流量的传输。在该算法基础上,Minstrel PIE在多种流量共享瓶颈时能显著提升流量性能。另一种主动队列管理方案时在发生拥塞时对数据包进行标注,如ECN(Explicit CongestionNotification),其工作原理是:发送端、接收端以及中间路由均支持ECN协议,在网络发生时通过设置数据包头部的拥塞标志位显式的通知发送端降低发送速率。
目前各类算法相同点是在发生拥塞时通过丢弃数据包的形式进行拥塞避免。大部分只考虑了流量的部分性能特征,如时延和吞吐量等,却忽视了流量之间的竞争性关系。如UDP等非响应流与TCP流在瓶颈链路上共存时,不同类型的流量对带宽的抢占能力不同。基于UDP等非响应流与TCP流竞争时会过度占用带宽,导致TCP性能受到到较大影响。非响应流又称恶意流、自私流,在网络拥塞发生时仍不降低自身的发包速率,会进一步加剧网络拥塞。UDP没有内置的拥塞控制协议,不会对网络拥塞状况做出反应。在正常流量与自私流共存时,自私流对带宽的抢占性较强,导致正常流不能正常传输数据,其时延、吞吐量无法达到保证。
检索中国发明专利CN1643872B公开了一种新型的高速高密度分组缓冲器,分组缓冲器以多个FIFO队列的形式组织起来,其中的每个FIFO队列与一条特定的输入或者输出线路相关联。每个队列包括驻留在高速存储器内的高速缓存部分和驻留在低速高密度存储器内的低速高密度部分。所述高速缓存部分包含有FIFO数据,该数据含有与所述新型FIFO队列相关联的头部和/或尾部。所述低速高密度部分包含未被包含在所述高速缓存部分内的FIFO数据。但其任在正常流量与自私流共存时,自私流对带宽的抢占性较强,导致正常流不能正常传输数据,其时延、吞吐量无法达到保证。
针对相关技术中的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术中的问题,本发明提出一种抑制非响应流和服务区分的双队列缓存管理方法,以克服现有相关技术所存在的上述技术问题。
本发明的技术方案是这样实现的:
一种抑制非响应流和服务区分的双队列缓存管理方法,包括以下步骤:
步骤S1,在新数据包进入路由时,SQM-LRU预先在SQ中以概率psamp采样,然后将采样结果与新数据包进行匹配比对;
步骤S2,若新数据包在SQ中匹配成功则该新数据包疑似长流,将其放入M-LRU中进行更新操作,若该新数据包在M-LRU中命中(hit),则根据包计数器将该新数据包条目添加、移入Top位置或Mark节点位置,若M-LRU满,则将Bottom节点或Mark节点条目删除,其中M-LRU中包计数器大于阈值plth的数据流才被判断为长流;
步骤S3,若新数据包与采样结果不匹配,则说明该新数据包在路由器中出现不频繁,将该新数据包与M-LRU中的记录进行比较,判断其是否属于先前已记录的长流,若属于长流,则将M-LRU中该记录带到Top节点位置,同时更新影子队列;
步骤S4,基于获取的分类结果将新数据包放入不同的优先级队列中,并采用轮询调度的方法在双队列中进行数据包调度。
进一步的,所述SQM-LRU包括分类器、双队列和调度器,其分类器包括SQ和M-LRU,分别用以识别自私流和恶意流并记录其状态信息。
进一步的,步骤以所述概率psamp采样,包括:
每条流被采样到的概率,表示为:
其中,bn表示属于流n的数据包在路由中的数量。
进一步的,所述将采样结果与新数据包进行匹配比对,还包括以下步骤:
比对后的数据包在LRU中进行更新;
若更新后包计数器pcount小于阈值pltf则将该条目移至Mark节点位置;若pcount>pltf,则将该条目移至LRU顶部;
若M-LRU空间已满,则删除Mark节点位置信息或Bottom节点位置信息,即最久未出现的长流/短流信息。
进一步的,所述M-LRU包括哈希表和双链表,其所述双链表包括三个空节点指针Top、Mark和Bottom,所述Mark为分隔LTF流计数单元和SLS计数单元的分隔节点,在LRU中每个节点信息pinfo包括流唯一标识fid和包计数器pcount。
本发明的有益效果:
本发明提出抑制非响应流和服务区分的双队列缓存管理方法,采用SQ对流经路由的流进行记录、采样,并在M-LRU中进行更新,其SQM-LRU能高效检测不同类型的流量,同时降低了所需空间以及检验耗时;基于检测分类结果提出双队列模型,将恶意流和自私流放入低优先级队,正常流放入高优先级队列,优先保证正常流传输要求,从而在满足公平性的基础上,实现满足正常流量低时延、自私流高吞吐的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的一种抑制非响应流和服务区分的双队列缓存管理方法的流程示意图;
图2是根据本发明实施例的一种抑制非响应流和服务区分的双队列缓存管理方法的SQM-LRU算法流程图;
图3是根据本发明实施例的一种抑制非响应流和服务区分的双队列缓存管理方法的SQM-LRU整体框架;
图4是根据本发明实施例的一种抑制非响应流和服务区分的双队列缓存管理方法的影子队列示意图;
图5是根据本发明实施例的一种抑制非响应流和服务区分的双队列缓存管理方法的M-LRU示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
根据本发明的实施例,提供了一种抑制非响应流和服务区分的双队列缓存管理方法。
如图1-图3所示,根据本发明实施例的抑制非响应流和服务区分的双队列缓存管理方法,包括以下步骤:
步骤S1,在新数据包进入路由时,SQM-LRU预先在SQ中以概率psamp采样,然后将采样结果与新数据包进行匹配比对;
步骤S2,若新数据包在SQ中匹配成功则该新数据包疑似长流,将其放入M-LRU中进行更新操作,若该新数据包在M-LRU中命中(hit),则根据包计数器将该新数据包条目添加、移入Top位置或Mark节点位置,若M-LRU满,则将Bottom节点或Mark节点条目删除,其中M-LRU中包计数器大于阈值plth的数据流才被判断为长流;
步骤S3,若新数据包与采样结果不匹配,则说明该新数据包在路由器中出现不频繁,将该新数据包与M-LRU中的记录进行比较,判断其是否属于先前已记录的长流,若属于长流,则将M-LRU中该记录带到Top节点位置,同时更新影子队列;
步骤S4,基于获取的分类结果将新数据包放入不同的优先级队列中,并采用轮询调度的方法在双队列中进行数据包调度。
其中,所述SQM-LRU包括分类器、双队列和调度器,其分类器包括SQ和M-LRU,分别用以识别自私流和恶意流并记录其状态信息。
其中,步骤以所述概率psamp采样,包括:
每条流被采样到的概率,表示为:
其中,bn表示属于流n的数据包在路由中的数量。
其中,所述将采样结果与新数据包进行匹配比对,还包括以下步骤:
比对后的数据包在LRU中进行更新;
若更新后包计数器pcount小于阈值pltf则将该条目移至Mark节点位置;若pcount>pltf,则将该条目移至LRU顶部;
若M-LRU空间已满,则删除Mark节点位置信息或Bottom节点位置信息,即最久未出现的长流/短流信息。
其中,所述M-LRU包括哈希表和双链表,其所述双链表包括三个空节点指针Top、Mark和Bottom,所述Mark为分隔LTF流计数单元和SLS计数单元的分隔节点,在LRU中每个节点信息pinfo包括流唯一标识fid和包计数器pcount。
借助于上述方案,采用SQ对流经路由的流进行记录、采样,并在M-LRU中进行更新,其SQM-LRU能高效检测不同类型的流量,同时降低了所需空间以及检验耗时;
基于检测分类结果提出双队列模型,将恶意流和自私流放入低优先级队,正常流放入高优先级队列,优先保证正常流传输要求,从而在满足公平性的基础上,实现满足正常流量低时延、自私流高吞吐的目的。
另外,具体的,pinfo为数据包信息,主要包括fid,fid为包的四元组信息由(源IP、目的IP、源端口、目的端口)组成的全局唯一值,属于同一条流的数据包具有相同的fid,在新数据分组到达路由器时,首先获取pinfo信息,然后在影子队列中以一定概率psamp采样,将采样结果与新数据包pinfo进行比对,若两者相符则说明该流在影子队列中频繁出现,需要在M-LRU中进行更新操作;若该条pinfo在M-LRU中,则需要对其pinfo中的包计数器pcount进行更新,若更新后的pcount大于阈值plth,则将其移到LRU的Top节点位置,同时判断长流单元是否满,若已满则移除Mark节点位置条目,即最久未出现的长流信息;若小于阈值,则需将其移入Mark节点位置;若没有该条目,则将该条目插入Mark节点位置,同时判断短流单元是否满,若满则删除Bottom节点位置信息。
此外,如图4-图5所示,影子队列(Shadow Queue)通过构造进入路由中的数据包副本进行包信息采集。影子队列维持一个固定的队列长度,它不同于路由器中的实际队列,其队列长度大于路由中实际的队列长度,从而可以记录更多的历史包信息。影子队列一般只记录数据包的流ID(fid)信息,当新数据包进入路由时,更新影子队列。在Mark节点位置进行插入操作,同时将包计数器达到阈值的流带Top位置,可以有效避免由大量SLS流造成的LTF流在LRU中被频繁替换的问题。影子队列机制在保证采样准确度的基础上可以有效减少LRU大小,便于在高速路由器中部署。
另外,来自LTF流的数据包相较于SLS流在路由器中出现频次更大。以HTTP流为例,它是一种典型的ON-OFF流,其间歇性地发送流量,产生的数据包离散分布,相较于长流,其数据包在路由器中出现频率更低;而基于UDP的CBR流会持续向链路发送数据包,因此其数据包在路由器中出现的频率更高。为了识别路由器中的流量,一些方案采用固定大小的LRU缓存记录流经路由器的流信息。这种策略在LRU缓存较大时能取得较好的结果,但较大缓存的LRU在路由器中难以实现;同时大量的SLS流可能会使LTF流未达到计数阈值即被从LRU中排出,导致对LFT流的识别效果明显下降。
另外,由于LRU涉及到频繁的查找操作,在大量数据包中进行查找时,时间消耗是必须要考虑的因素。而双链表的查找较为耗时,因此本文采用基于Hash散列的方式,使每个节点可以通过索引的方式在O(1)时间得到查找结果,使之可以部署在高速路器中。
本专利采用双队列的方式来满足不同类型流差异化的性能需求,实现更好的公平性。双队列方案中包含两个优先级不同的队列:高优先级队列和低优先级队列。同时采用轮询调度策略在两个队列间进行调度,防止出现低优先级队列长期得不到服务的情况。
RED算法与DropTail策略增加了两种新机制:利用概率判定机制选择性地主动丢弃部分数据包来预防可能发生的拥塞;分组丢弃概率的判别依据平均队列长队而不是瞬时队列长度。RED队列管理机制在大批量数据传输场景下能实现高吞吐的要求。然而,对于时延敏感的应用,如音频、控制、Telnet等,RED算法易导致大量丢包,造成性能下降。CoDel是主动队列管理(AQM)的一种,主要用来降低网络中越来越长的排队时延。该算法直接对队列的时延进行控制,当时延较大时,CoDel对进入队列的包进行丢弃,直到时延下降到期望值为止。同时,通过对包在队列中的停留时间进行跟踪,达到低时延的目的。因此对于正常流量采用CoDel队列管理方案较为合适。
综上所述,借助于本发明的上述技术方案,通过采用SQ对流经路由的流进行记录、采样,并在M-LRU中进行更新,其SQM-LRU能高效检测不同类型的流量,同时降低了所需空间以及检验耗时;基于检测分类结果提出双队列模型,将恶意流和自私流放入低优先级队,正常流放入高优先级队列,优先保证正常流传输要求,从而在满足公平性的基础上,实现满足正常流量低时延、自私流高吞吐的目的。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。