缓存调整方法及装置的制作方法

文档序号:7863802阅读:147来源:国知局
专利名称:缓存调整方法及装置的制作方法
技术领域
本发明涉及通信领域,尤其涉及一种缓存调整方法及装置。
背景技术
在通信系统中,设备通常具有多个出口,而且每个出口的速率是可变的(如以太网口、低速的同步串口等),在报文从设备的入口进入后,会分发到该设备的多个速率不同的出口而发送出去。当报文从设备入口进入后,缓存到一个出口对应的缓存队列中,如果该出口缓存队列中的报文达到一定数量时,新发往该出口的报文将被丢弃。在确定每个出口对应的缓存队列大小时,需要考虑该设备的总缓存量以及该设备中出口的数量、各出口的出口速率以及不同出口的优先级等。通常在设备初始化时会配置每个出口缓存队列大小,且以后不再改变。如果出口缓存队列配置得太小,在有数据突发时,会造成大量丢包,影响整体性能;如果出口缓存队列配置得太大,则会占用更多缓存,这会增加设备硬件成本。当出口的出口速率为低速且是传输语音之类对延迟要求较高的业务时,如果该出口的缓存空间太大的话会增加数据传输延迟,使得该出口的缓存队列的尾部数据经常需要超时重传,浪费了入口有效带宽以及缓存空间。现有动态调整缓存的技术是检测设备每个出口处报文的驻留时长,对于设备中每个出口来说,当存在每个出口出口处报文的驻留时长超过预设驻留时长阈值的报文时,则从该出口对应的缓存队列中删除驻留时长超过预设驻留时长阈值的报文,释放已删除的报文占用的缓存,并将因释放共享缓存而节省出来的缓存给其它出口使用。发明人在实现本发明的过程中发现,现有技术至少存在以下缺陷只是给出了每个出口释放共享缓存的条件,并未给出如何分配释放出的缓存,因而不能实现对于有多个出口的设备中,在缓存总量不变的前提下,如何为多个出口动态地调整缓存空间。因此现有技术存在设备缓存利用率不高的问题。

发明内容
本发明实施例提供一种缓存调整方法及装置,能够对于有多个出口的设备,在缓存总量不变的前提下,根据每个出口当前实际速率自动调整出口缓存队列深度,实现为多个出口动态地调整缓存空间。第一方面,提供一种缓存调整方法,包括根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值;根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值;检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。
在所述第一方面的第一种可能的实现方式中,所述根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值,包括将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数;针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。在所述第一方面的第二种可能的实现方式中,所述检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,包括检测设备中每个出口的当前实际速率,若当前实际速率高于该出口的预定出口速率,判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值;若是,按照所述固定步长从动态缓存中为该出口分配缓存。在所述第一方面的第二种可能的实现方式中,还提供了所述第一方面的第三种可能的实现方式,若当前实际速率低于该出口的预定出口速率,根据该出口当前实际速率计算该出口实际所需的缓存值;判断所述出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值;若大于该出口对应的缓存队列的初始值,则在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用的情况下,将所述部分空间释放给动态缓存;若不大于该出口对应的缓存队列的初始值,则在所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述对应的缓存队列的初始值的部分空间未占用的情况下,将所述部分空间释放给动态缓存。在所述第一方面或所述第一方面的前述任意一种可能的实现方式中,还提供了所述第一方面的第四种可能的实现方式,所述动态缓存是所述确定每个出口对应的缓存队列的初始值之后,计算设备中所有出口对应的缓存队列的初始值之和,将设备总缓存值减去所述所有出口对应的缓存队列的初始值之和得到的。第二方面,提供了一种缓存调整装置,包括第一确定单元,用于根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值;第二确定单元,用于根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值;分配单元,用于检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。
在所述第二方面的第一种可能的实现方式中,所述第一确定单元包括第一计算子单元,用于将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数;确定子单元,用于针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。在所述第二方面的第二种可能的实现方式中,所述分配单元,包括检测子单元,用于检测设备中每个出口的当前实际速率;第一判断子单元,用于当所述检测子单元检测到的设备中每个出口的当前实际速率高于该出口的预定出口速率时,判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值;分配子单元,用于当所述第一判断子单元的判断结果为是时,按照所述固定步长从动态缓存中为该出口分配缓存。在所述第二方面的第二种可能的实现方式中,还提供了所述第二发面的第三种可能的实现方式,所述装置还包括第二计算子单元,用于当所述检测子单元检测到的设备中每个出口的当前实际速率低于该出口的预定出口速率时,根据该出口当前实际速率计算该出口实际所需的缓存值;第二判断子单元,用于判断所述第二计算子单元计算得到的出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值;第一处理子单元,用于当所述第二判断子单元的判断结果为是时,在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用的情况下,将所述部分空间释放给动态缓存;第二处理子单元,用于当所述第二判断子单元的判断结果为否时,在所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述对应的缓存队列的初始值的部分空间未占用的情况下,将所述部分空间释放给动态缓存。第三方面,提供了一种设备,包括至少两个出口、以及存储器和处理器,其中所述存储器,用于被配置存储代码;所述处理器,用于被配置读取所述存储器中存储的代码,执行上述第一方面、或第一方面的任意一种可能的实现方式所述的方法。通过上述描述可知,本发明实施例在动态调整缓存的技术中利用了设备中每个出口的当前实际速率自动调整出口缓存队列深度,以实现为多个出口动态地调整缓存空间。由于对于有多个出口的设备来说,在缓存总量不变的前提下,可根据每个出口当前实际速率自动调整出口缓存队列深度。因此,本发明实施例利用每个出口当前实际速率自动调整出口缓存队列深度,可以实现为多个出口动态地调整缓存空间,从而提高缓存利用率和整体性能。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I是本发明实施例提供的缓存调整方法的流程示意图;图2是本发明实施例提供的一个确定设备中每个出口对应的缓存队列的初始值的详细实例的流程图;图3是本发明实施例提供的根据每个出口的实际速率,动态调整各出口缓存的方案的流程图;图4是本发明实施例给出了计算动态缓存的大小的方案的流程·
图5是本发明实施例提供的一种缓存调整装置的结构示意图;图6是本发明实施例中第一确定单元的结构示意图;图7是本发明实施例中分配单元的结构示意图;图8是本发明实施例中分配单元另一结构示意图;图9是本发明实施例中第一确定单元另一结构示意图;图10是本发明实施例提供的一种设备的结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。参见图1,是本发明实施例的缓存调整方法的第一实施例的流程示意图,所述方法包括101,根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值。在通信系统中,设备通常具有多个速率可变的出口,每个出口处有一个出口缓存队列,当报文从设备入口进入后,缓存到出口对应的缓存队列中等待通过出口发送出去。通过设置的系统速率精度和设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值,其中,系统速率精度是指能检测的速率最小单位,例如O. I兆字节/秒,设备中每个出口的速率是该出口的工作速率且该出口的速率必须是系统速率精度的整数倍,比如系统速率精度假设为O. 1M/S,出口支持的速率2. ΙΜ/s是O. ΙΜ/s的整数倍。具体的,根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值,包括将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数;针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。可选地,在根据所述系统速率精度计算得到系统速率精度下的缓存数后,当判断该系统速率精度下的缓存数小于设置的最小缓存数时,就需要改变速率精度,并依据改变后的速率精度重新计算该速率精度下的缓存数,例如适当增加系统速率精度。本实施例中根据设置的系统速率精度计算得到该系统速率精度下的缓存数,并判断该系统速率精度下的缓存数是否小于预置的该出口的最小缓存数。若是,则调整系统速率精度并计算调整后的系统速率精度下的缓存数。若否,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。102,根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值。具体的,根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值,即针对每个出口,将该出口的预定出口速率乘以系统速率精度每秒发送的缓存数据再乘以该出口的预先设定的最大时延值的乘积,作为该出口对应的缓存队列的最大缓存值。举例,假设设备所有出口可用的总缓存数为150000个单元,出口数为4个,系统速率精度为lM/s,且IM速率每秒可以发送125个缓存数据,设备中每个出口的预定出口速率为1G、100M、10M、2M。假设设备中每个出口要求的最大时延值分别为ls、2s、2s、4s。在设备的出口的缓存队列不为空,指示这个出口有数据需要发送时,以IM的系统速率精度为单位检测每个出口的预定出口速率,并根据每个出口的预定出口速率乘以IM速率每秒发送的缓存数乘以最大时延值,可以得到上述4个出口对应的缓存队列的最大缓存值分别为125000 个、25000 个、2500 个、1000 个。103,检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。具体的,由于设备中每个出口具有多个可变速率,需要检测设备中每个出口的当前实际速率,在检测到设备中每个出口的当前实际速率高于该出口的预定出口速率时,需要从动态缓存中为该出口分配缓存,否则当出口的缓存队列中数据达到该出口对应的缓存队列的初始值后,如果不增加当前出口的缓存队列的缓存值,再来数据就会被丢弃,因此还需要判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值,若是,按照所述固定步长从动态缓存中为该出口分配缓存,这是为了确保分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值。可选地,所述固定步长可以为I个或多个所述系统速率精度下的缓存数,即为所述系统速率精度下的缓存数的整数倍。其中所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。举例,假设设备中一个出口的预定出口速率为2M,则该出口对应的缓存队列的初始值为24。在检测到该出口的当前实际速率为10M,如果不增加当前出口的缓存队列的缓存值,再来数据就会被丢弃,因此可以从动态缓存中为该出口分配缓存,以便可以继续发送
8数据。本发明实施例是根据设备中每个出口的预定出口速率和最大时延值,分别确定每个出口对应的缓存队列的初始值和最大缓存值,当检测设备中每个出口的当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,即利用每个出口当前实际速率自动调整出口缓存队列深度,这样对于有多个出口的设备来说,在缓存总量不变的前提下,实现为多个出口动态地调整缓存空间,从而提高缓存利用率和整体性能。
参见图2,本实施例给出了一个确定设备中每个出口对应的缓存队列的初始值的详细实例,包括201,将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数。具体的,本发明实施例中设备所有出口可用的缓存数是固定的,假设设备中所有出口可用的缓存数为150000个,出口数为4个,每个出口对应一个出口缓存队列,系统速率精度为1M。每个出口的速率分别为1G、100M、10M、2M,设置每个出口的最小缓存数,比如为10个单元,用以保证每个出口都可以正常转发。在确定设备所有出口可用的缓存数为150000个单元后,按照一定的比例将设备所有出口可用的缓存总量用于分配的固定缓存数,如1/3的比例,则用于分配的固定缓存数为50000个。根据设备中预设的系统速率精度和用于分配的固定缓存数以及出口数,可以得到所述系统速率精度下的缓存数,即将用于分配的固定缓存数除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数,比如当系统速率精度为IM时,可以得到该系统速率精度下的缓存数为(150000/3)/4000 = 12。202,针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。具体的,在将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数后,针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,可以得到该出口对应的缓存队列的初始值,比如根据预置的系统速率精度为1M,以及该系统速率精度下的缓存数12,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,可以得到该出口对应的缓存队列的初始值为12000、1200、120、24。本发明实施例中根据设备中预置的系统速率精度和用于分配的固定缓存数以及出口数,将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数。针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的出口的最小缓存数时,进一步将所述系统速率精度下的缓存数乘以该出口的预定出口速率,可以得到该出口对应的缓存队列的初始值。参见图3,本实施例给出了根据每个出口的实际速率,动态调整各出口缓存的详细流程,包括301,检测设备中每个出口的当前实际速率。具体的,设备的每个出口有一个对应的缓存队列,在出口的缓存队列不空指示这个出口有数据需要发送时,通过检测该出口一段时间,比如I秒内发送的字节数来实时检CN 102916903 A



7/13 页
测出口当前实际速率。若设备的出口的缓存队列为空,指示这个出口当前没有数据需要发送时,就不能通过检测该出口一段时间内发送的字节数来计算该出口当前的实际出口速率了,则可以确认该次检测的出口当前的实际出口速率使用了满速率,比如上述设置4个出口的速率 1G、100M、10M、2M。302,对于每个出口,判断检测出的该出口的实际速率是否高于该出口的预定出口速率,若是,进入303,否则进入304。具体的,检测每个出口的当前实际速率,并根据检测到的当前实际速率计算该出口对应的缓存队列需要提供的缓存值,即将所述系统速率精度下的缓存数乘以该出口的当前实际速率可以得到该出口实际所需的缓存值。如果检测到的出口的当前实际速率高于该出口的预定出口速率,则该出口对应的缓存队列实际所需的缓存值超过该出口对应的缓存队列的初始值,在出口缓存队列中数据到达原队列深度时,需要增加队列深度,进入步骤303,如果检测到的出口的当前实际速率低于该出口的预定出口速率,则该出口对应的缓存队列实际所需的缓存值低于该出口对应的缓存队列的初始值,进入步骤304。303,判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值,若是进入305,否则进入306。具体的,在检测到设备中每个出口的当前实际速率高于该出口的预定出口速率时,需要从动态缓存中为该出口分配缓存,因为当出口的缓存队列中数据达到该出口对应的缓存队列的初始值后,如果不增加当前出口的缓存队列的缓存值的话,再来数据就会被丢弃。为了确保分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,需要判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值,若是,进入步骤305,否则进入步骤306。304,计算该出口实际所需的缓存值,并判断该出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值,若是进入307,否则进入308。具体的,当检测到设备中每个出口的当前实际速率低于该出口的预定出口速率时,需要根据检测到的设备中每个出口当前实际速率计算该出口实际所需的缓存值,并进一步判断所述出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值,若是,进入步骤307,否则,进入步骤308。305,按照所述固定步长从动态缓存中为该出口分配缓存。具体的,在分配缓存后该出口对应的缓存队列当前缓存值与固定步长之和小于或者等于该出口的最大缓存值时,按照固定步长从动态缓存中为该出口分配缓存,增加该出口对应的缓存队列的缓存值,以便再来数据不会被丢弃。可选地所述固定步长可以为系统速率精度下的缓存数的整数倍,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值,以确保分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值。306,停止按照固定步长从动态缓存值中为该出口分配缓存。具体的,在分配缓存后该出口对应的缓存队列当前缓存值与固定步长之和大于该出口的最大缓存值时,停止按照固定步长从动态缓存值中为该出口分配缓存。307,若大于该出口对应的缓存队列的初始值,在出口对应的缓存队列中超出所述
10出口实际所需的缓存值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用的情况下,将所述部分空间释放给动态缓存。具体的,在判断出口实际所需的缓存值大于该出口对应的缓存队列的初始值时,表明所述出口对应的缓存队列中超出所述出口实际所需的缓存值之间的部分空间是多余部分,可以释放出来供其他出口使用,需要进一步判断所述出口对应的缓存队列中超出所述出口实际所需的缓存值之间的部分空间是否已被占用,若是,则已占用的空间继续占用出口,并在发送完数据后,将所述出口对应的缓存队列中超出所述出口需要的缓存的部分空间释放给动态缓存。若否,将所述出口对应的缓存队列中超出所述出口需要的缓存的部分空间释放给动态缓存,其中,所述未占用的空间是允许该出口用,但还没申请使用的空间,这部分空间还在共享的动态缓存中,申请后才真正被该出口占有,这类空间释放后,就不会被该出口申请,可以给其它出口使用。实现了对于有多个出口的设备,在缓存总量不变的前提下,根据检测得到的设备中每个出口当前实际速率自动调整出口缓存队列深度。308,若不大于该出口对应的缓存队列的初始值,在出口对应的缓存队列中超出该·出口对应的缓存队列的初始值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在出口对应的缓存队列中超出出口对应的缓存队列的初始值的部分空间未占用的情况下,将所述部分空间释放给动态缓存。具体的,在判断所述出口实际所需的缓存值不大于该出口对应的缓存队列的初始值时,表明所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值之间的部分空间是多余部分,可以释放出来供其他出口使用,需要进一步判断所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值之间的部分空间是否已被占用,若是,已占用的空间继续占用出口,并在发送完数据后,将所述出口对应的缓存队列中超出所述出口对应的缓存队列的初始值之间的部分空间释放给动态缓存。若否,将所述出口对应的缓存队列中超出所述出口对应的缓存队列的初始值的部分空间释放给动态缓存。本发明实施例中对于有多个出口的设备,在缓存总量不变的前提下,检测设备中每个出口的当前实际速率,并根据检测的设备中每个出口的当前实际速率自动调整出口缓存队列深度来实现共享动态缓存,可以处理某一出口的突发流量及出口拥塞,又不会影响其它出口的正常业务,不损失入口带宽,从而提高缓存利用率和整体性能。参见图4,本实施例给出了计算动态缓存的大小的详细流程,包括401,计算设备中所有出口对应的缓存队列的初始值之和。具体的,在附图I的步骤101中,按照以下方式计算各出口对应的缓存队列的初始值根据设备中预置的系统速率精度和用于分配的固定缓存数以及出口数,计算得到所述系统速率精度下的缓存数,在所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。然后,进一步计算设备中所有出口对应的缓存队列的初始值之和,以便通过设备总缓存值减去所述计算得到的设备中所有出口对应的缓存队列的初始值之和,得到动态缓存的大小。402,将设备总缓存值减去所述计算得到的设备中所有出口对应的缓存队列的初CN 102916903 A



9/13 页
始值之和,得到动态缓存的大小。具体的,在计算得到设备中所有出口对应的缓存队列的初始值之和后,将设备总缓存值减去所述计算得到的设备中所有出口对应的缓存队列的初始值之和,得到动态缓存的大小,以将动态缓存作为共享的缓存,对于有多个出口的设备,在缓存总量不变的前提下,根据检测得到的设备中每个出口的当前实际速率自动调整出口缓存队列深度来实现共`享动态缓存,当检测设备中每个出口的当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存。当检测设备中每个出口的当前实际速率低于该出口的预先设出口速率,根据该出口当前实际速率计算该出口实际所需的缓存值,并进一步判断所述出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值;若是,则在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用的情况下,将所述部分空间释放给动态缓存;若不大于该出口对应的缓存队列的初始值,则在所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述对应的缓存队列的初始值的部分空间未占用的情况下,将所述部分空间释放给动态缓存。本发明实施例在计算得到设备中所有出口对应的缓存队列的初始值之和后,通过设备总缓存值减去所述计算得到的设备中所有出口对应的缓存队列的初始值之和,得到动态缓存的大小,并将动态缓存作为共享的缓存,以实现根据检测得到的设备中每个出口的当前实际速率自动调整出口缓存队列深度来实现共享动态缓存,解决了在缓存总量不变的前提下,如何为多个出口动态地调整缓存空间的问题。参见图5,本发明实施例提供的一种缓存调整装置,所述装置包括第一确定单元501,用于根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值。具体地,在通信系统中,设备通常具有多个速率是可变的出口,每个出口处有一个出口缓存队列,当报文从设备入口进入后,缓存到出口对应的缓存队列中等待通过出口发送出去。第一确定单元501根据设置的系统速率精度和设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值,其中,系统速率精度是指能检测的速率最小单位,设备中每个出口的速率是该出口的工作速率且该出口的速率必须是系统速率精度的整数倍。可选地,在根据所述系统速率精度计算得到系统速率精度下的缓存数后,当判断该系统速率精度下的缓存数小于设置的最小缓存数时,就需要改变速率精度,并依据改变后的速率精度重新计算该速率精度下的缓存数。第二确定单元502,用于根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值。具体的,第二确定单元502根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值,即将每个出口的预定出口速率乘以系统速率精度每秒发送的缓存数乘最大时延值的乘积,作为每个出口对应的缓存队列的最大缓存值。分配单元503,用于检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,分配缓存后该出口对应的缓存
12队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。具体的,由于设备中每个出口具有多个可变速率,需要检测设备中每个出口的当前实际速率,在检测到设备中每个出口的当前实际速率高于该出口的预定出口速率时,需要从动态缓存中为该出口分配缓存,否则当出口的缓存队列中数据达到该出口对应的缓存队列的初始值后,如果不增加当前出口的缓存队列的缓存值,再来数据就会被丢弃,因此还需要判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值,若是,分配单元503按照固定步长从动态缓存中为该出口分配缓存,这是为了确保分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。本发明实施例中的第一确定单元501和第二确定单元502根据设备中每个出口的预定出口速率和最大时延值,分别确定每个出口对应的缓存队列的初始值和最大缓存值,当检测设备中每个出口的当前实际速率高于该出口预先设定的出口速率时,分配单元503从动态缓存中为该出口分配缓存,即利用每个出口当前实际速率自动调整出口缓存队列深度,这样对于有多个出口的设备来说,在缓存总量不变的前提下,实现为多个出口动态地调整缓存空间,从而提高缓存利用率和整体性能。·可选地,参见图6,所述第一确定单元501包括第一计算子单元601,用于将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数。具体的,所述第一计算子单元601,确定所述系统速率精度下的缓存数的详细过程参照方法实施例2中的描述。确定子单元602,用于针对每个出口,当所述第一计算子单元601计算的系统速率精度下的缓存数大于或者等于预置的出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。具体的,所述确定子单元602,确定每个出口对应的缓存队列的初始值的详细过程参照方法实施例2中的描述。本发明实施例中第一计算子单元601根据设备中预置的系统速率精度和用于分配的固定缓存数以及出口数,计算得到所述系统速率精度下的缓存数。针对每个出口,当所述第一计算子单元601计算的系统速率精度下的缓存数大于或者等于预置的出口的最小缓存数时,确定子单元602将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。可选地,参见图7,分配单元503包括检测子单元701,用于检测设备中每个出口的当前实际速率。具体的,对于有多个出口的设备来说,设备中的每个出口的速率是可变,需要检测设备中每个出口的当前实际速率,在出口的缓存队列不空指示这个出口有数据需要发送时,通过检测子单元701检测该出口一段时间发送的字节数来实时检测出口当前实际速率,若设备的出口的缓存队列为空,指示这个出口当前没有数据需要发送时,检测子单元701就不能通过检测该出口一段时间内发送的字节数来计算该出口当前的实际出口速率了,则可以判断该次检测的出口当前的实际出口速率使用了满速率,比如上述设置4个出口的速率 1G、100M、10M、2M。第一判断子单元702,用于当所述检测子单元701检测到的设备中每个出口的当前实际速率高于该出口的预定出口速率时,判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值;具体的,在检测子单元701检测到设备中每个出口的当前实际速率高于该出口的预定出口速率时,需要从动态缓存中为该出口分配缓存,因为当出口的缓存队列中数据达到该出口对应的缓存队列的初始值后,如果不增加当前出口的缓存队列的缓存值的话,再来数据就会被丢弃。为了确保分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值。分配子单元703,用于当所述第一判断子单元701的判断结果为是时,按照所述固定步长从动态缓存中为该出口分配缓存。具体的,当所述第一判断子单元701判断该出口对应的缓存队列的当前缓存值与固定步长之和小于该出口的最大缓存值时,分配子单元703按照固定步长从动态缓存中为该出口分配缓存,增加当前出口的缓存队列的缓存值,以便再来数据不会被丢弃,分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值。实现了对于有多个出口的设备,在缓存总量不变的前提下,根据检测设备中每个出口的当前实际速率自动调整出口缓存队列深度。本发明实施例中当检测子单元701检测设备中每个出口的当前实际速率高于该出口的预定出口速率,第一判断子单元702进一步判断该出口对应的缓存队列的当前缓存值与固定步长之和小于该出口的最大缓存值时,分配子单元703按照固定步长从动态缓存中为该出口分配缓存,利用每个出口当前实际速率自动调整出口缓存队列深度,实现为多个出口动态地调整缓存空间,从而提高缓存利用率和整体性能。可选地,参见图8,所述分配单元503还包括第二计算子单元804,用于当所述检测子单元701检测到的设备中每个出口的当前实际速率低于该出口的预定出口速率时,根据该出口当前实际速率计算该出口实际所需的缓存值。具体的,当检测子单元701检测到设备中每个出口的当前实际速率低于该出口的预定出口速率时,第二计算子单元804根据检测到的设备中每个出口的当前实际速率计算该出口实际所需的缓存值,以便第二判断子单元805判断所述第二计算子单元804计算得到的出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值。第二判断子单元805,用于判断所述第二计算子单元804计算得到的出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值。第一处理子单元806,用于当所述第二判断子单元805的判断结果为是时,在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用的情况下,将所述部分空间释放给动态缓存。具体的,当第二判断子单元805判断所述出口实际所需的缓存值大于该出口对应的缓存队列的初始值时,表明所述出口对应的缓存队列中超出所述出口实际所需的缓存值之间的部分空间是多余部分,可以释放出来供其他出口使用,第一处理子单元806判断所述出口对应的缓存队列中超出所述出口实际所需的缓存值之间的部分空间是否已被占用,若判断所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间是否已被占用时,已占用的空间继续占用出口,并在发送完数据后,将所述空间释放给动态缓存。若第一处理子单元806判断所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用时,将所述部分空间释放给动态缓存,其中,所述未占用的空间是允许该出口用,但还没申请使用的空间,这部分空间还在共享的动态缓存中,申请后才真正被该出口占有,这类空间释放后,就不会被该出口申请,可以给其它出口使用。第二处理子单元807,用于当所述第二判断子单元805的判断结果为否时,在所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间已被占用的情况下,在发送完数据后,将所述空间释放给动态缓存;在所述出口对应的缓存队列中超出所述对应的缓存队列的初始值的部分空间未占用的情况下,将所述空间释放给动态缓存。具体的,当第二判断子单元805判断所述出口实际所需的缓存值不大于该出口对应的缓存队列的初始值时,表明所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值之间部分空间是多余部分,第二处理子单元807需要进一步判断出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值之间的部分空间是否已被占用,若判断出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间已被占用时,已占用的空间继续占用出口,并在发送完数据后,将所述空间释放给动态缓存。若第二处理子单元807判断出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间未占用时,将所述空间释放给动态缓存。可选地,参见图9,所述第一确定单元501还包括第三计算子单元903,用于计算设备中所有出口对应的缓存队列的初始值之和。具体的,在确定子单元602在第一计算子单元601确定的系统速率精度下的缓存数大于或者等于预置的出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值,第三计算子单元903根据确定子单元602确定的设备中所有出口对应的缓存队列的初始值,计算得到设备中所有出口对应的缓存队列的初始值之和。
获取子单元904,用于将设备总缓存值减去所述第三计算子单元计算得到的设备中所有出口对应的缓存队列的初始值之和,得到动态缓存的大小。具体的,在第三计算子单元903计算得到设备中所有出口对应的缓存队列的初始值之和后,获取子单元904将设备总缓存值减去所述第三计算子单元903计算可得到的设备中所有出口对应的缓存队列的初始值之和,可得到动态缓存的大小。本发明实施例在第三计算子单元903计算获取设备中所有出口对应的缓存队列的初始值之和后,获取子单元904通过设备总缓存值减去所述第三计算子单元903计算得到的设备中所有出口对应的缓存队列的初始值之和,得到动态缓存的大小,并基于出口当前实际速率自动调整出口的缓存队列深度来实现共享动态缓存,解决了现有具有多个速率可变的出口设备内存利用率不高、整体性能不高等问题。参见图10,本发明实施例还提供了一种设备,该设备包括至少两个出口、以及存储器和处理器,其中所述存储器被配置存储代码;所述处理器被配置读取所述存储器中存储的代码,执行方法实施例中的各个步骤,请参考图I、图2、图3和图4,以及方法实施例中的描述,在这里不再重复。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
1权利要求
1.一种缓存调整方法,其特征在于,包括根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值;根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值;检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。
2.如权利要求I所述的方法,其特征在于,所述根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值,包括将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数;针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。
3.如权利要I所述的方法,其特征在于,所述检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,包括检测设备中每个出口的当前实际速率,若当前实际速率高于该出口的预定出口速率,判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值;若是,按照所述固定步长从动态缓存中为该出口分配缓存。
4.如权利要求3所述的方法,其特征在于,还包括若当前实际速率低于该出口的预定出口速率,根据该出口当前实际速率计算该出口实际所需的缓存值;判断所述出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值;若大于该出口对应的缓存队列的初始值,则在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用的情况下,将所述部分空间释放给动态缓存;若不大于该出口对应的缓存队列的初始值,则在所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述对应的缓存队列的初始值的部分空间未占用的情况下,将所述部分空间释放给动态缓存。
5.如权利要求I至4中任一所述的方法,其特征在于,所述动态缓存是所述确定每个出口对应的缓存队列的初始值之后,计算设备中所有出口对应的缓存队列的初始值之和,将设备总缓存值减去所述所有出口对应的缓存队列的初始值之和得到的。
6.一种缓存调整装置,其特征在于,包括第一确定单元,用于根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值;第二确定单元,用于根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值; 分配单元,用于检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。
7.如权利要求6所述的装置,其特征在于,所述第一确定单元包括 第一计算子单元,用于将用于分配的固定缓存值除以预设系统速率精度与出口数的乘积得到的结果,作为所述系统速率精度下的缓存数; 确定子单元,用于针对每个出口,当所述系统速率精度下的缓存数大于或等于预置的该出口的最小缓存数时,将所述系统速率精度下的缓存数乘以该出口的预定出口速率,得到该出口对应的缓存队列的初始值。
8.如权利要求6所述的装置,其特征在于,所述分配单元包括 检测子单元,用于检测设备中每个出口的当前实际速率; 第一判断子单元,用于当所述检测子单元检测到的设备中每个出口的当前实际速率高于该出口的预定出口速率时,判断该出口对应的缓存队列的当前缓存值与固定步长之和是否小于该出口的最大缓存值; 分配子单元,用于当所述第一判断子单元的判断结果为是时,按照所述固定步长从动态缓存中为该出口分配缓存。
9.如权利要求8所述的装置,其特征在于,所述分配单元还包括 第二计算子单元,用于当所述检测子单元检测到的设备中每个出口的当前实际速率低于该出口的预定出口速率时,根据该出口当前实际速率计算该出口实际所需的缓存值; 第二判断子单元,用于判断所述第二计算子单元计算得到的出口实际所需的缓存值是否大于该出口对应的缓存队列的初始值; 第一处理子单元,用于当所述第二判断子单元的判断结果为是时,在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述出口实际所需的缓存值的部分空间未占用的情况下,将所述部分空间释放给动态缓存; 第二处理子单元,用于当所述第二判断子单元的判断结果为否时,在所述出口对应的缓存队列中超出所述该出口对应的缓存队列的初始值的部分空间已被占用的情况下,在发送完数据后,将所述部分空间释放给动态缓存;在所述出口对应的缓存队列中超出所述对应的缓存队列的初始值间的部分空间未占用的情况下,将所述部分空间释放给动态缓存。
10.一种设备,其特征在于包括至少两个出口、以及存储器和处理器,其中 所述存储器被配置存储代码; 所述处理器被配置读取所述存储器中存储的代码,执行如权利要求1-4任一所述的方法。
全文摘要
本发明实施例公开了一种缓存调整方法,包括根据设备中每个出口的预定出口速率,确定每个出口对应的缓存队列的初始值;根据每个出口的预先设定的最大时延值,确定每个出口对应的缓存队列的最大缓存值;检测设备中每个出口的当前实际速率,在当前实际速率高于该出口的预定出口速率时,从动态缓存中为该出口分配缓存,分配缓存后该出口对应的缓存队列的缓存值小于或等于该出口的最大缓存值,所述动态缓存的大小不大于设备总缓存值减去所有出口对应的缓存队列的初始值之和得到的差值。采用本发明,对有多个出口的设备,在缓存总量不变的前提下,根据每个出口当前实际速率自动调整出口缓存队列深度,实现为多个出口动态地调整缓存空间。
文档编号H04L12/861GK102916903SQ20121041198
公开日2013年2月6日 申请日期2012年10月25日 优先权日2012年10月25日
发明者曹学成 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1