掌桥专利:专业的专利平台
掌桥专利
首页

一种基于用户数据流优先级的队列调度方法与系统

文献发布时间:2023-06-19 15:47:50



技术领域

本发明涉及通信技术,尤其涉及一种基于用户数据流优先级的队列调度方法与系统。

背景技术

随着网络技术的不断进步,网络应用多元化也随之而生,视频、语音、上网、游戏、下载等越来越多的业务呈现爆发式增长。当各种业务流量都充斥着网络时,就会造成网络拥堵,数据包转发延时增大,严重时还造成数据包丢失,最终导致各种业务服务质量急剧下降,严重影响用户的上网体验。

现有的提升网络服务质量主要有如下方案:

1、升级带宽,增加链路带宽。

2、基于设备的IP或MAC地址进行流量限速。

3、利用开源tc工具进行部署,策略性选择数据包优先通过。

上述方案的缺陷如下:

1、升级带宽,则意味着成本增加,这是不得以而为之,是终端用户最不愿意接受的。

2、在带宽不变的条件下,使用高实时性的业务的设备端给予分配更高带宽,使用低实时性的业务的设备端分配低带宽,在一起程度上,确实起到缓解网络拥堵的效果,也能平衡各方的上网服务质量,但是当设备端上网业务发生变化,就可能造成带宽得不到合理利用,而分配到低带宽的设备端又不能很好满足其要求更高带宽、实时性更强的上网业务需求。

3、采用tc流量控制机制实现部署复杂,使用门槛要求较高,由于tc算法都采用了树形结构对限速规则进行存储,具有一定缺陷,不能实现某台设备既要满足ip组限速、也要满足接口组限速、时间组限速等情形。

发明内容

为了解决现有技术中的问题,本发明提供了一种基于用户数据流优先级的队列调度方法与系统。

本发明提供了一种基于用户数据流优先级的队列调度方法,根据用户上网业务的数据流的优先级动态调整数据包的发送顺序,令高优先级的业务数据流优先出队,低优先级业务数据流后出队。

作为本发明的进一步改进,所述队列调度方法包括以下步骤:

S1、模块初始化;

S2、数据包入队过程;

S3、数据包出队过程;

S4、定时器调度。

作为本发明的进一步改进,步骤S1包括以下子步骤:

S1.1、首先,内核启动时,通过insmod命令加载网络服务质量模块,并初始化令牌桶和优先级队列,建立定时器,用户链表,并在协议栈发送数据包的入口函数dev_queue_xmit内设立钩子函数,用于接管所有数据包;

S1.2、所述的令牌桶用于表示WAN口带宽的度量,包含上行带宽、下行带宽,令牌以时间滴答数为单位,令牌桶数据结构至少包含4个成员变量,分别为检测时间、令牌激活时间、当前令牌数量、速率表,其中,

检测时间、令牌激活时间初始值为当前系统运行时间的滴答数,当前令牌数量初始值为一秒内的滴答数,速率表为包含多个元素的数组,每个元素的值的含义为发送某个区间大小的数据包所需要消耗的令牌,速率表计算公式为:t(i)=(C1*(i+1)*C2/W)*C3;其中,C1为常量,表示一秒内的微妙数,i表示数组某个元素的下标值,C2为常量,表示每个元素值的区间范围的大小,W表示带宽,单位为一秒内的字节数,C3为常量,表示一微妙内的滴答数,t(i)值为发送某个区间字节大小的数据包时所需要的令牌数量;

S1.3、计算数据包满足发送条件所消耗的令牌数;

S1.4、所述优先级队列是一个二维数组,第一纬包含用于表示方向,第二纬用于表示优先级大小,每个优先级队列都包含用户关联链表,用于表示是否有用户的相应优先级的数据流与之关联;

S1.5、所述定时器的定时时间到后,开始遍历优先级队列,取出队列上的某个用户的相应优先级的数据流链表上的数据包进行发送。

作为本发明的进一步改进,在步骤S1.2中,速率表为包含100个元素的数组,i表示数组某个元素的下标值,从0到99,C2为常量16,表示每个元素值的区间范围的大小为16,则速率表覆盖范围为从0到1600,W表示带宽,单位为一秒内的字节数,初始值为1Gbps,该值在模块加载完成后通过应用层下发配置修改之,C3为常量,表示一微妙内的滴答数,所以t(i)值为发送i*16到(i+1)*16之间字节大小的数据包时所需要的令牌数量;

在步骤S1.3中,通过将数据包大小/16,得到该数据包消耗的令牌数落入哪个区间k,当k<=100时,此时的t(k)值则为发送此数据包的令牌数,如果k大于速率表大小100,则发送此数据包的令牌数,为t(99)*(k/100)+t(k%100);

在步骤S1.4中,所述优先级队列是一个二维数组,第一纬包含2个元素用于表示方向,0和1分别表示上行方向与下行方向,第二纬包含7个元素用于表示优先级大小,数字越小,优先级越高,0到6分别表示最高,较高,高,中,低,较低,最低优先级;

在步骤S1.5中,所述定时器使用了内核定时器struct timer_list,该定时器是以jiffies为单位的定时值,定时间隔10毫秒。

作为本发明的进一步改进,步骤S2包括以下子步骤:

S2.1、协议栈转发的数据包执行到所设立的钩子函数时,开始进入数据包入队处理过程,首先,判断数据包是否已建立链接跟踪,如果未建立,则不对数据包做任何处理,直接返回,如果建立,则继续;

S2.2获取数据包方向,方向为上行或下行,获取数据包的优先级,如果数据包方向获取失败或者数据包优先级获取失败,直接返回,如果成功获取,则继续;

S2.3查询链接跟踪是否已关联用户,如果未关联用户,则对用户基本信息和用户调度信息初始化;

S2.4完成链接跟踪关联用户后,继续查询链接跟踪是否已关联数据流,如果未关联数据流,则对数据流的基本信息进行初始化;

S2.5链接跟踪的用户信息与数据流信息都建立后,开始将优先级队列,用户信息,数据流信息,数据包之间的关系关联起来,首先,数据包插入到当前方向的数据流的数据包缓存链表,并且将当前方向的数据流的关联节点插入到用户的当前优先级数据流链表,然后,用户的当前优先级关联节点插入到当前优先级的优先级队列的用户链表上,至此,数据包已完成入队操作,然后立即遍历与此数据包同方向的所有优先级队列,执行数据包调度出队任务。

作为本发明的进一步改进,在步骤S2.3中,用户基本信息包含用户IPv4地址,IPv6地址,MAC地址,接口名,并根据IP地址,MAC地址匹配上层应用进程下发的限速规则,初始化此用户的限速规则掩码,掩码的某个bit位用来表示某条限速规则是否对此用户设置了限速规则,为0表示不限速,为1表示限速;此外,用户调度信息包含用户的上行调度信息与用户的下行调度信息,两者数据结构类型一样,都包含此方向的所有优先级队列关联节点,所有优先级数据流链表,调度状态,再次激活时间,阻塞的规则掩码,所有限速规则的检测时间、令牌激活时间、令牌数量、速率表;其中,优先级队列关联节点用来表示此用户是否缓存了当前方向当前优先级的数据流,如果有,则将此节点插入相应优先级队列的用户链表上,而插入到优先级数据流链表的每个节点则表示关联了此用户的当前方向当前优先级的每条数据流,调度状态则表示此用户当前方向是否可以发送数据包,包含阻塞与激活两种状态,如果用户当前方向的某条限速规则令牌不足时,调度状态则设置为阻塞状态,并且根据所有限速规则都生成令牌后的最长时间设置为再次激活时间,而阻塞的规则掩码则用来表示用户当前方向的哪些限速规则的令牌已消耗完毕需要等待再次产生令牌才能继续发包。

作为本发明的进一步改进,在步骤S2.4中,对数据流的基本信息进行初始化,包括设置数据流的优先级,初始化数据流的上行缓存信息以及下行缓存信息;数据流的两个方向的缓存信息结构一致,都包含数据流关联节点,数据包缓存链表,其中,数据流关联节点用来插入到用户的当前优先级数据流链表,数据流关联节点为空则表示未关联上用户的当前优先级数据流链表,而数据包缓存链表则用来缓存数据包,数据包缓存链表为空则表示未缓存数据包。

作为本发明的进一步改进,步骤S3包括以下子步骤:

S3.1、首先,根据前一次执行队列调度的检测时间与当前时间的时间差,补充到当前方向桶的可用令牌数量,并设置当前方向桶的检测时间为当前时间,如果桶的可用令牌数量超过一秒内的滴答数,则桶的可用令牌数量设置为一秒内的滴答数;

S3.2从最高优先级开始,取出当前方向当前优先级的优先级队列信息,开始遍历用户链表,如果没有用户关联,则遍历下一个优先级队列;

S3.3从优先级队列的用户链表取到关联的用户节点后,查看,此用户是否处于限速状态,如果处于限速,并且用户的激活时间还没到,则跳过此用户,从优先级队列的用户链表,取出下一个用户,如果用户处于限速,并且激活时间已到,则根据用户的阻塞规则掩码遍历相应的限速规则,根据限速规则的流逝时间,补充相应数量的令牌,当所有限速规则都已补充令牌后,则激活此用户,并设置此用户调度状态为激活状态,用户激活时间为当前时间;

S3.4从优先级队列的用户链表取到关联的用户节点后,如果用户的调度状态为激活状态,则遍历用户的当前优先级数据流链表,如果没有数据流关联节点,则将此用户节点从优先级队列的用户链表里删除,并继续遍历优先级队列的用户链表,取出下一个关联的用户节点;

S3.5取得数据流的关联节点后,遍历此节点的数据流的数据包缓存链表,开始消耗当前方向的桶令牌,消耗用户匹配到的所有限速规则令牌,直到当前方向的桶令牌不足,或者某个限速规则令牌不足,停止遍历数据流,数据包停止出队;

S3.6如果数据流的数据包缓存链表中的所有数据包都已被取出发送,则将数据流关联节点从用户的数据流链表里删除,如果用户的数据流链表已为空,则将用户的优先级队列关联节点从优先级队列的用户链表里删除。

作为本发明的进一步改进,步骤S4包括:定时时间到后,开始执行定时器回调函数,先遍历上行方向的所有优先级队列取出数据包进行发送,再遍历下行方向的所有优先级队列取出数据包进行发送,与数据包入队后立即触发数据包出队流程不同的是,定时器调度包含上行与下行两个方向的同时调度出队,而后者仅一个方向调度出队。

本发明还提供了一种基于用户数据流优先级的队列调度系统,包括可读存储介质,所述可读存储介质中存储有执行指令,所述执行指令被处理器执行时用于实现如上述中任一项所述的方法。

本发明的有益效果是:采用基于用户数据流优先级的调度方案,在网络发生拥堵的情况下,可有效提升整体网络的服务质量,能令高优先级的业务数据流优先发送。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的方案。

图1是本发明一种基于用户数据流优先级的队列调度方法的整体框架图。

图2是本发明一种基于用户数据流优先级的队列调度方法的数据包缓存结构图。

图3是本发明一种基于用户数据流优先级的队列调度方法的数据包入队流程图。

图4是本发明一种基于用户数据流优先级的队列调度方法的数据包出队流程图。

具体实施方式

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明保护范围的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。

下面结合附图说明及具体实施方式对本发明作进一步说明。

如图1至图4所示,一种基于用户数据流优先级的队列调度方法,用于实现网络服务质量提升,根据用户上网业务的数据流的优先级动态调整数据包的发送顺序,令高优先级的业务数据流优先出队,低优先级业务数据流后出队,达到提升整体网络服务质量的效果,为了达到这个目的,其具体流程如下:

1模块初始化:

1.1、首先,内核启动时,通过insmod命令加载网络服务质量模块,并初始化令牌桶,优先级队列,建立定时器,用户链表。并在协议栈发送数据包的入口函数dev_queue_xmit内设立钩子函数,用于接管所有数据包。

1.2、本发明所述的令牌桶用于表示WAN口带宽的度量,包含上行带宽、下行带宽,令牌以时间滴答数为单位,令牌桶数据结构包含4个成员变量(检测时间、令牌激活时间、当前令牌数量、速率表),其中检测时间、令牌激活时间初始值为当前系统运行时间的滴答数,当前令牌数量初始值为一秒内的滴答数。速率表为包含100个元素的数组,每个元素的值的含义为发送某个区间大小的数据包所需要消耗的令牌,速率表计算公式为:t(i)=(C1*(i+1)*C2/W)*C3;其中C1为常量,表示一秒内的微妙数,i表示数组某个元素的下标值,从0到99,C2为常量16,表示每个元素值的区间范围的大小为16,则速率表覆盖范围可从0到1600。W表示带宽,单位为一秒内的字节数。初始值为1Gbps,该值在模块加载完成后可通过应用层下发配置修改之。C3为常量,表示一微妙内的滴答数。所以t(i)值可以理解为发送i*16到(i+1)*16之间字节大小的数据包时所需要的令牌数量。

1.3、计算数据包满足发送条件所消耗的令牌数,可通过将数据包大小/16,得到该数据包消耗的令牌数落入哪个区间k,当k<=100时,此时的t(k)值则为发送此数据包的令牌数。在某些情况下,可能k会大于速率表大小100,则发送此数据包的令牌数,应为t(99)*(k/100)+t(k%100)。

1.4、本发明所述优先级队列是一个二维数组,第一纬包含2个元素用于表示方向,0和1分别表示上行方向与下行方向。第二纬包含7个元素用于表示优先级大小,数字越小,优先级越高,0到6分别表示最高,较高,高,中,低,较低,最低优先级,每个优先级队列都包含用户关联链表,用于表示是否有用户的相应优先级的数据流与之关联。

1.5、本发明所述定时器使用了内核定时器struct timer_list,该定时器是以jiffies为单位的定时值,定时间隔10毫秒,定时时间到后,开始遍历优先级队列,取出队列上的某个用户的相应优先级的数据流链表上的数据包进行发送。

2数据包入队过程:

2.1协议栈转发的数据包执行到本发明设置的钩子函数时,开始进入数据包入队处理过程,首先,判断数据包是否已建立链接跟踪,如果未建立,则不对数据包做任何处理,直接返回,如果建立,则继续。

2.2获取数据包方向(上行或下行),获取数据包的优先级,如果数据包方向获取失败或者数据包优先级获取失败,直接返回。如果成功获取,则继续。

2.3查询链接跟踪是否已关联用户,如果未关联用户,则对用户基本信息和用户调度信息初始化,用户基本信息包含用户IPv4地址,IPv6地址,MAC地址,接口名,并根据IP地址,MAC地址等信息匹配上层应用进程下发的限速规则,初始化此用户的限速规则掩码,掩码的某个bit位用来表示某条限速规则是否对此用户设置了限速规则,为0表示不限速,为1表示限速。此外,还包含用户调度信息初始化,用户调度信息包含用户的上行调度信息与用户的下行调度信息,两者数据结构类型一样,都包含此方向的所有优先级队列关联节点,所有优先级数据流链表,调度状态,再次激活时间,阻塞的规则掩码,所有限速规则的检测时间、令牌激活时间、令牌数量、速率表。其中优先级队列关联节点用来表示此用户是否缓存了当前方向当前优先级的数据流,如果有,则将此节点插入相应优先级队列的用户链表上,而插入到优先级数据流链表的每个节点则表示关联了此用户的当前方向当前优先级的每条数据流。调度状态则表示此用户当前方向是否可以发送数据包,包含阻塞与激活两种状态,如果用户当前方向的某条限速规则令牌不足时,调度状态则设置为阻塞状态,并且根据所有限速规则都生成令牌后的最长时间设置为再次激活时间,而阻塞的规则掩码则用来表示用户当前方向的哪些限速规则的令牌已消耗完毕需要等待再次产生令牌才能继续发包。

2.4完成链接跟踪关联用户后,继续查询链接跟踪是否已关联数据流,如果未关联数据流,则对数据流的基本信息进行初始化,包括设置数据流的优先级,初始化数据流的上行缓存信息以及下行缓存信息。数据流的两个方向的缓存信息结构一致,都包含数据流关联节点,数据包缓存链表。其中数据流关联节点用来插入到用户的当前优先级数据流链表,数据流关联节点为空则表示未关联上用户的当前优先级数据流链表,而数据包缓存链表则用来缓存数据包,数据包缓存链表为空则表示未缓存数据包。

2.5链接跟踪的用户信息与数据流信息都建立后,开始对优先级队列,用户信息,数据流信息,数据包之间的关系关联起来。首先,数据包插入到当前方向的数据流的数据包缓存链表,并且将当前方向的数据流的关联节点插入到用户的当前优先级数据流链表,然后,用户的当前优先级关联节点插入到当前优先级的优先级队列的用户链表上,至此,数据包已完成入队操作。然后立即遍历与此数据包同方向的所有优先级队列,执行数据包调度出队任务。

3数据包出队过程:

3.1首先,根据前一次执行队列调度的检测时间与当前时间的时间差,补充到当前方向桶的可用令牌数量,并设置当前方向桶的检测时间为当前时间,如果桶的可用令牌数量超过一秒内的滴答数,则桶的可用令牌数量设置为一秒内的滴答数。

3.2然后,从最高优先级开始,取出当前方向当前优先级的优先级队列信息,开始遍历用户链表,如果没有用户关联,则遍历下一个优先级队列。

3.3从优先级队列的用户链表取到关联的用户节点后,查看,此用户是否处于限速状态,如果处于限速,并且用户的激活时间还没到,则跳过此用户,从优先级队列的用户链表,取出下一个用户。如果用户处于限速,并且激活时间已到,则根据用户的阻塞规则掩码遍历相应的限速规则,根据限速规则的流逝时间,补充相应数量的令牌。当所有限速规则都已补充令牌后,则激活此用户,并设置此用户调度状态为激活状态,用户激活时间为当前时间。

3.4从优先级队列的用户链表取到关联的用户节点后,如果用户的调度状态为激活状态,则遍历用户的当前优先级数据流链表,如果没有数据流关联节点,则将此用户节点从优先级队列的用户链表里删除,并继续遍历优先级队列的用户链表,取出下一个关联的用户节点。

3.5取得数据流的关联节点后,遍历此节点的数据流的数据包缓存链表,开始消耗当前方向的桶令牌,消耗用户匹配到的所有限速规则令牌,直到当前方向的桶令牌不足,或者某个限速规则令牌不足,停止遍历数据流,数据包停止出队。

3.6如果数据流的数据包缓存链表中的所有数据包都已被取出发送,则将数据流关联节点从用户的数据流链表里删除。如果用户的数据流链表已为空,则将用户的优先级队列关联节点从优先级队列的用户链表里删除。

4、定时器调度:

4.1定时时间到后,开始执行定时器回调函数,先遍历上行方向的所有优先级队列取出数据包进行发送,再遍历下行方向的所有优先级队列取出数据包进行发送,与数据包入队后立即触发数据包出队流程不同的是,定时器调度包含上行与下行两个方向的同时调度出队,而后者仅一个方向调度出队。

本发明提供的一种基于用户数据流优先级的队列调度方法与系统,采用基于用户数据流优先级的调度方案,在网络发生拥堵的情况下,可有效提升整体网络的服务质量,能令高优先级的业务数据流优先发送,比如游戏、视频、语音等要求实时性较强的业务享有优先调度权利,最大程度保证高优先级的数据流不发现丢包、断流现象,令用户感觉不到有明显的视觉、听觉卡顿现象,使得在网络发生拥堵时,用户也能获得良好的上网体验。相比已有的技术,本发明的队列调度方案对CPU的资源开销较低,对设备的数据包转发性能影响较小。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

技术分类

06120114580424