CN105071973B - 一种报文接收方法及网络设备 - Google Patents
一种报文接收方法及网络设备 Download PDFInfo
- Publication number
- CN105071973B CN105071973B CN201510542550.0A CN201510542550A CN105071973B CN 105071973 B CN105071973 B CN 105071973B CN 201510542550 A CN201510542550 A CN 201510542550A CN 105071973 B CN105071973 B CN 105071973B
- Authority
- CN
- China
- Prior art keywords
- gear
- core
- host
- message
- state
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Communication Control (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例提供一种报文接收方法及网络设备,涉及通信技术领域,能够解决现有技术中通过多个CPU内核从同一接收队列接收报文时,由于多核频繁竞争自旋锁导致的系统资源开销大,系统性能下降的问题。具体方案为:网络设备的中央处理器CPU内核包括宿主核和辅助核,任一报文接收队列对应一个宿主核和至少一个辅助核,网络设备通过宿主核从接收队列接收报文,宿主核持有自旋锁,在宿主核完成本轮报文的接收并进行报文处理时,若确定满足预设条件,则允许辅助核竞争自旋锁,并通过获取到自旋锁的辅助核从接收队列接收报文,在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁。本发明实施例用于接收报文。
Description
技术领域
本发明实施例涉及通信技术领域,尤其涉及一种报文接收方法及网络设备。
背景技术
随着多核技术的发展,具有多个中央处理器(Central Processing Unit,CPU)内核的网络设备,可以通过分流功能将从外部设备接收到的数据报文分流到接收接口的多个接收队列中,使得每个CPU内核对应接收一个接收队列的报文,从而达到多核接收同一接收接口的报文的目的。通常,每个接收队列对应一种类型的报文,当某种类型报文的流量持续突发时,通过单个CPU内核从当前接收队列接收该类型的报文时,容易出现丢包现象,很难满足网络设备对接收性能的要求,因而需要通过多核来接收该接收队列的报文。
任一CPU内核从某一接收队列接收报文时都需要访问该接收队列的缓冲区描述符(Buffer Description,BD)构成的BD环数据结构,该BD环属于临界资源,可以通过自旋锁进行保护。在任一CPU内核访问BD环之前,可以通过获取自旋锁来阻止其它CPU内核对BD环的访问,并在完成报文接收后释放自旋锁,以解除对BD环的锁定。为了加快报文接收,网络设备通常采用软件轮询方式从接收队列接收报文,在该种情况下,参见图1所示的多核竞争自旋锁的示意图,各CPU内核通过竞争自旋锁来访问BD环以从接收队列接收报文;并且,当其中一个CPU内核获取到自旋锁并进行报文接收时,其它CPU内核仍会频繁地竞争自旋锁,从而使得系统资源开销较大,导致系统性能下降。
发明内容
本发明实施例提供一种报文接收方法及网络设备,能够解决现有技术中通过多个CPU内核从同一接收队列接收报文时,由于频繁竞争自旋锁导致的系统资源开销大,系统性能下降的问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种报文接收方法,网络设备的中央处理器CPU内核包括宿主核和辅助核,任一报文接收队列对应一个宿主核和至少一个辅助核,所述方法包括:
通过所述宿主核从所述接收队列接收报文,所述宿主核持有自旋锁;
在所述宿主核完成本轮报文的接收并进行报文处理时,若确定满足预设条件,则由所述辅助核竞争持有所述自旋锁,并通过获取到所述自旋锁的辅助核从所述接收队列接收报文;
在所述宿主核完成报文处理后,由所述宿主核优先竞争并持有所述自旋锁。
结合第一方面,在第一方面的第一种可能的实现方式中,所述确定满足预设条件包括:
预设参考值;
根据所述宿主核本轮从所述接收队列接收到的报文数量确定档位;
根据所述档位以及状态机的当前状态,确定所述状态机的将来状态并结合预设步长机制调整所述参考值;
若所述参考值落入预设范围,则确定满足预设条件。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据所述宿主核本轮从所述接收队列接收到的报文数量确定档位包括:
当所述宿主核本轮从所述接收队列接收到的报文数量小于第一预设值时,确定所述档位为第一档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第一预设值且小于第二预设值时,确定所述档位为第二档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第二预设值且小于第三预设值时,确定所述档位为第三档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于第三预设值且小于或者等于第四预设值时,确定所述档位为第四档。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述根据所述宿主核本轮从所述接收队列接收到的报文数量确定的档位以及状态机的当前状态,确定所述状态机的将来状态包括:
当所述档位为第一档时,确定所述状态机的将来状态为空闲;
当所述档位为第二档时,确定所述状态机的将来状态与所述状态机的当前状态一致;
当所述档位为第三档时,若所述状态机的当前状态为繁忙,则确定所述状态机的将来状态为趋向空闲;若所述状态机的当前状态为保持、空闲、趋向繁忙或趋向空闲,则确定所述状态机的当前状态为空闲;
当所述档位为第四档时,若所述状态机的当前状态为空闲,则确定所述状态机的将来状态为趋向繁忙;若所述状态机的当前状态为保持、繁忙、趋向繁忙、或趋向空闲,则确定所述状态机的将来状态为繁忙。
结合第一方面的第二或第三种可能的实现方式,在第一方面的第四种可能的实现方式中,根据所述宿主核本轮从所述接收队列接收到的报文数量确定的档位以及状态机的当前状态,并结合预设步长机制调整所述参考值包括:
当所述档位为第一档时,将所述参考值增加第一预设步长;
当所述档位为第二档时,保持所述参考值不变;
当所述档位为第三档时,若所述状态机的当前状态为保持或空闲,则将所述参考值增加第二预设步长;若所述状态机的当前状态为繁忙、趋向繁忙或趋向空闲,则保持所述参考值不变;
当所述档位为第四档时,若所述状态机的当前状态为保持、繁忙或趋向繁忙,则将所述参考值减小第三预设步长;若所述状态机的当前状态为空闲或趋向空闲,则保持所述参考值不变;
对所述参考值进行校正;
其中,所述第一预设步长、所述第二预设步长和所述第三预设步长为正数,所述第四预设步长大于所述第一预设步长和所述第二预设步长。
第二方面,提供一种网络设备,所述网络设备的中央处理器CPU内核包括宿主核和辅助核,任一报文接收队列对应一个宿主核和至少一个辅助核,所述网络设备包括:
接收单元,用于通过所述宿主核从所述接收队列接收报文,所述宿主核持有自旋锁;
处理单元,用于在所述宿主核完成本轮报文的接收并进行报文处理时,若确定满足预设条件,则由所述辅助核竞争持有所述自旋锁,并通过获取到所述自旋锁的辅助核从所述接收队列接收报文;
所述处理单元还用于,在所述宿主核完成报文处理后,由所述宿主核优先竞争并持有所述自旋锁。
结合第二方面,在第二方面的第一种可能的实现方式中,所述处理单元具体用于:
预设参考值;
根据所述宿主核本轮从所述接收队列接收到的报文数量确定档位;
根据所述档位以及状态机的当前状态,确定所述状态机的将来状态并结合预设步长机制调整所述参考值;
若所述参考值落入预设范围,则确定满足预设条件。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述处理单元具体用于:
当所述宿主核本轮从所述接收队列接收到的报文数量小于第一预设值时,确定所述档位为第一档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第一预设值且小于第二预设值时,确定所述档位为第二档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第二预设值且小于第三预设值时,确定所述档位为第三档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于第三预设值且小于或者等于第四预设值时,确定所述档位为第四档。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述处理单元具体用于:
当所述档位为第一档时,确定所述状态机的将来状态为空闲;
当所述档位为第二档时,确定所述状态机的将来状态与所述状态机的当前状态一致;
当所述档位为第三档时,若所述状态机的当前状态为繁忙,则确定所述状态机的将来状态为趋向空闲;若所述状态机的当前状态为保持、空闲、趋向繁忙或趋向空闲,则确定所述状态机的当前状态为空闲;
当所述档位为第四档时,若所述状态机的当前状态为空闲,则确定所述状态机的将来状态为趋向繁忙;若所述状态机的当前状态为保持、繁忙、趋向繁忙、或趋向空闲,则确定所述状态机的将来状态为繁忙。
结合第二方面的第二种或第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述处理单元具体用于:
当所述档位为第一档时,将所述参考值增加第一预设步长;
当所述档位为第二档时,保持所述参考值不变;
当所述档位为第三档时,若所述状态机的当前状态为保持或空闲,则将所述参考值增加第二预设步长;若所述状态机的当前状态为繁忙、趋向繁忙或趋向空闲,则保持所述参考值不变;
当所述档位为第四档时,若所述状态机的当前状态为保持、繁忙或趋向繁忙,则将所述参考值减小第三预设步长;若所述状态机的当前状态为空闲或趋向空闲,则保持所述参考值不变;
对所述参考值进行校正;
其中,所述第一预设步长、所述第二预设步长和所述第三预设步长为正数,所述第四预设步长大于所述第一预设步长和所述第二预设步长。
本发明实施例提供一种报文接收方法及网络设备,当网络设备通过多个CPU内核从同一接收队列接收报文时,持有自旋锁的宿主核从接收队列接收报文,当宿主核完成本轮报文的接收并进行报文处理时,若满足预设条件,则允许辅助核通过竞争持有自旋锁从接收队列接收报文,并在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁。因此,与现有技术中无论是否有CPU内核获取到自旋锁各CPU内核均频繁竞争自旋锁不同,本发明实施例中的辅助核只有在宿主核处理报文期间且满足预设条件的情况下,才会出现辅助核竞争自旋锁的情况,而在其它情况下均不会竞争自旋锁,因而能解决现有技术中通过多核CPU从同一接收队列接收报文时,由于多核频繁竞争自旋锁导致的系统资源开销大,系统性能下降的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中多核竞争自旋锁的示意图;
图2a)为本发明实施例提供的一种BD环结构示意图;
图2b)为本发明实施例提供的另一种BD环结构示意图;
图2c)为本发明实施例提供的又一种BD环结构示意图;
图3为本发明实施例提供的一种报文接收方法流程示意图;
图4为本发明实施例提供的多核竞争自旋锁的示意图;
图5为本发明实施例提供的一种状态机状态转换示意图;
图6为本发明实施例提供的一种网络设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
自旋锁:为了保护多个CPU内核间的共享资源而提出的一种锁机制,通过让锁获取者执行一段紧凑的循环指令,从而不断地查询锁持有者是否已经释放自旋锁。自旋锁的特点是不会引起自旋锁获取者的睡眠,且使用自旋锁的开销比较大。
锁竞争:多个核为了获取锁而不断地查询锁持有者是否已经释放自旋锁的过程,该过程使得系统资源的开销很大,对系统的性能影响比较明显。
BD环:一种常用的高级软硬件数据交互的数据结构。这里以长度为8的BD环为例,对网络设备通过某个CPU内核从接收队列的BD环接收报文的流程进行说明:
I、网络设备的硬件设计了分别由硬件和软件操作BD环的指针:HEAD(硬件使用)和TAIL(软件使用),初始状态时线路上没有报文,BD环为空,HEAD和TAIL都指向第0个BD,如图2a)所示。
II、网络中的报文通过网络设备的网卡到达某一接收队列时,由硬件将合法的报文直接存储(Direct Memory Access,DMA)至内存,将对应的BD状态置为满,并向前移动HEAD指针,如图2b)所示。直到HEAD指针遇到TAIL指针时,硬件认为没有空的BD了,此时停止将报文DMA到内存。
III、软件进入一次报文接收循环,该循环的操作为从TAIL处开始遍历BD环,将被硬件置为满的BD指向的报文收走,并将对应的BD置为空,同时将TAIL指针向前移动。当TAIL指针遇到空BD时即认为没有报文可以接收,如图2c)所示。
IV、通过上述软硬件交互,可以实现持续的收包。但当报文量很大的时候,硬件DMA的速度很快,TAIL指针将一直遇不到空BD,从而会一直持续的在BD环上收包,此时可能会引发死循环。为了防止死循环的发生,通常需要一个合理的预设阈值T(该预设阈值T是一个经验值,不同系统对应的预设阈值可以不同,具体可以根据实际情况进行设置),软件检查收包数目达到阈值时则停止接收,完成一轮报文的接收,并进行报文处理,并在报文处理完成后进行下一轮的报文接收。
本发明实施例提供一种报文接收方法,网络设备的中央处理器CPU内核包括宿主核和辅助核,任一报文接收队列对应一个宿主核和至少一个辅助核,参见图3,该方法可以包括:
101、网络设备通过宿主核从接收队列接收报文,宿主核持有自旋锁。
其中,网络设备可以是路由器、交换机、网关等通信网络中的各种设备。宿主核是网络设备多个CPU内核中的一个,网络设备可以给每个接收队列绑定一个宿主核。对于某一接收队列来说,宿主核以外的所有其它CPU内核均为该接收队列的辅助核。本发明实施例以下内容中的接收队列均为绑定宿主核后的接收队列。自旋锁用于保护接收队列的BD环(临界资源),宿主核通过持有的自旋锁优先访问接收队列的BD环,从而优先从接收队列接收报文。宿主核从接收队列接收报文的过程可以参见上述步骤I-IV中的具体描述。
102、在宿主核完成本轮报文的接收并进行报文处理时,若确定满足预设条件,则网络设备由辅助核竞争持有自旋锁,并通过获取到自旋锁的辅助核从接收队列接收报文。
根据上述步骤I-IV中的描述可知,宿主核完成本轮报文的接收可能包括以下两种情况:TAIL指针遇到空BD,或者,已接收报文数量大于或者等于预设阈值T,则结束本轮报文的接收。在宿主核完成本轮报文的接收后,可以对接收到的报文进行处理。
宿主核完成本轮报文的接收并进行报文处理时,可以确定是否满足预设条件,若满足预设条件,则在宿主核进行报文处理期间,可以由辅助核竞争持有自旋锁,并通过获取到自旋锁的辅助核从接收队列接收报文;若不满足预设条件,则辅助核不会像现有技术中那样竞争自旋锁,从而节省了系统资源的开销。
其中,预设条件可以根据需要进行设定,本发明实施例不做具体限定。
103、在宿主核完成报文处理后,网络设备由宿主核优先竞争并持有自旋锁。
在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁,从而优先通过宿主核进行下一轮报文接收,具体可以包括以下两种情况:
情况1:若在宿主核处理报文期间,辅助核通过竞争自旋锁从接收队列接收报文,则在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁,从而优先通过宿主核进行下一轮报文的接收。
情况2:若在宿主核处理报文期间,辅助核没有竞争自旋锁,则在宿主核完成报文处理后,宿主核仍然持有自旋锁,并进行下一轮报文的接收。
通常,CPU内核从接收队列接收报文时持有自旋锁,完成本轮报文接收后释放自旋锁。在本发明实施例中,宿主核可以采用现有技术中的机制释放自旋锁,并在宿主核完成报文处理后,网络设备由宿主核优先竞争并持有自旋锁。当然,在本发明实施例中,宿主核也可以一直持有自旋锁直到满足预设条件时才释放自旋锁,这样以来,在情况2中当宿主核完成报文处理后,由于宿主核并未释放自旋锁因而自旋锁仍由宿主核持有。
示例性的,本发明实施例提供的一种多核竞争自旋锁的示意图可以参见图4。
需要说明的是,与现有技术中无论是否有CPU内核获取到自旋锁各CPU内核均频繁竞争自旋锁不同,在本发明实施例中,辅助核只有在满足预设条件时才会在宿主核处理报文期间竞争自旋锁,而在不满足预设条件时,即使在宿主核处理报文期间也不会竞争自旋锁,并且,在宿主核接收报文期间也不会竞争自旋锁,从而减少了辅助核对锁进行无效的竞争,降低了多个CPU内核竞争自旋锁的资源开销,提高了系统性能。
进一步地,步骤102中,网络设备确定满足预设条件具体可以包括以下步骤:
104、网络设备预设参考值。
其中的参考值可以用以标识接收队列的繁忙程度,初始参考值可以根据需要进行设定,例如可以为[0,100]范围内的数值。
105、网络设备根据宿主核本轮从接收队列接收到的报文数量确定档位。
其中的档位是根据宿主核本轮从接收队列接收到的报文数量的多少确定的,可以反映宿主核当前的繁忙程度,档位包括的等级和等级的划分机制可根据具体需要进行设置,以下仅为举例说明。
可选地,档位可以包括第一档、第二档、第三档和第四档,网络设备根据宿主核本轮从接收队列接收到的报文数量确定档位可以包括:当宿主核本轮从接收队列接收到的报文数量小于第一预设值时,确定档位为第一档;
当宿主核本轮从接收队列接收到的报文数量大于或者等于第一预设值且小于第二预设值时,确定档位为第二档;
当宿主核本轮从接收队列接收到的报文数量大于或者等于第二预设值且小于第三预设值时,确定档位为第三档;
当宿主核本轮从接收队列接收到的报文数量大于或者等于第三预设值且小于或者等于第四预设值时,确定档位为第四档。
由于宿主核每轮从接收队列接收到的报文的数量一定小于或者等于预设阈值T,因而,示例性的,可以将第四预设值设置为预设阈值T,而第一预设值至第三预设值均小于预设阈值T,且第一预设值可以为第二预设值可以为第三预设值可以为预设阈值T可以为32个报文。第一档到第四档对应的宿主核的繁忙程度逐渐提高。
106、网络设备根据档位以及状态机的当前状态,确定状态机的将来状态并结合预设步长机制调整参考值。
其中,状态机的状态可以反映接收队列的繁忙程度,状态机的当前状态可以反映接收队列过去的繁忙程度,当前档位可以表明宿主核当前的繁忙程度并一定程度上可以反映接收队列当前的繁忙程度,状态机的将来状态用以反映接收队列将来的繁忙程度,网络设备可以根据从过去到现在的大致趋势预测接收队列将来的繁忙程度。即,状态机的将来状态可以根据状态机的当前状态以及当前档位来确定。确定状态机的将来状态的基本原则可以为:档位越高,状态机的将来状态越趋向于较为繁忙的状态。确定状态机的将来状态的具体规则可以根据需要进行设定,以下仅为举例说明。
可选地,参见图5所示的状态机的状态转换示意图,状态机的状态可以包括保持、繁忙、空闲、趋向繁忙和趋向空闲,网络设备根据宿主核本轮从接收队列接收到的报文数量确定的档位以及状态机的当前状态,确定状态机的将来状态可以包括:
A、当档位为第一档时,网络设备可以确定状态机的将来状态为空闲。
当档位为第一档时,可以说明宿主核本轮接收到的报文特别少,接收队列当前特别空闲,因而无论状态机的当前状态是何种状态,均可以将状态机的将来状态设置为空闲。
B、当档位为第二档时,网络设备可以确定状态机的将来状态与状态机的当前状态一致。
当档位为第二档时,可以说明宿主核本轮接收到的报文较少,接收队列当前较为空闲,状态机的将来状态可以保存当前的状态不变。
C、当档位为第三档时,若状态机的当前状态为繁忙,则网络设备可以确定状态机的将来状态为趋向空闲;若状态机的当前状态为保持、空闲、趋向繁忙或趋向空闲,则网络设备可以确定状态机的当前状态为空闲。
当档位为第三档时,可以说明宿主核本轮接收到的报文不是特别多,接收队列当前不是特别繁忙,因而当状态机的当前状态为繁忙(说明接收队列之前特别繁忙)时,状态机的将来状态可以为趋向空闲,当状态机的当前状态为保持、空闲、趋向繁忙或趋向空闲时,状态机的当前状态可以为空闲。
D、当档位为第四档时,若状态机的当前状态为空闲,则网络设备可以确定状态机的将来状态为趋向繁忙;若状态机的当前状态为保持、繁忙、趋向繁忙、或趋向空闲,则网络设备可以确定状态机的将来状态为繁忙。
当档位为第四档时,可以说明宿主核本轮接收到的报文特别多,接收队列当前特别繁忙,当状态机的当前状态为空闲(说明接收队列之前特别空闲)时,状态机的将来状态可以为趋向繁忙;当状态机的当前状态为保持、繁忙、趋向繁忙、或趋向空闲时,状态机的将来状态可以为繁忙。
需要说明的是,上述根据不同档位和状态机的不同当前状态确定状态机的将来状态的机制,使得状态机在空闲状态到繁忙状态之间的转换是一个渐变的过程,这与实际情况中接收队列的流量一般不会突然发生剧烈变化一致。
在步骤106中,网络设备根据宿主核本轮从接收队列接收到的报文数量确定的档位以及状态机的当前状态,并结合预设步长机制调整参考值可以包括:
(1)、当档位为第一档时,将参考值增加第一预设步长;当档位为第二档时,保持参考值不变;当档位为第三档时,若状态机的当前状态为保持或空闲,则将参考值增加第二预设步长;若状态机的当前状态为繁忙、趋向繁忙或趋向空闲,则保持参考值不变;当档位为第四档时,若状态机的当前状态为保持、繁忙或趋向繁忙,则将参考值减小第三预设步长;若状态机的当前状态为空闲或趋向空闲,则保持参考值不变;其中,第一预设步长、第二预设步长和第三预设步长为正数,第四预设步长大于第一预设步长和第二预设步长。
具体的,网络设备可以根据表1所示的规则增加或者减小参考值。
表1
其中,第一预设步长至第三预设步长的具体取值可以根据需要进行设置,第一预设步长和第二预设步长可以相同也可以不同,第三预设步长大于第一预设步长和第二预设步长。示例性的,预设参考值可以在[0,100]范围内,第一预设步长和第二预设步长可以相同且均为25,第三预设步长可以为75。
(2)、网络设备对参考值进行校正。
其中,网络设备对上述步骤(1)中增加或减小后的参考值进行校正的规则可以根据需要进行设定,本发明实施例不做限定,以下仅举例说明。
示例性的,当预设参考值在[0,100]范围内时,若经过上述步骤(1)后得到的参考值小于0,则将参考值校正为0;若经过上述步骤(1)后得到的参考值大于100,则将参考值校正为100,使得校正后的参考值保持在[0,100]范围内。
107、若参考值落入预设范围,则网络设备确定满足预设条件。
其中,预设范围可以为一个数值或者一个数值范围,具体可以根据实际情况进行设定。例如,当预设范围内一个数值范围时,该数值范围可以是0附近的数值范围例如[0,5];或者预设范围也可以是具体的数值0。本发明实施例将以预设范围为具体数值0为例进行说明。
当预设范围为具体数值0时,若调整后(即校正后)的参考值为0,则确定满足预设条件。当校正后的参考值为0时,说明校正前的参考值小于或者等于0,可以说明宿主核最近几轮从接收队列接收的报文中,大多数报文的数量接近甚至等于预设阈值T,接收队列当前处于非常繁忙的状态,可以通过辅助核辅助接收报文。因而,在宿主核完成本轮报文的接收并进行报文处理时,若调整后的参考值为0,则允许辅助核竞争自旋锁,从而通过获取到自旋锁的辅助核从接收队列接收报文,并在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁。
需要说明的是,由于第三预设步长对应本轮接收报文数量非常多的第四档,而第三预设步长大于第一预设步长和第二预设步长,因而当本轮接收报文的数量对应第四档时,参考值急剧减小,当本轮接收报文的数量对应其它档时,参考值缓慢增加。这样一来,在接收队列变得繁忙的时候可以迅速将参考值降至0及以下,使得校正后的参考值为0,从而允许辅助核竞争自旋锁来辅助宿主核接收报文,避免流量突发导致的丢包现象;而在接收队列空闲下来时,可以将参考值缓慢增加到0以上,从而可以避免辅助核立即退出竞争,防止流量反扑。
综上,在接收队列空闲(低负载)时,本发明实施例提供的报文接收方法仅通过宿主核从接收队列接收报文,因而不会出现锁竞争导致的系统性能下降的问题。而且,仅通过一个宿主核从接收队列接收报文不用引起报文的乱序,即本发明实施例提供的方法在低负载时可以对报文进行保序。
在接收队列繁忙(高负载)时,宿主核每轮接收到的报文数量很大,而处理大数量的报文需要的时间较长,因而本发明实施例提供的报文接收方法,在宿主核处理报文的时间空档有选择的让辅助核帮助宿主核从接收队列接收报文,从而达到大流量情况下多核通过有序竞争来锁接收报文,避免报文丢失。
实测表明,采用本发明实施例提供的报文接收方法,在四核系统中,单个接收队列最大可保序的流量可以达到64字节线速的30%(460Kpps),实际上已经能够满足日常应用的流量需求。并且,在四核系统中,所有核对锁的无效竞争可以从现有技术中的每秒四十万次降到每秒九千次,从而避免了系统性能在锁竞争方面的损耗,提高了多核接收同一队列的效率,同时还可以保证流量大的情况下不出现丢包。
另外,本发明实施例中提出的锁竞争处理方法并不局限于上文中的报文接收操作,还可以应用于其它需要通过多个CPU内核竞争自旋锁进行的操作。
本发明实施例提供一种报文接收方法,可以用于网络设备通过多个CPU内核从同一接收队列接收报文,持有自旋锁的宿主核从接收队列接收报文,当宿主核完成本轮报文的接收并进行报文处理时,若满足预设条件,则由辅助核竞争持有自旋锁从接收队列接收报文;而在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁。因此,与现有技术中无论是否有CPU内核获取到自旋锁各CPU内核均频繁竞争自旋锁不同,本发明实施例中的辅助核只有在宿主核处理报文期间且满足预设条件的情况下,才会出现辅助核竞争自旋锁的情况,而在其它情况下均不会竞争自旋锁,因而能解决现有技术中网络设备通过多核CPU从同一接收队列接收报文时,由于多核频繁竞争自旋锁导致的系统资源开销大,系统性能下降的问题。
本发明实施例提供一种网络设备200,网络设备200的中央处理器CPU内核包括宿主核和辅助核,任一报文接收队列对应一个宿主核和至少一个辅助核,参见图6,该网络设备200可以包括:
接收单元201,可以用于通过宿主核从接收队列接收报文,宿主核持有自旋锁;
处理单元202,可以用于在宿主核完成本轮报文的接收并进行报文处理时,若确定满足预设条件,则由辅助核竞争持有自旋锁,并通过获取到自旋锁的辅助核从接收队列接收报文处理单元202还可以用于,在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁。
其中,网络设备200可以是路由器、交换机等通信网络中的各种设备。在本发明实施例中,与现有技术中无论是否有CPU内核获取到自旋锁各CPU内核均频繁竞争自旋锁不同,在本发明实施例中,辅助核只有在满足预设条件时才会在宿主核处理报文期间竞争自旋锁,而在不满足预设条件时,即使在宿主核处理报文期间也不会竞争自旋锁,并且,在宿主核接收报文期间也不会竞争自旋锁,从而减少了辅助核对锁进行无效的竞争,降低了多个CPU内核竞争自旋锁的资源开销,提高了系统性能。
可选地,处理单元202可以具体用于:
预设参考值;
根据宿主核本轮从接收队列接收到的报文数量确定档位;
根据档位以及状态机的当前状态,确定状态机的将来状态并结合预设步长机制调整参考值;
若参考值落入预设范围,则确定满足预设条件。
可选地,处理单元202可以具体用于:
当宿主核本轮从接收队列接收到的报文数量小于第一预设值时,确定档位为第一档;
当宿主核本轮从接收队列接收到的报文数量大于或者等于第一预设值且小于第二预设值时,确定档位为第二档;
当宿主核本轮从接收队列接收到的报文数量大于或者等于第二预设值且小于第三预设值时,确定档位为第三档;
当宿主核本轮从接收队列接收到的报文数量大于或者等于第三预设值且小于或者等于第四预设值时,确定档位为第四档。
可选地,处理单元202可以具体用于:
当档位为第一档时,确定状态机的将来状态为空闲;
当档位为第二档时,确定状态机的将来状态与状态机的当前状态一致;
当档位为第三档时,若状态机的当前状态为繁忙,则确定状态机的将来状态为趋向空闲;若状态机的当前状态为保持、空闲、趋向繁忙或趋向空闲,则确定状态机的当前状态为空闲;
当档位为第四档时,若状态机的当前状态为空闲,则确定状态机的将来状态为趋向繁忙;若状态机的当前状态为保持、繁忙、趋向繁忙、或趋向空闲,则确定状态机的将来状态为繁忙。
可选地,处理单元202可以具体用于:
当档位为第一档时,将参考值增加第一预设步长;
当档位为第二档时,保持参考值不变;
当档位为第三档时,若状态机的当前状态为保持或空闲,则将参考值增加第二预设步长;若状态机的当前状态为繁忙、趋向繁忙或趋向空闲,则保持参考值不变;
当档位为第四档时,若状态机的当前状态为保持、繁忙或趋向繁忙,则将参考值减小第三预设步长;若状态机的当前状态为空闲或趋向空闲,则保持参考值不变;
对参考值进行校正;
其中,第一预设步长、第二预设步长和第三预设步长为正数,第四预设步长大于第一预设步长和第二预设步长。
需要说明的是,在接收队列空闲(低负载)时,本发明实施例提供的报文接收方法仅通过宿主核从接收队列接收报文,因而不会出现锁竞争导致的系统性能下降的问题。而且,仅通过一个宿主核从接收队列接收报文不用引起报文的乱序,即本发明实施例提供的方法在低负载时可以对报文进行保序。
在接收队列繁忙(高负载)时,宿主核每轮接收到的报文数量很大,而处理大数量的报文需要的时间较长,因而本发明实施例提供的报文接收方法,在宿主核处理报文的时间空档有选择的让辅助核帮助宿主核从接收队列接收报文,从而达到大流量情况下多核通过有序竞争来锁接收报文,避免报文丢失。
本发明实施例提供一种网络设备,当网络设备通过多个CPU内核从同一接收队列接收报文时,持有自旋锁的宿主核从接收队列接收报文,当宿主核完成本轮报文的接收并进行报文处理时,若满足预设条件,则允许辅助核竞争自旋锁从接收队列接收报文;而在宿主核完成报文处理后,由宿主核优先竞争并持有自旋锁。因此,与现有技术中无论是否有CPU内核获取到自旋锁各CPU内核均频繁竞争自旋锁不同,本发明实施例中的辅助核只有在宿主核处理报文期间且满足预设条件的情况下,才会出现辅助核竞争自旋锁的情况,而在其它情况下均不会竞争自旋锁,因而能解决现有技术中通过多核CPU从同一接收队列接收报文时,由于多核频繁竞争自旋锁导致的系统资源开销大,系统性能下降的问题。
在本申请所提供的几个实施例中,应该理解到,所揭露的网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机网络设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种报文接收方法,其特征在于,网络设备的中央处理器CPU内核包括宿主核和辅助核,任一报文接收队列对应一个宿主核和至少一个辅助核,所述方法包括:
通过所述宿主核从所述接收队列接收报文,所述宿主核持有自旋锁;
在所述宿主核完成本轮报文的接收并进行报文处理时,若确定满足预设条件,则由所述辅助核竞争持有所述自旋锁,并通过获取到所述自旋锁的辅助核从所述接收队列接收报文;
在所述宿主核完成报文处理后,由所述宿主核优先竞争并持有所述自旋锁。
2.根据权利要求1所述的方法,其特征在于,所述确定满足预设条件包括:
预设参考值;
根据所述宿主核本轮从所述接收队列接收到的报文数量确定档位;
根据所述档位以及状态机的当前状态,确定所述状态机的将来状态并结合预设步长机制调整所述参考值;
若所述参考值落入预设范围,则确定满足预设条件。
3.根据权利要求2所述的方法,其特征在于,所述根据所述宿主核本轮从所述接收队列接收到的报文数量确定档位包括:
当所述宿主核本轮从所述接收队列接收到的报文数量小于第一预设值时,确定所述档位为第一档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第一预设值且小于第二预设值时,确定所述档位为第二档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第二预设值且小于第三预设值时,确定所述档位为第三档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于第三预设值且小于或者等于第四预设值时,确定所述档位为第四档。
4.根据权利要求3所述的方法,其特征在于,所述根据所述宿主核本轮从所述接收队列接收到的报文数量确定的档位以及状态机的当前状态,确定所述状态机的将来状态包括:
当所述档位为第一档时,确定所述状态机的将来状态为空闲;
当所述档位为第二档时,确定所述状态机的将来状态与所述状态机的当前状态一致;
当所述档位为第三档时,若所述状态机的当前状态为繁忙,则确定所述状态机的将来状态为趋向空闲;若所述状态机的当前状态为保持、空闲、趋向繁忙或趋向空闲,则确定所述状态机的将来状态为空闲;
当所述档位为第四档时,若所述状态机的当前状态为空闲,则确定所述状态机的将来状态为趋向繁忙;若所述状态机的当前状态为保持、繁忙、趋向繁忙、或趋向空闲,则确定所述状态机的将来状态为繁忙。
5.根据权利要求3或4所述的方法,其特征在于,根据所述宿主核本轮从所述接收队列接收到的报文数量确定的档位以及状态机的当前状态,并结合预设步长机制调整所述参考值包括:
当所述档位为第一档时,将所述参考值增加第一预设步长;
当所述档位为第二档时,保持所述参考值不变;
当所述档位为第三档时,若所述状态机的当前状态为保持或空闲,则将所述参考值增加第二预设步长;若所述状态机的当前状态为繁忙、趋向繁忙或趋向空闲,则保持所述参考值不变;
当所述档位为第四档时,若所述状态机的当前状态为保持、繁忙或趋向繁忙,则将所述参考值减小第三预设步长;若所述状态机的当前状态为空闲或趋向空闲,则保持所述参考值不变;
对所述参考值进行校正;
其中,所述第一预设步长、所述第二预设步长和所述第三预设步长为正数,第三预设步长大于所述第一预设步长和所述第二预设步长。
6.一种网络设备,其特征在于,所述网络设备的中央处理器CPU内核包括宿主核和辅助核,任一报文接收队列对应一个宿主核和至少一个辅助核,所述网络设备包括:
接收单元,用于通过所述宿主核从所述接收队列接收报文,所述宿主核持有自旋锁;
处理单元,用于在所述宿主核完成本轮报文的接收并进行报文处理时,若确定满足预设条件,则由所述辅助核竞争持有所述自旋锁,并通过获取到所述自旋锁的辅助核从所述接收队列接收报文;
所述处理单元还用于,在所述宿主核完成报文处理后,由所述宿主核优先竞争并持有所述自旋锁。
7.根据权利要求6所述的网络设备,其特征在于,所述处理单元具体用于:
预设参考值;
根据所述宿主核本轮从所述接收队列接收到的报文数量确定档位;
根据所述档位以及状态机的当前状态,确定所述状态机的将来状态并结合预设步长机制调整所述参考值;
若所述参考值落入预设范围,则确定满足预设条件。
8.根据权利要求7所述的网络设备,其特征在于,所述处理单元具体用于:
当所述宿主核本轮从所述接收队列接收到的报文数量小于第一预设值时,确定所述档位为第一档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第一预设值且小于第二预设值时,确定所述档位为第二档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于所述第二预设值且小于第三预设值时,确定所述档位为第三档;
当所述宿主核本轮从所述接收队列接收到的报文数量大于或者等于第三预设值且小于或者等于第四预设值时,确定所述档位为第四档。
9.根据权利要求8所述的网络设备,其特征在于,所述处理单元具体用于:
当所述档位为第一档时,确定所述状态机的将来状态为空闲;
当所述档位为第二档时,确定所述状态机的将来状态与所述状态机的当前状态一致;
当所述档位为第三档时,若所述状态机的当前状态为繁忙,则确定所述状态机的将来状态为趋向空闲;若所述状态机的当前状态为保持、空闲、趋向繁忙或趋向空闲,则确定所述状态机的将来状态为空闲;
当所述档位为第四档时,若所述状态机的当前状态为空闲,则确定所述状态机的将来状态为趋向繁忙;若所述状态机的当前状态为保持、繁忙、趋向繁忙、或趋向空闲,则确定所述状态机的将来状态为繁忙。
10.根据权利要求8或9所述的网络设备,其特征在于,所述处理单元具体用于:
当所述档位为第一档时,将所述参考值增加第一预设步长;
当所述档位为第二档时,保持所述参考值不变;
当所述档位为第三档时,若所述状态机的当前状态为保持或空闲,则将所述参考值增加第二预设步长;若所述状态机的当前状态为繁忙、趋向繁忙或趋向空闲,则保持所述参考值不变;
当所述档位为第四档时,若所述状态机的当前状态为保持、繁忙或趋向繁忙,则将所述参考值减小第三预设步长;若所述状态机的当前状态为空闲或趋向空闲,则保持所述参考值不变;
对所述参考值进行校正;
其中,所述第一预设步长、所述第二预设步长和所述第三预设步长为正数,第三预设步长大于所述第一预设步长和所述第二预设步长。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510542550.0A CN105071973B (zh) | 2015-08-28 | 2015-08-28 | 一种报文接收方法及网络设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510542550.0A CN105071973B (zh) | 2015-08-28 | 2015-08-28 | 一种报文接收方法及网络设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105071973A CN105071973A (zh) | 2015-11-18 |
CN105071973B true CN105071973B (zh) | 2018-07-17 |
Family
ID=54501260
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510542550.0A Active CN105071973B (zh) | 2015-08-28 | 2015-08-28 | 一种报文接收方法及网络设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105071973B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106375239B (zh) * | 2016-08-25 | 2019-02-12 | 北京智芯微电子科技有限公司 | 一种网络数据接收的处理方法及装置 |
CN110032441B (zh) * | 2018-11-22 | 2023-03-28 | 创新先进技术有限公司 | 提升服务器性能的方法及装置和电子设备 |
CN112491979B (zh) | 2020-11-12 | 2022-12-02 | 苏州浪潮智能科技有限公司 | 一种网卡数据包缓存管理方法、装置、终端及存储介质 |
CN112702275A (zh) * | 2020-12-29 | 2021-04-23 | 迈普通信技术股份有限公司 | 基于每包转发的方法、装置、网络设备及计算机存储介质 |
CN116010040A (zh) * | 2021-10-21 | 2023-04-25 | 华为技术有限公司 | 一种获取锁资源的方法、装置及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1492353A (zh) * | 2002-10-10 | 2004-04-28 | �Ҵ���˾ | 通过执行转移指令访问全局促进工具的方法、设备和系统 |
CN1630852A (zh) * | 2001-09-28 | 2005-06-22 | 英特尔公司 | 多处理器计算机上的java线程同步的灵活加速 |
CN101685408A (zh) * | 2008-09-24 | 2010-03-31 | 国际商业机器公司 | 多个线程并行访问共享数据结构的方法及装置 |
CN102103523A (zh) * | 2009-12-22 | 2011-06-22 | 国际商业机器公司 | 锁分配控制的方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030088744A1 (en) * | 2001-11-06 | 2003-05-08 | Infineon Technologies Aktiengesellschaft | Architecture with shared memory |
GB0518516D0 (en) * | 2005-09-10 | 2005-10-19 | Ibm | Managing a resource lock |
US9063796B2 (en) * | 2012-08-02 | 2015-06-23 | GM Global Technology Operations LLC | Method and apparatus for improving processing performance of a multi-core processor |
-
2015
- 2015-08-28 CN CN201510542550.0A patent/CN105071973B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1630852A (zh) * | 2001-09-28 | 2005-06-22 | 英特尔公司 | 多处理器计算机上的java线程同步的灵活加速 |
CN1492353A (zh) * | 2002-10-10 | 2004-04-28 | �Ҵ���˾ | 通过执行转移指令访问全局促进工具的方法、设备和系统 |
CN101685408A (zh) * | 2008-09-24 | 2010-03-31 | 国际商业机器公司 | 多个线程并行访问共享数据结构的方法及装置 |
CN102103523A (zh) * | 2009-12-22 | 2011-06-22 | 国际商业机器公司 | 锁分配控制的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105071973A (zh) | 2015-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105071973B (zh) | 一种报文接收方法及网络设备 | |
EP3776241B1 (en) | Loop thread order execution control of a multi-threaded, self-scheduling reconfigurable computing fabric | |
CN106569891B (zh) | 一种存储系统中任务调度执行的方法和装置 | |
US7966506B2 (en) | Saving power in a computer system | |
CN102752198B (zh) | 多核报文转发方法、多核处理器及网络设备 | |
US9740495B2 (en) | Implementing out of order processor instruction issue queue | |
US20190042331A1 (en) | Power aware load balancing using a hardware queue manager | |
JP2003044296A5 (zh) | ||
US20090213732A1 (en) | Preserving packet order when migrating network flows between cores | |
US9092275B2 (en) | Store operation with conditional push of a tag value to a queue | |
US9632958B2 (en) | System for migrating stash transactions | |
CN104102549B (zh) | 一种实现多线程互斥操作的方法、装置和芯片 | |
CN102662740A (zh) | 非对称多核系统及其实现方法 | |
CN104978321A (zh) | 构造数据队列的方法、装置及从其插入和消费对象的方法 | |
CN103729236A (zh) | 一种限制云计算用户资源使用额度的方法 | |
IL264794B2 (en) | Scheduling of tasks on a multi-processor device | |
US20190056872A1 (en) | Reallocate memory pending queue based on stall | |
CN106325996A (zh) | 一种gpu资源的分配方法及系统 | |
CN101799772A (zh) | 内核调度方法、内核备份方法和多核处理器 | |
WO2007130476A2 (en) | Network interface device with 10 gb/s full-duplex transfer rate | |
US10205666B2 (en) | End-to-end flow control in system on chip interconnects | |
CN103176941B (zh) | 核间通信方法和代理装置 | |
CN110349076A (zh) | 数据的处理方法及装置 | |
CN107305507A (zh) | 死锁控制方法和装置 | |
EP1233340A2 (en) | Context preservation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |