一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

缓存队列的管理方法、电子设备及存储介质与流程

2022-03-26 06:39:19 来源:中国专利 TAG:


1.本发明实施例涉及通信技术领域,特别涉及一种缓存队列的管理方法、电子设备及存储介质。


背景技术:

2.流量整形通常是将数据流存储到缓存队列中,然后按照一定的方式管理调度缓存队列向外发送数据,其中,缓存队列的一种常用管理方式是随机公平队列(stochastic fairness queueing,sfq),即设置多个缓存队列,通过轮询的方式依次调度队列向外发送预设数据量的数据,一个队列发送完成下一个队列再开始发送等。
3.然而,sqf会由于发送数据量和队列绑定,不论该队列存储的数据流的数据量是大还是小,都是以预设数据量向外发送数据,在存储的数据量的数据量较大时,由于需要多次等待其他缓存队列发送数据,会具有较大时延,甚至由于时延过长或者当前缓存的数据超出缓存队列的最大队列长度,即最大缓存数据量,从而触发丢包机制,造成丢包过多。


技术实现要素:

4.本发明实施例的目的在于提供一种缓存队列的管理方法、电子设备及存储介质,使得在基于缓存队进行流量整形时,能够减少时延和丢包。
5.为达到上述目的,本发明的实施例提供了一种缓存队列的管理方法,包括以下步骤:获取缓存情况发生变化的各缓存队列中已缓存数据的数据量;检测所述已缓存数据的数据量是否超过第一预设阈值;在所述已缓存数据的数据量超过所述第一预设阈值的情况下,获取所述缓存队列中所述已缓存数据的入队速率并根据所述已缓存数据的数据量和所述入队速率,确定对应所述缓存队列的出队权重;在所述已缓存数据的数据量未超过所述第一预设阈值的情况下,根据所述已缓存数据的数据量,确定对应所述缓存队列的所述出队权重。
6.为达到上述目的,本发明的实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的缓存队列的管理方法。
7.为达到上述目的,本发明的实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的缓存队列的管理方法。
8.本发明实施例提供的缓存队列的管理方法,获取缓存情况发送变化的缓存队列的已缓存数据的数据量,然后通过检测数据量是否超过第一预设阈值来判断是否需要考虑入队速率对出队权重的影响,可以理解的是,在已缓存数据的数据量未超过第一预设阈值的情况下,即该缓存队列中还有较多存储空间继续存储数据时,即使数据入队速率较大,但是缓存队列中已缓存数据也在不断出队,缓存队列基本不会达到最大队列长度,即已经较好地避免了丢包的问题,此时主要考虑已缓存数据的数据量对出队权重的影响,使得出队权
重与数据量相适应,缓存队列中的缓存数据能够通过较少的出队次数就能够发送出去,减少等待其他缓存队列发送的次数,最终减少时延,避免本缓存队列的出队权重过大,一次出队的数据量过大,其他缓存队列需要等待较长时间的问题;在已缓存数据的数据量超过第一预设阈值的情况下,即该缓存队列中能够继续存储数据的存储空间不多时,数据入队速率对缓存队列是否达到最大队列长度的影响较大,此时需要考虑入队速率对缓存队列中已存储数据的影响,否则容易出现入队速率太大,出队权重小导致出队速率太小,从而数据会在缓存队列中积压,出现丢包,以及时延过大的问题,也就是说,此时综合考虑数据量和数据入队的速率对出队权重的影响,避免了只考虑队列长度导致时确定的出队权重较小导致的数据积压进而出现的丢包和时延大的问题。也就是说,能够根据缓存队列中缓存数据的实际情况灵活地配置轮询出队的权重,使得缓存队列轮询过程中出队数据量和缓存数据相适应,不会耽误其他缓存队列的数据出队过慢,即时延长,同时避免自身出队数据流过少导致数据积压,队列长度增长过快,最终产生过大的发送延迟和严重丢包的问题。
附图说明
9.一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
10.图1是本发明一实施例中提供的缓存队列的管理方法的流程图;
11.图2是本发明另一实施例中提供的电子设备的结构示意图。
具体实施方式
12.由背景技术可知,在流量整形时,采用目前的sfq方式对缓存队列进行管理存在时延长、丢包严重的问题。
13.为解决上述问题,本发明实施例提供了一种缓存队列的管理方法,包括:获取缓存情况发生变化的各缓存队列中已缓存数据的数据量;检测所述已缓存数据的数据量是否超过第一预设阈值;在所述已缓存数据的数据量超过所述第一预设阈值的情况下,获取所述缓存队列中所述已缓存数据的入队速率并根据所述已缓存数据的数据量和所述入队速率,确定对应所述缓存队列的出队权重;在所述已缓存数据的数据量未超过所述第一预设阈值的情况下,根据所述已缓存数据的数据量,确定对应所述缓存队列的所述出队权重。
14.本发明实施例提供的缓存队列的管理方法,获取缓存情况发送变化的缓存队列的已缓存数据的数据量,然后通过检测数据量是否超过第一预设阈值来判断是否需要考虑入队速率对出队权重的影响,可以理解的是,在已缓存数据的数据量未超过第一预设阈值的情况下,即该缓存队列中还有较多存储空间继续存储数据时,即使数据入队速率较大,但是缓存队列中已缓存数据也在不断出队,缓存队列基本不会达到最大队列长度,即已经较好地避免了丢包的问题,此时主要考虑已缓存数据的数据量对出队权重的影响,使得出队权重与数据量相适应,缓存队列中的缓存数据能够通过较少的出队次数就能够发送出去,减少等待其他缓存队列发送的次数,最终减少时延,避免本缓存队列的出队权重过大,一次出队的数据量过大,其他缓存队列需要等待较长时间的问题;在已缓存数据的数据量超过第一预设阈值的情况下,即该缓存队列中能够继续存储数据的存储空间不多时,数据入队速
率对缓存队列是否达到最大队列长度的影响较大,此时需要考虑入队速率对缓存队列中已存储数据的影响,否则容易出现入队速率太大,出队权重小导致出队速率太小,从而数据会在缓存队列中积压,出现丢包,以及时延过大的问题,也就是说,此时综合考虑数据量和数据入队的速率对出队权重的影响,避免了只考虑队列长度导致时确定的出队权重较小导致的数据积压进而出现的丢包和时延大的问题。也就是说,能够根据缓存队列中缓存数据的实际情况灵活地配置轮询出队的权重,使得缓存队列轮询过程中出队数据量和缓存数据相适应,不会耽误其他缓存队列的数据出队过慢,即时延长,同时避免自身出队数据流过少导致数据积压,队列长度增长过快,最终产生过大的发送延迟和严重丢包的问题。
15.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施例中,为了使读者更好地理解本发明而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本发明所要求保护的技术方案。
16.以下各个实施例的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
17.本发明实施例一方面提供了一种缓存队列的管理方法,应用于计算机、手机、服务器等电子设备。缓存队列的管理方法的流程如图1所示。
18.步骤101,获取缓存情况发生变化的各缓存队列中已缓存数据的数据量。
19.本实施例中,缓存队列主要是计算机等电子设备中用于流量整形的缓存队列,特别地,缓存队列可以是计算机等电子设备的通信出接口的缓存队列。
20.本实施例中,缓存队列的缓存情况发生变化可以包括:缓存队列中的已缓存数据出队、缓存队列中有数据入队、按照一定策略对缓存队列中的已缓存数据进行丢包处理等,当然,以上仅为具体的举例说明,缓存队列的缓存情况发生变化还可以是其他情况,此处就不再一一赘述了。
21.特别地,已缓存数据的数据量可以采用多种方式进行表示,如帧、报文、位等。
22.在一个例子中,已缓存数据的数据量表示为报文数,如缓存队列包括队列1-队列10,其中,队列1中由于已缓存数据出队导致已缓存数据的数据量由100个报文变为78个报文,队列5由于有数据新入队导致已缓存数据的数据量由35个报文变为66个报文,此种情况下,获取缓存情况发生变化的各缓存队列中已缓存数据的数据量即,获取队列1中已缓存数据的数据量为78个报文,获取队列5中已缓存数据的数据量为66个报文。
23.在另一个例子中,已缓存数据的数据量表示为字节数,如缓存队列包括队列1-队列100,其中,队列65中由于已缓存数据出队导致已缓存数据的数据量由456字节变为244字节,队列87由于有数据新入队导致已缓存数据的数据量由546字节变为658字节,队列100由于当前的已缓存数据超过其所属数据流的预设时延时间,即等待超时,触发了丢包机制,33字节的已缓存数据均被丢弃,此种情况下,获取缓存情况发生变化的各缓存队列中已缓存数据的数据量即,获取队列65中已缓存数据的数据量为244字节,获取队列87中已缓存数据的数据量为66个报文,获取队列100中已缓存数据的数据量为0字节。
24.值得一提的是,以报文数来表示以缓存数据的数据量时,会由于报文不定长,不同报文的数据大小可以不同,导致报文数不能唯一确定出数据大小,报文数相同的已缓存数据的数据大小可能不相同,进而导致发送相同报文数的已缓存数据所需的时间也相应不
同,即报文被发送前的等待时间随着一个报文的数据大小不同而不同,最终导致时延不可控,如计算机等电子设备的整形带宽为100m且所有缓存队列中的已缓存数据的数据量为1000个报文时,每个报文的长度为600字节的发送时间显然为每个报文的长度为300字节的发送时间的2倍,由此可知,同样是第100个被发送的报文,在每个报文的长度600字节时的发送时延为每个报文的长度为300字节的发送时延的2倍。而以字节数来替换报文数来表示数据量,则能够准确地确定出数据大小,避免了上述问题,从而能够准确地控制缓存队列时延,特别地,在数据量为字节数的情况下,还可以根据时延参数配置该队列长度。
25.需要说明的是,以上仅是以报文数和字节数两种情况进行举例说明,实际上,报文数可以被替换为帧数等,字节数可以替换为字数、位数等能够唯一表示数据大小的表示方式,此处就不再一一赘述了。
26.为了便于本领域技术人员更好地理解上述缓存情况发生变化的场景,以下将以数据入队为例进行说明。
27.在获取缓存情况发生变化的各缓存队列中已缓存数据的数据量之前,缓存队列的管理方法还包括:确定待缓存数据对应的缓存队列;根据待缓存数据的数据量,检测待缓存数据对应的缓存队列是否能够缓存待缓存数据;在待缓存数据对应的缓存队列不能够缓存待缓存数据的情况下,丢弃待缓存数据;在待缓存数据对应的缓存队列能够缓存待缓存数据的情况下,在对应的缓存队列中缓存待缓存数据并确定对应的缓存队列缓存情况发生变化。
28.需要说明的是,待缓存数据入队需要花费一定时间,在入队过程中,通过轮询的方式可能确定轮到待缓存数据进入的缓存队列向外发送数据,因此,为了保证得到的出队权重与实际情况实时对应,进一步减少时延、减轻丢包问题,可以设置缓存队列中每入队一个报文或数据帧等,就通过执行步骤101-步骤104更新一次出队权重以实时确定各个缓存队列的出队权重,而不需要等待待缓存数据均入队后再执行步骤101-步骤104;或者,可以在待缓存数据入队的过程中,保持对缓存队列的监测,如检测发送序列中位于待缓存数据进入的缓存队列上一发送次序的缓存队列是否正在发送数据、对发送等待时间进行预测并检测到待缓存数据进入的缓存队列发送数据的等待时间是否小于等于预设时长等,在检测到待缓存数据进入的缓存队列中的已缓存数据将要被发送的情况下,实时更新待缓存数据进入的缓存队列的出队权重,即每入队一个报文或数据帧等,就通过执行步骤101-步骤104更新一次出队权重以实时确定各个缓存队列的出队权重,直到待缓存数据进入的缓存队列停止发送数据。
29.在一个例子中,确定待缓存数据对应的缓存队列可以通过如下方式实现:确定待缓存数据的流标识信息,其中,流标识信息可以是待缓存数据所属的数据流的五元组或三元组等信息,如流标识信息可以是传输控制协议(transmission control protocol,tcp)、用户数据报协议(user datagram protocol,udp)报文、互联网控制报文协议(internet control message protocol,icmp)报文等具有端口号和协议号的报文中携带的源(internet protocol,ip)地址、目的ip地址、源端口号、目的端口号和协议号,流标识信息还可以是源ip地址和目的ip地址等;根据流标识信息、缓存队列的总数量和哈希算法,确定待缓存数据唯一对应的缓存队列,可以是在流标识信息为五元组的情况下,哈希算法可以是对五元组中的五个数据进行异或运算,然后在得到哈希值后,基于缓存队列的总数量对
哈希值进行取模运算,即得到待缓存数据入队的缓存队列的队列号,例如,缓存队列总数量为1000,哈希值为5,则确定出来的缓存队列为队列号为5的缓存队列,哈希值为1027,则确定出来的缓存队列为队列号为27的缓存队列,当然,在流标识信息为源ip地址和目的ip地址的情况下,哈希算法还可以是对源ip地址和目的ip地址进行求和,并对求和得到的值基于缓存队列总数量进行取模运算,得到哈希值,哈希值即为确定出来的待缓存数据入队的缓存队列的队列号,此处就不再一一赘述了。
30.需要说明的是,通过上述确定队列号的方式,具有相同流标识信息的待缓存数据,即同一个数据流中的数据存入同一个缓存队列,不同的缓存队列存储的是来自不同数据流的数据。
31.还需要说明的是,上述举例说明中实际是基于缓存队列已创建,待缓存数据确定进入那个缓存队列即可完成入队,实际还可以是只创建部分缓存队列,当确定出来的队列号不属于当前已创建的缓存队列的队列号时,新建一个缓存队列并将其队列号设置为通过哈希算法等确定出来的队列号。特别地,上述步骤:根据流标识信息、缓存队列的总数量和哈希算法,确定待缓存数据唯一对应的缓存队列,可以被替换为:根据流标识信息、预设的缓存队列的数量阈值和哈希算法,确定待缓存数据唯一对应的缓存队列,也就是说,此时,缓存队列总数是事先既定的,可以防止系统中流数量过多时,创建过多的队列,消耗系统内存资源,影响系统运行。
32.在另一个例子中,根据待缓存数据的数据量,检测待缓存数据对应的缓存队列是否能够缓存待缓存数据,可以通过如下方式实现:检测待缓存数据的数据量是否超过待缓存数据对应的缓存队列相应的第二预设阈值;在待缓存数据的数据量超过相应的第二预设阈值的情况下,确定待缓存数据对应的缓存队列不能够缓存待缓存数据;在待缓存数据的数据量未超过相应的第二预设阈值的情况下,检测待缓存数据的数据量与当前所有缓存队列的已缓存数据的数据量之和是否超过第三预设阈值;在超过第三预设阈值的情况下,确定待缓存数据对应的缓存队列不能够缓存待缓存数据;在未超过第三预设阈值的情况下,确定待缓存数据对应的缓存队列能够缓存待缓存数据。
33.值得一提的是,上述关于第二预设阈值和第三预设阈值的比较,实际是在现有通过缓存队列的剩余存储空间是否能够存储待缓存数据来确定待缓存数据是否入队的基础上,增加了对所有的缓存队列的可缓存数据量的判断,避免总的缓存数据过多,从而防止计算机等电子设备为了存储或处理的数据占用过多的系统资源,影响系统的工作效率的问题。
34.步骤102,检测已缓存数据的数据量是否超过第一预设阈值,若是,执行步骤103,若否,执行步骤104。
35.本实施例中,已缓存数据的数据量和第一预设阈值的表示方式相同,如已缓存数据的数据量以报文数进行表示时,第一预设阈值为报文数阈值,已缓存数据的数据量以字节数进行表示时,第一预设阈值为字节数阈值。
36.需要说明的是,第一预设阈值可以是根据经验设置的一固定值,还可以是一个与计算机、服务器等电子设备系统资源、运行状态等的变化情况相关的动态值,当然,第一预设阈值还可以是与已缓存数据的入队、出队情况的变化相关的动态值,此处就不再一一赘述了。
37.还需要说明的是,各个缓存队列的第一预设阈值可以相同,也可以不同,主要视实际情况而定,例如,已缓存数据的入队速率较高时,该已缓存数据对应的第一预设阈值可以设置一个较小值,使得已缓存数据所在的缓存队列对应的出队权重尽量根据已缓存数据的入队速率和数据量进行确定,以避免入队速率过高导致数据积压在缓存队列中容易出现丢包的问题;类似地,已缓存数据的入队速率较低时,该已缓存数据对应的第一预设阈值可以设置一个较大值。
38.步骤103,获取缓存队列中已缓存数据的入队速率并根据已缓存数据的数据量和入队速率,确定对应缓存队列的出队权重。
39.本实施例中,出队权重与入队速率正相关,出队权重与已缓存数据的数据量正相关。
40.在一个例子中,已缓存数据的数据量和入队速率分别与出队权重成正比例相关,如出队权重k=k1*s1 k2*v1 c1,其中,s1为已缓存数据的数据量,v1为已缓存数据的入队速率,k1、k2和c1均为预设值;或者,出队权重
41.其中,s2为已缓存数据的数据量,v2为已缓存数据的入队速率,k3、k4、k5、k6、k7、k8、k9、k10、c2、c3、c4和c5均为预设值。
42.当然,以上仅为具体的举例说明,在其他例子中,出队权重与已缓存数据的数据量和入队速率之间的具体关系还可以是非线性的正相关关系,此处就不再一一赘述了。
43.本实施例中,获取缓存队列中已缓存数据的入队速率之前,缓存队列的管理方法还包括:按照预设周期,周期性获取各缓存队列中实际待缓存数据的累加数据量,其中,预设周期可以根据实际需求进行设置,如当待缓存数据的入队速率较大时,周期可以设置较短的时间如100毫秒,当待缓存数据的入队速率较小时,周期可以设置相对较长的时间如200毫秒。从而获取缓存队列中已缓存数据的入队速率可以通过如下方式实现:根据预设周期和历史获取的累加数据量,确定对应的缓存队列的入队速率,如第3次记录到的累加数据量为m1字节数,第4次记录到的累加字节数为m2字节数,周期为t,则入队速率v=(m1-m2)/t;第7次到第12次记录到的累加数据量分别为m3字节数-m8字节数,周期为t',则入队速率v'=[(m8-m5)/3t' (m7-m4)/3t' (m6-m3)/3t']/3=(m8 m7 m6-m5-m4-m3)/9t'。
[0044]
可以理解的是,计算机等电子设备在统计累加数据量时,实际对应的统计时刻可能存在偏差,因此,为了进一步提高得到的入队速率的准确性,还可以在记录累加数据量时,实时记录下当前时刻,从而根据记录的时刻和累加数据量计算入队速率,此处就不再一一赘述了。
[0045]
还可以理解的是,通过执行步骤101-步骤104,实现了对缓存情况发生变化的各缓存队列的出队权重的更新,其他缓存情况未发生变化的各缓存队列保持上一次确定出来的出队权重不变,即所有缓存队列的出队权重均确定出来了,因此,可以根据各个缓存队列当前的出队权重向外发送数据,实现流量整形,即确定对应缓存队列的出队权重之后,缓存队列的管理方法还包括:根据各缓存队列对应的出队权重,确定各缓存队列对应的出队数据
量;从各缓存队列中以对应的出队带宽向外发送已缓存数据,即按照一定次序依次选定一个缓存队列向外发送数据,每个缓存队列发送其对应的出队数据量,一个缓存队列发送完成,下一个缓存队列开始发送,从而实现循环发送数据。较佳地,出队次序也可以根据权重来确定发送顺序,权重较大的优先发送,如此可实现优先清空缓存压力大的缓存队列,从而减小对入队侧的影响,降低丢包概率。
[0046]
进一步地,从各缓存队列中以对应的出队带宽向外发送已缓存数据之后,缓存队列的管理方法还包括:在至少一个缓存队列中的已缓存数据完成发送的情况下,确定对应的缓存队列缓存情况发生变化,从而触发执行步骤101-104的流程,实现对已缓存数据被发送的缓存队列的出队权重进行更新。特别地,与前述的数据入队过程类似,确定相应缓存队列的缓存情况发送变化还可以是每向外发送一个报文或数据帧等,就更新一次出队权重等,此处就不再一一赘述了。
[0047]
步骤104,根据已缓存数据的数据量,确定对应缓存队列的出队权重。
[0048]
本实施例中,出队权重与已缓存数据的数据量正相关,与步骤103的说明大致相同,此处就不再一一赘述了。
[0049]
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
[0050]
本发明实施例另一方面还提供了一种电子设备,如图2所示,包括:至少一个处理器201;以及,与至少一个处理器201通信连接的存储器202;其中,存储器202存储有可被至少一个处理器201执行的指令,指令被至少一个处理器201执行,以使至少一个处理器201能够执行上述任一方法实施例所描述的缓存队列的管理方法。
[0051]
其中,存储器202和处理器201采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器201和存储器202的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器201处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传输给处理器201。
[0052]
处理器201负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器202可以被用于存储处理器201在执行操作时所使用的数据。
[0053]
本发明实施方式另一方面还提供了一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述任一方法实施例所描述的缓存队列的管理方法。
[0054]
即,本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程
序代码的介质。
[0055]
本领域的普通技术人员可以理解,上述各实施例是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献