专利名称:调整接口接收队列长度的方法及装置的制作方法
技术领域:
本发明涉及数据接收技术领域,具体涉及调整接口接收队列长度的方法及装置。
背景技术:
中低端路由器的显著特色是接口种类丰富、接口速率千差万别、实际应用场景复杂。路由器各接口都存在报文接收队列,该队列的核心功能是为硬件提供报文缓冲区,是路由器存储转发的核心部件,该队列的长短直接决定了报文的缓冲能力,队列太短会造成接口经常性的丢包事件发生,队列太长会造成不必要的内存浪费。对于中低端路由器丰富多样的接口来说,由于接口速率不同,接口的队列长度也需要区别定制,从而使问题进一步复杂化;同时,由于具体应用场景的千差万别,也导致固定长度的接口队列适应性极差。目前实现中,路由器各接口的队列长度,基本是根据接口速率和历史经验进行定制,该定制值在设备启动后是不能动态更改的。图1为路由器接口接收报文的处理示意图,如图1所示,硬件接口从线路上收到报文后,会通知直接存储器访问(DMA,Direct Memory Access)模块启动数据搬移,DMA模块首先访问系统内存中的缓存描述符(BD,BufferDescriptor)队列,通过BD描述符找到对应的内存缓冲区,然后将收到的报文搬移到内存缓冲区中去,并通知中央处理单元(CPU, Central ProcessingUnit)报文接收事件,CPU在适当的时候,开始对接收报文进行处理,并最终从其它接口转发出去。其中,BD队列是网络硬件与系统驱动软件的重要接口,即通常所说的接口硬件接收队列。从图1可以看出,BD队列的核心元素是BD描述符,一个典型的BD描述符结构如图2所示,包括状态控制位、数据长度信息和内存缓冲区指针。多个内存中地址连续的BD描述符组成环状BD队列,如图3所示,其中W = 1表示当前BD是队列中最后一个BD,硬件控制器发现当前BD的W标志为1时,会自动跳转到队列开始位置。硬件接口接收数据时,硬件控制器顺序访问BD环上的BD描述符,根据BD描述符中的状态控制位,判断当前BD是否可用,如果可用,则根据BD描述符中的内存缓冲区指针查找到对应的缓冲区,启动DMA模块开始向该缓冲区传输数据,传输完成后,将BD状态控制位设置为“满”,通过中断通知CPU处理,CPU处理完成后,再将BD状态控制位设置为“空”, 该BD可以再次使用。硬件控制器和CPU围绕BD队列周而复始地循环,形成了报文的持续接收过程。当硬件控制器发现BD环上所有的BD都处于“满”状态时,就会开始丢弃接收报文,直到发现BD环上又有可用BD为止。现有实现中,软件根据与硬件的接口设置队列的起始地址和长度,该队列长度在设备初始化时配置为固定长度,在运行过程中不可更改。现有技术方案的主要缺点如下接收队列长度在接口初始化时指定,且在路由器运行期间不可改变,形成固定内存消耗。而实际网络运行环境中存在有规律的周期性流量波动,单一长度的BD队列无法根据实际情况进行动态调整,很容易造成接口周期性丢包;另外,某些用户应用和配置会导致路由器内部出现周期性的耗时较长的任务占用CPU资源,此时接收队列肩负着缓冲接收报文的作用,单一长度的接收队列在这种情况下很容易造成接口丢包。路由器发生丢包会导致上层协议的重传机制生效,增加网络重传报文数量,进一步加重网络负担,形成恶性循环。
发明内容
本发明提供调整接口接收队列长度的方法及装置,以实现对接口接收队列长度的动态调整,减少丢包现象。本发明的技术方案是这样实现的一种调整接口接收队列长度的方法,预设调整周期,该方法包括在每个调整周期内,统计各打开接口的接收队列丢包统计信息、接收队列收包速率统计信息,并统计系统任务运行统计信息;对于任一打开接口,在每个调整周期内,根据该周期内该接口的接收队列丢包统计信息,判断该接口是否存在丢包事件,若存在,则根据该周期内该接口的接收队列收包速率统计信息和系统任务运行统计信息,调整该接口的接收队列长度。所述在每个调整周期内,统计各打开接口的接收队列丢包统计信息、接收队列收包速率统计信息的同时进一步包括在每个调整周期内,统计各打开接口的接收队列利用率;所述判断该接口是否存在丢包事件之后进一步包括若不存在,则当本周期内该接口的接收队列利用率大于预设上限时,增大该接口的接口队列长度;当本周期内该接口的接口队列利用率小于预设下限时,减少该接口的接收队列长度;否则,保持该接口的接收队列长度不变。所述在每个调整周期内,统计各打开接口的接收队列丢包统计信息、收包速率统计信息之前进一步包括当一个接口打开时,根据当前可用系统内存,为该接口分配初始队列长度。所述系统任务运行统计信息为系统最大任务运行时长。一种调整接口接收队列长度的装置,该装置包括硬件事件管理模块在每个调整周期内,统计各打开接口的接收队列丢包统计信息、接收队列收包速率统计信息;任务管理模块在每个调整周期内,统计系统任务运行统计信息;队列控制模块对于任一打开接口,在每个调整周期内,根据硬件事件管理模块中的该周期内该接口的接收队列丢包统计信息,判断该接口是否存在丢包事件,若存在,则根据硬件事件管理模块中的该周期内该接口的接收队列收包速率统计信息和任务管理模块中的该周期内的系统任务运行统计信息,调整该接口的接收队列长度。所述硬件事件管理模块进一步用于,在每个调整周期内,统计各打开接口的接收队列利用率;所述队列控制模块进一步用于,对于任一打开接口,在每个调整周期内,若根据硬件事件管理模块中的该周期内的丢包统计信息,确定该接口不存在丢包事件,则若硬件事件管理模块中的本周期内该接口的接收队列利用率大于预设上限,则增大该接口的接口队列长度;若硬件事件管理模块中的本周期内该接口的接口队列利用率小于预设下限,则减少该接口的接收队列长度;否则,保持该接口的接收队列长度不变。所述装置进一步包括内存管理模块,用于记录当前可用系统内存;所述队列控制模块进一步用于,当接收到硬件事件管理模块上报的接口打开事件时,根据内存管理模块中的当前可用系统内存,为该接口分配初始队列长度。与现有技术相比,本发明中周期性地统计各接口的接收队列丢包统计信息和收包速率统计信息,并统计系统任务运行统计信息,当一个接口存在丢包事件时,则根据本周期内该接口的接收队列收包速率统计信息以及系统任务运行统计信息,调整接口的接收队列长度,从而实现了根据接口的收包情况,动态调整接口的接收队列长度,减少了丢包现象, 降低了网络负担;且,实现简单,不需新增硬件成本,不影响已有接口处理流程;同时可提高设备的可靠性、转发性能、内存利用率等关键用户指标。
图1为路由器接口接收报文的处理示意图;图2为典型的BD描述符结构示意图;图3为地址连续的BD描述符组成的环状BD队列示意图;图4为本发明实施例提供的调整接口接收队列长度的方法流程图;图5为本发明实施例提供的调整接口接收队列长度的装置的组成图。
具体实施例方式下面结合附图及具体实施例对本发明再作进一步详细的说明。图4为本发明实施例提供的调整接口接收队列长度的方法流程图,如图4所示,其具体步骤如下步骤401 预设接收队列调整周期,预设接口接收队列利用率上限和下限,设备初始化完毕,设备的硬件事件管理模块和任务管理模块将自身的所有统计信息清零。接口的接收队列利用率上限>接口的接收队列利用率下限,如接口的接收队列利用率上限可以为75%,接口的接收队列利用率下限可以为25%。硬件事件管理模块中的统计信息包括各接口的队列利用率、各接口的丢包统计信息、各接口的收包速率统计信息,任务管理模块中的统计信息指的是系统任务运行统计信息如最大任务运行时长等。对于任一接口,执行如下步骤402 409 步骤402 队列控制模块接收硬件事件管理模块发来的该接口打开(up)事件,向内存管理模块获取可用内存信息,根据该可用内存信息,为该接口分配初始队列长度。当硬件事件管理模块接收到一个接口的驱动模块发来的接口 up事件后,会向队列控制模块上报该接口 UP事件。可预先将内存大小分为多个等级,并为每个等级设置一个接收队列长度,队列控制模块记录内存大小与内存等级的对应关系,同时记录内存等级与接收队列长度的对应关系。本步骤中,队列控制模块先根据可用内存信息确定内存等级,然后再根据内存等级为该接口分配初始接收队列长度。
5
步骤403 当一个调整周期到来时,队列控制模块查询本周期内该接口的接收队列利用率、接收队列丢包统计信息、接收队列收包速率统计信息以及系统任务运行统计信肩、ο其中,队列控制模块可以向硬件事件管理模块查询本周期内该接口的接收队列利用率,或者,硬件事件管理模块可以主动向队列控制模块上报本周期内该接口的接收队列利用率。其中,接口的驱动模块会周期性地向硬件事件管理模块上报接口的接收队列的利用率;队列控制模块可以通过向硬件事件管理模块查询接口上报的缓存溢出事件来得知该接口的接收队列丢包统计信息。由于当接口的接收队列丢包时,接口的驱动模块会向硬件事件管理模块上报缓存溢出事件,因此,队列控制模块可以向硬件事件管理模块查询本周期内接口的驱动模块上报的缓存溢出事件数,或者硬件事件管理模块也可以主动向队列控制模块上报本周期内接口的驱动模块上报的缓存溢出事件数,从而队列控制模块可以得知接口的接收队列的丢包统计信息如丢包数、丢包率等;队列控制模块可以向硬件事件管理模块查询本周期内的收包速率统计信息,或者,硬件事件管理模块主动向队列控制模块上报本周期内的收包速率统计信息。接口的驱动模块在收包时,会向硬件事件管理模块上报收包事件,因此硬件事件管理模块可根据本周期内接收到的收包事件的数目,得到收包速率,即收包速率=本周期内收到的收包事件数/调整周期长度。队列控制模块可以向任务管理模块查询本周期内的系统任务运行统计信息如最大任务运行时长;或者,任务管理模块可以主动向队列控制模块上报本周期内的系统任务运行统计信息如最大任务运行时长。步骤404 队列控制模块根据本周期内该接口的丢包统计信息,判断本周期内该接口是否存在丢包事件,若是,执行步骤405 ;否则,执行步骤406。步骤405 队列控制模块根据本周期内该接口的收包速率统计信息以及本周期内的系统任务运行统计信息,得到调整后的该接口的接收队列长度,根据该长度调整该接口的接口队列,本流程结束。例如调整后的该接口的接收队列长度=本周期内该接口的平均收包速率*本周期内的系统最大任务运行时长。步骤406 队列控制模块判断本周期内接口的接收队列利用率是否大于预设接收队列利用率上限,若是,执行步骤407 ;否则,执行步骤408。步骤407 队列控制模块增大该接口的接收队列长度,本流程结束。这里,可将接口的接收队列长度增大预设比例,预设比例可以是5%等。步骤408 队列控制模块判断本周期内接口的接收队列利用率是否小于预设接收队列利用率下限,若是,执行步骤409 ;否则,保持接口的接收队列长度不变,本流程结束。步骤409 队列控制模块减少该接口的接收队列长度,本流程结束。这里,可将接口的接收队列长度减少预设比例。其中,步骤步骤406、408中判断接口的接收队列利用率是否大于预设接收队列利用率上限、是否小于预设接收队列利用率下限并无先后之分,在实际应用中,只要做到当接口的接收队列利用率大于预设接收队列利用率上限时,就增大该接口的接收队列长度;
6当接口的接收队列利用率小于预设接收队列利用率下限时,就减少该接口的接收队列长度;否则,保持该接口的队列长度不变即可。当队列控制模块接收到硬件事件管理模块上报的该接口的接口关闭(down)事件后,释放该接口的接收队列。图5为本发明实施例提供的调整接口接收队列长度的装置的组成图,如图5所示, 该装置主要包括硬件事件管理模块51、任务管理模块52和队列控制模块53,其中
硬件事件管理模块51 在每个调整周期内,统计各up接口的接收队列丢包统计信息、收包速率统计信息。任务管理模块52 在每个调整周期内,统计系统任务运行统计信息。队列控制模块53 对于任一 up接口,在每个调整周期内,从硬件事件管理模块51 获取该周期内该接口的丢包统计信息,根据该丢包统计信息,判断该接口在本周期内是否存在丢包事件,若存在,则从硬件事件管理模块51获取本周期内该接口的收包速率统计信息,从任务管理模块52获取本周期内的系统任务运行统计信息,根据该收包速率统计信息和系统任务运行统计信息,调整该接口的接收队列长度。在实际应用中,硬件事件管理模块51还可用于,在每个调整周期内,统计各接口的接收队列利用率;同时,队列控制模块53还用于,对于任一接口,在每个调整周期内,若根据从硬件事件管理模块51获取的该周期内该接口的丢包统计信息,确定该接口不存在丢包事件,则从硬件事件管理模块51获取本周期内该接口的接收队列利用率,若该利用率大于预设上限,则增大该接口的接口队列长度;若该利用率小于预设下限,则减少该接口的接收队列长度;否则,保持该接口的接收队列长度不变。在实际应用中,图5所示装置还包括内存管理模块用于记录当前可用系统内存;队列控制模块53还可用于,当接收到硬件事件管理模块51上报的一个接口的接口 up事件时,则从内存管理模块获取当前可用系统内存,根据该可用系统内存,为该接口分配初始队列长度。本发明实施例中的接收队列可以是BD队列。本发明实施例中的设备可以是路由器。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种调整接口接收队列长度的方法,其特征在于,预设调整周期,该方法包括在每个调整周期内,统计各打开接口的接收队列丢包统计信息、接收队列收包速率统计信息,并统计系统任务运行统计信息;对于任一打开接口,在每个调整周期内,根据该周期内该接口的接收队列丢包统计信息,判断该接口是否存在丢包事件,若存在,则根据该周期内该接口的接收队列收包速率统计信息和系统任务运行统计信息,调整该接口的接收队列长度。
2.根据权利要求1所述的方法,其特征在于,所述在每个调整周期内,统计各打开接口的接收队列丢包统计信息、接收队列收包速率统计信息的同时进一步包括在每个调整周期内,统计各打开接口的接收队列利用率;所述判断该接口是否存在丢包事件之后进一步包括若不存在,则当本周期内该接口的接收队列利用率大于预设上限时,增大该接口的接口队列长度;当本周期内该接口的接口队列利用率小于预设下限时,减少该接口的接收队列长度;否则,保持该接口的接收队列长度不变。
3.根据权利要求1所述的方法,其特征在于,所述在每个调整周期内,统计各打开接口的接收队列丢包统计信息、收包速率统计信息之前进一步包括当一个接口打开时,根据当前可用系统内存,为该接口分配初始队列长度。
4.根据权利要求1或4所述的方法,其特征在于,所述系统任务运行统计信息为系统最大任务运行时长。
5.一种调整接口接收队列长度的装置,其特征在于,该装置包括硬件事件管理模块在每个调整周期内,统计各打开接口的接收队列丢包统计信息、接收队列收包速率统计信息;任务管理模块在每个调整周期内,统计系统任务运行统计信息;队列控制模块对于任一打开接口,在每个调整周期内,根据硬件事件管理模块中的该周期内该接口的接收队列丢包统计信息,判断该接口是否存在丢包事件,若存在,则根据硬件事件管理模块中的该周期内该接口的接收队列收包速率统计信息和任务管理模块中的该周期内的系统任务运行统计信息,调整该接口的接收队列长度。
6.根据权利要求5所述的装置,其特征在于,所述硬件事件管理模块进一步用于,在每个调整周期内,统计各打开接口的接收队列利用率;所述队列控制模块进一步用于,对于任一打开接口,在每个调整周期内,若根据硬件事件管理模块中的该周期内的丢包统计信息,确定该接口不存在丢包事件,则若硬件事件管理模块中的本周期内该接口的接收队列利用率大于预设上限,则增大该接口的接口队列长度;若硬件事件管理模块中的本周期内该接口的接口队列利用率小于预设下限,则减少该接口的接收队列长度;否则,保持该接口的接收队列长度不变。
7.根据权利要求5所述的装置,其特征在于,所述装置进一步包括内存管理模块,用于记录当前可用系统内存;所述队列控制模块进一步用于,当接收到硬件事件管理模块上报的接口打开事件时, 根据内存管理模块中的当前可用系统内存,为该接口分配初始队列长度。
全文摘要
本发明公开了调整接口接收队列长度的方法及装置。方法包括预设调整周期,在每个调整周期内,统计各打开接口的接收队列丢包统计信息、接收队列收包速率统计信息,并统计系统任务运行统计信息;对于任一打开接口,在每个调整周期内,根据该周期内的该接口的接收队列丢包统计信息,判断该接口是否存在丢包事件,若存在,则根据该周期内该接口的接收队列收包速率统计信息和系统任务运行统计信息,调整该接口的接收队列长度。本发明实现了对接口接收队列长度的动态调整,减少了丢包现象。
文档编号H04L1/00GK102340442SQ20101023606
公开日2012年2月1日 申请日期2010年7月21日 优先权日2010年7月21日
发明者张泽 申请人:杭州华三通信技术有限公司