CN111447145B - 一种多核***的流表管理方法、装置、***及存储介质 - Google Patents
一种多核***的流表管理方法、装置、***及存储介质 Download PDFInfo
- Publication number
- CN111447145B CN111447145B CN202010216106.0A CN202010216106A CN111447145B CN 111447145 B CN111447145 B CN 111447145B CN 202010216106 A CN202010216106 A CN 202010216106A CN 111447145 B CN111447145 B CN 111447145B
- Authority
- CN
- China
- Prior art keywords
- flow table
- core
- forwarding
- entry
- forwarding core
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/02—Topology update or discovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种多核***的流表管理方法、装置、***及存储介质。该方法将多核处理器的核分为一个控制核和多个转发核,其中转发核只用于处理数据转发事务并在本转发核专用的流表中创建和管理流表项,而控制核主要用于响应用户指令并根据用户指令对转发核的流表项进行相应操作。转发核从公共内存池获取内存块创建流表项,而控制核则通过逐一读取公共内存池中的内存块来获取所有转发核管理的流表项的内容,由此来实现转发核和控制核的协同工作。由于转发核专用的流表仅供本转发核使用,其他转发核和控制核均无法访问本转发核专用的流表,如此,转发核在访问本转发核专用的流表时无需加锁,大大提高了流表的处理速度,也相应提高了转发效率。
Description
技术领域
本发明涉及电子通信领域,尤其涉及一种多核***的流表管理方法、装置、***及存储介质。
背景技术
由于多核处理器能够极大地提升处理能力,目前大部分通信设备都采用多核处理器,且处理器的核的数量还在不断增加。与此同时,这也对运行在多核***上的软件提出了更高的要求,特别是在并发设计上,如何充分利用多核处理器的处理能力使软件高效并发地运行,成为软件开发和设计上的又一挑战。
对于主要用于转发数据流的转发设备,比如路由器和防火墙,如何充分利用多核处理器的处理能力提高通信设备的转发性能就显得尤为重要。在转发设备中通常会建立流表来分类和管理各种数据流,常见的流表是基于数据报文的五元组来分类的,所有五元组相同的报文认为是同一条流。通信设备在收到一条流的第一个报文时会为该条流创建一条流表项,该流表项中保存有该流的一些共同特征和相关参数。不同的流会创建不同的流表项,长时间没有报文经过的流表项会被老化删除。流表的主要特点是数据量大,一般都会达到几十万甚至上百万,如果能利用多核处理器的并发处理能力并行处理流表中的流表项就能大大提高数据流的转发性能。从而,如何提升多核处理器上流表处理效率是亟待解决的技术问题。
目前常见的解决方法有两种:1)给流表项加锁。这种方法实现简单,但是取锁的过程会带来很大的开销,并且随着处理器核的增加取锁的开销也会增加。2)在处理器中指定一个专门的核来创建和修改流表项,其它核只是读表项。这种方法有并性很高,读取表项不需要加锁,但是创建和修改表项在专门的核上完成,那么这些核有可能会成为***的瓶颈。
发明内容
针对以上问题,本发明实施例创造性地提供了一种多核***的流表管理方法、装置、***及存储介质。
根据本发明实施例第一方面,一种多核***的流表管理方法,应用于转发核,该方法包括在创建流表项时进行以下操作:从公共内存池中获取内存块,其中,公共内存池被所有核共享;在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效;将流表项添加到本转发核专用的流表。
根据本发明实施例一实施方式,其中,在将流表项添加到本转发核专用的流表之前,该方法还包括:判断是否已经存在本转发核专用的流表,若是,则继续下一操作,若否,则创建本转发核专用的流表。
根据本发明实施例一实施方式,其中,该方法还包括:获取本转发核专用的流表;从本转发核专用的流表中查找到要操作的流表项;对要操作的流表项进行管理操作,管理操作包括查看、修改或删除,其中,若管理操作是删除,则将流表项从本转发核专用的流表中移除并将流表项的状态字段设置为无效。
根据本发明实施例一实施方式,其中,从公共内存池中获取内存块,包括:从公共内存池中一次获取至少2个内存块;判断是否已经存在本转发核专用的缓存区,若是,则继续下一操作,若否,则创建本转发核专用的缓存区;将至少2个内存块存储到本转发核专用的缓存区;相应地,在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效,包括:从本转发核专用的缓存区获取内存块;在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效。
根据本发明实施例一实施方式,其中,在将流表项从本转发核专用的流表移除并将流表项的状态字段设置为无效之后,该方法还包括:检测本转发核专用的缓存区是否已满,若是,则从本转发核专用的缓存区中获取状态字段为无效的内存块,将状态字段为无效的内存块放入公共内存池,若否,则将内存块放入本转发核专用的缓存区。
根据本发明实施例第二方面,一种多核***的流表管理方法,应用于控制核,该方法包括:接收用户指令;逐一读取公共内存池内状态字段为有效的内存块以获取用户指令要操作的流表项;根据用户指令对流表项进行相应的操作,其中操作包括查看、老化和删除。
根据本发明实施例一实施方式,其中,根据用户指令对流表项进行相应的操作,包括:若操作为删除,则通知转发核,由转发核执行删除操作。
根据本发明实施例第三方面,一种多核***的流表管理装置,应用于转发核,该装置包括:内存块获取模块,用于从公共内存池中获取内存块,其中,公共内存池被所有核共享;流表项创建模块,用于在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效;流表项添加模块,用于将流表项添加到本转发核专用的流表。
根据本发明实施例一实施方式,其中,该装置还包括:流表创建模块,用于判断是否已经存在本转发核专用的流表,若是,则继续下一操作,若否,则创建本转发核专用的流表。
根据本发明实施例一实施方式,其中,该装置还包括:流表获取模块,用于获取本转发核专用的流表;流表项查找模块,用于从本转发核专用的流表中查找到要操作的流表项;流表项管理操作模块,用于对要操作的流表项进行管理操作,管理操作包括查看、修改或删除,其中,若管理操作是删除,则将流表项从本转发核专用的流表中移除并将流表项的状态字段设置为无效。
根据本发明实施例一实施方式,其中,内存块获取模块包括:公共内存池访问单元,用于从公共内存池中一次获取至少2个内存块;缓存区创建单元,用于判断是否已经存在本转发核专用的缓存区,若是,则继续下一操作,若否,则创建本转发核专用的缓存区;内存块存储单元,用于将至少2个内存块存储到本转发核专用的缓存区。相应地,流表项创建模块包括:专用内存块获取单元,用于从本转发核专用的缓存区获取内存块;流表项创建单元,用于在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效。
根据本发明实施例一实施方式,其中,该装置还包括:缓存区检测模块,用于检测本转发核专用的缓存区是否已满,若是,则从本转发核专用的缓存区中获取状态字段为无效的内存块,将状态字段为无效的内存块放入公共内存池,若否,则将内存块放入本转发核专用的缓存区。
根据本发明实施例第四方面,提供一种多核***的流表管理装置,应用于控制核,该装置包括:用户指令接收模块,用于接收用户指令;公共池流表项获取模块,用于逐一读取公共内存池内状态字段为有效的内存块以获取用户指令要操作的流表项;流表项操作模块,用于根据用户指令对流表项进行相应的操作,其中操作包括查看、老化和删除。
根据本发明实施例一实施方式,其中,流表项操作模块包括删除单元,用于若操作为删除,则通知转发核,由转发核执行删除操作。
根据本发明实施例第五方面,提供一种多核***的流表管理***,***包括:网卡,用于将数据报文均匀地分配到转发核由转发核进行转发;转发核,用于执行上述应用于转发核的多核***的流表管理方法以创建网卡分配的数据报文所对应的流表项;控制核,用于执行上述应用于控制核的多核***的流表管理方法以响应用户指令对转发核所创建的流表项进行相应的操作;其中,转发核从公共内存池获取内存块创建流表项,控制核通过逐一读取公共内存池的内存块以获取转发核所创建的流表项。
根据本发明实施例第六方面,提供一种计算机存储介质,存储介质包括一组计算机可执行指令,当指令被执行时用于执行上述任一项多核***的流表管理方法。
本发明实施例提供一种多核***的流表管理方法、装置、***及存储介质。该方法将多核处理器的核分为一个控制核和多个转发核,其中转发核只用于处理数据转发事务并在本转发核专用的流表中创建和管理流表项,而控制核主要用于响应用户指令并根据用户指令对转发核的流表项进行相应操作。为了控制核也能查看核获取转发核所创建核管理的流表项中的内容,本发明实施例利用公共内存池实现控制核和转发核之间的数据共享,即转发核从公共内存池获取内存块创建流表项,而控制核则通过逐一读取公共内存池中的内存块来获取所有转发核管理的流表项的内容,由此来实现转发核和控制核的协同工作。使用这一方案,因为使用专用流表,多个转发核可以独立进行转发工作,无需对流表进行加锁,并行效率非常高,而控制核则主要负责和用户进行交互并对流表项进行全局查找和老化等操作,工作量适中,也不易成为整个多核***的瓶颈,进而大大提高了多核***的并发处理能力。
需要理解的是,本发明的教导并不需要实现上面所述的全部有益效果,而是特定的技术方案可以实现特定的技术效果,并且本发明的其他实施方式还能够实现上面未提到的有益效果。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
在附图中,相同或对应的标号表示相同或对应的部分。
图1为本发明实施例应用于转发核的多核***的流表管理方法在的实现流程示意图;
图2为本发明实施例一应用中的转发核从公共内存池获取和释放内存块的示意图;
图3为本发明实施例应用于控制核的多核***的流表管理方法的实现流程示意图;
图4为本发明实施例一应用中的控制核通知转发核删除流表项的示意图;
图5为本发明实施例应用于转发核的多核***的流表管理装置的组成结构示意图;
图6为本发明实施例应用于控制核的多核***的流表管理装置的组成结构示意图。
具体实施方式
为使本发明的目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
为了便于理解本发明实施例多核***的流表管理方法,首先对本发明实施例的应用环境进行简单介绍。
本发明实施例多核***的流表管理方法主要针对多核***,即拥有多核处理器的计算机***。多核处理器是指在一枚处理器中集成两个或多个完整的核,此时处理器能支持***总线上的多个处理器,由总线控制器提供所有总线控制信号和命令信号,如此,可并发执行多个任务,从而大大提高处理器的处理能力。多核***通常会指定一个控制核,主要负责协调和管理各个核使其能避免冲突、高效地协调工作,而其他非控制核则负责执行具体的任务。本发明实施例多核***的流表管理方法主要应用于通信领域的转发业务。
本发明实施例多核***的流表管理方法中的流是指在同一时段,经过同一网络,访问同一目的地址并具有某些共同特性的数据。而流表则用于存储针对特定流的转发策略,由流表项组成。每一流表项代表一个特定的流,流表项主要包括可以用来标识该流的包头域(head fields)、计数器(counters)和动作表(actions)组成,其中:包头域主要涵盖了链路层、网络层、传输层大部分标识,比如,五元组;计数器主要用于统计数据流量相关信息,可以针对交换机中的每张流表、每个数据流、每个设备端口、每个转发队列进行维护;动作表主要用于指示与该流表项匹配的数据包应该执行的下一步操作。
为了能利用多核***的并发处理能力,本发明实施例多核***的流表管理方法也采用一个控制核和多个非控制核的基本框架,其中,非控制核只用于处理数据转发事务,故在本发明实施例中将其称为转发核,该名称并非是一个业内统一的专属名称,只是本发明实施例所定义的名称,在实施过程中也可由实施者自行更换为其他名称。为了避免转发核共享同一流表而导致频繁的加锁和解锁操作,本发明实施例多核***的流表管理方法通过网卡将数据报文均匀地分配到各个转发核,然后由转发核自行在本转发核所专用的流表中创建和管理流表项,转发核专用的流表仅供本转发核使用,其他转发核和控制核均无法访问本转发核专用的流表。而控制核主要用于响应用户指令并根据用户指令对转发核的流表项进行相应操作。控制核要响应用户指令并根据用户指令对转发核的流表项进行相应操作,就需要查看流表项的内容,但因为各个转发核的流表对于控制核来说却是不可见的。为此,本发明人创造性地利用公共内存池实现了转发核和控制核对数据的共享。具体地讲,转发核从公共内存池获取内存块创建流表项,因为该公共内存池被所有核共享,所以对控制核来说也是可见、可访问的,也就是说,控制核可通过逐一读取该公共内存池中的内存块来获取所有转发核管理的流表项的内容,由此实现转发核和控制核的协同工作。
接下来,介绍本发明实施例第一方面,一种多核***的流表管理方法,应用于转发核,如图1所示,该方法包括在创建流表项时进行以下操作:操作110,从公共内存池中获取内存块,其中,公共内存池被所有核共享;操作120,在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效;操作130,将流表项添加到本转发核专用的流表。
在操作110中,这里的公共内存池是预先分配好的、一段连续的内存空间,为转发核和控制核所共享,用于创建和维护流表项。这里的公共内存池会被划分为多个内存块,所谓内存块就是内存中可以分配和使用的最小单元。
在操作120中,这里所创建的流表项,除了和一般的流表项一样包含包头域、计数器和动作表之外,还包括一个状态字段。该状态字段用来表明该流表项是否是生效的。这一字段是为了在转发核和控制核之间共享流表项状态的一个字段。转发核是通过流表来访问流表项的,当创建流表项后并加入到流表后,该流表项可以通过流表被查找到,就自动生效了,而删除该流表项时,并不需要擦除该流表项中的内容,而只需把该流表项从流表中移出即可。因为无法通过流表查找到该流表项,该流表项也就自然失效了。但是,如前所述,各个转发核的流表是本转发核专用的流表,对于控制核来说是不可见的,所以控制核无法通过该流表项是否在某个流表中来区分该流表项是否生效。为此,本发明人在流表项中增设了一个状态字段用来表明该流表项是否生效。该字段可以是布尔值,也可以是文本类型的,只要是转发核和控制核之间约定好的、具有统一含义的值即可。在创建流表项时,该字段设置为有效。
在操作130中,将该流表项添加到本转发核专用的流表中,这样转发核就可以从流表中查找到该流表项,并根据该流表项进行相应地转发操作。转发核的流表是本转发核专用的流表,仅供本转发核使用,其他转发核和控制核均无法访问本转发核专用的流表,转发核访问本转发核专用的流表无需进行加锁和解锁操作,大大提高了流表的安全性并大大缩短了读写流表项的时间。
根据本发明实施例一实施方式,其中,在将流表项添加到本转发核专用的流表之前,该方法还包括:判断是否已经存在本转发核专用的流表,若是,则继续下一操作,若否,则创建本转发核专用的流表。
本转发核专用的流表通常只需创建一次,一旦创建了该流表,后续再进行流表项的相关操作时,都可以基于该流表进行。而创建流表的时机,只要在添加第一条流表项之前即可,并不做具体限定。通常,该流表中并不保存流表项的具体内容,而是保存用于存储流表项内容的内存块地址,通过该地址找到对应的内存块,并读取该内存块中的内容来获得流表项的具体内容。为例实现该流表仅供本转发核使用的效果,可以通过在本转发核独享的内存空间中创建该流表的方式实现。但本发明实施例并不限定如何实现转发核的流表仅供本转发核使用的效果,随着多核技术的发展,可能会有效果更好的其他方式。
根据本发明实施例一实施方式,其中,该方法还包括:获取本转发核专用的流表;从本转发核专用的流表中查找到要操作的流表项;对要操作的流表项进行管理操作,管理操作包括查看、修改或删除,其中,若管理操作是删除,则将流表项从本转发核专用的流表中移除并将流表项的状态字段设置为无效。
除了创建流表项,在转发过程中,还需要进行其他的一些管理操作,比如查看、修改或删除流表项等。同一个流的流表项通常只需在转发首报文的时候建立一次,之后再接收到同一个的报文就可以通过查找流表找到与之匹配的流表项并查看流表项即可获取相关的信息。此外,一个流表项通常会有路由通道的相关信息,例如,当路由通道的网络连接发生变化时,则需要修改相应的流表项;当某个路由通道不再互通,则需要删除相应的流表项。这些操作都是针对本转发核专用的流表进行的,因此在进行上述操作之前,首先要获取本转发核专用的流表并找到要操作的流表项。查找流表项通常是根据可以标识该流的一些流特征来进行的,比如五元组。在进行匹配时,流表还通常会设定有匹配优先级,这些都可以采用现有常用的方法,在此不再赘述。由于控制核不能通过访问流表的方式获知删除的流表项已经无效,因此在将流表项从本转发核专用的流表中移除时,需要将流表项中的状态字段设置为无效。
根据本发明实施例一实施方式,其中,从公共内存池中获取内存块,包括:从公共内存池中一次获取至少2个内存块;判断是否已经存在本转发核专用的缓存区,若是,则继续下一操作,若否,则创建本转发核专用的缓存区;将至少2个内存块存储到本转发核专用的缓存区;相应地,在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效,包括:从本转发核专用的缓存区获取内存块;在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效。
由于公共内存池是被所有核共享的,从公共内存池中获取内存块还是要进行加锁和解锁操作的,为了减少加锁和解锁操作的次数,在本实施方式中,会一次从公共内存池中获取一批内存块,并将这些内存块放进本转发核专用的缓存区。如图2所示,各个转发核,比如转发核20和转发核30都是从公共内存池10中获取内存块的,且每次都会获取一批内存块。以转发核20为例,假设转发核20需要在其专用流表201中创建一条新的流表项。此时,转发核20会先检查其专用的缓存区202是否有可用的内存块,如果已没有可用的内存块,则对公共内存池进行加锁,并从公共内存池中获取包含内存块101在内的一批内存块,并将这些内存块存储在缓存区202,然后对公共内存池10进行解锁。之后,就可以从缓存区202中取出一个可用的内存块,比如内存块101,来创建新的流表项,并将该流表项的内存块添加到专用流表201中。在具体实现中,专用流表201和缓存区202中通常只存储内存块的地址,创建和修改流表项的具体内容都是先通过所存储的内存块地址来定位到内存块,然后再读写该内存块的内容来实现的。同理,转发核30在转发核20对公共内存池10解锁后,也可以使用同样的方法从公共内存池10中获取包括内存块102在内的一批内存块,并将这些内存块存储在转发核30专用的缓存区302。当转发核30需要创建新的流表项时,就从缓存区302中获取一个内存块,比如内存块102,然后在该内存块上创建新的流表项并将该流表项添加到转发核30专用的专用流表301中。需要说明的是,公共内存池10设置有分配和管理内存块的内存分配表,当某个内存块被分配给某个转发核使用后,会记录下获取该内存块的转发核并将该内存块标记为已用,也就不会再分给其他转发核使用了。此外,一次从公共内存池中取多少个内存块,以及缓存区设计多大合适都需要根据具体的实施情况而定,本发明实施例都不加以限定。在实施本发明实施例多核***的流表管理方法时,可根据实施效果灵活调整一次获取的内存块个数以及缓存区的大小。
根据本发明实施例一实施方式,其中,在将流表项从本转发核专用的流表移除并将流表项的状态字段设置为无效之后,该方法还包括:检测本转发核专用的缓存区是否已满,若是,则从本转发核专用的缓存区中获取状态字段为无效的内存块,将状态字段为无效的内存块放入公共内存池,若否,则将内存块放入本转发核专用的缓存区。
将流表项从本转发核专用的流表移除并将流表项的状态字段设置为无效之后,需要将内存块释放回公共内存池以便公共内存池进行回收。公共内存池的回收操作主要包括重新将这些内存块设为可用,使这些内存块可以再次分给转发核使用。在将内存块释放回公共内存池时,转发核也需要对公共内存池进行加锁和解锁操作的。在本实施方式中,为了减少由于释放内存块而产生的加锁和解锁操作,转发核会先将内存块回收到本转发核专用的缓存区中,只有在本转发核专用的缓存区已满的情况下,才将内存块释放回公共内存池中。这样,就大大减少了访问公共内存池的次数和对公共内存池的加锁和解锁操作,使转发效率更高。
根据本发明实施例第二方面,一种多核***的流表管理方法,应用于控制核,如图3所示,该方法包括:操作310,接收用户指令;操作320,逐一读取公共内存池内状态字段为有效的内存块以获取用户指令要操作的流表项;操作330,根据用户指令对流表项进行相应的操作,其中操作包括查看、老化和删除。
在操作310中,这里的指令主要是管理流表项的指令,比如,使用dpctl dump-flows指令查看流表。多核***的任务分配对于用户来说是透明的,用户并不知道哪个是控制核,哪个是转发核,也不知道哪个流表项存储在哪个转发核的专用流表中,由控制核来接收用户指令,统一返回处理结果是非常合适的。而用户下达指令操作流表项的频率通常都不会很高且对转发任务的影响也不大,因此极少会出现控制核因响应不过来而成为转发瓶颈的情况。此外,老化操作是通过定时器来实现的,为了不打断转发核的转发处理流程,也可以由控制核来统一处理,即定期逐一读取公共内存池,并对所有流表项进行计时和老化。
在操作320中,与转发核不同,控制核不是通过流表来查找流表项的内容的,而是通过逐一读取公共内存池内的内存块来获得流表项的内容。为了确保流表项是当前正在使用的流表项,控制核在逐一读取公共内存池内的内存块时,会首先检测该内存块的状态字段是否为有效,如果是,则进一步检测该内存块所存储的流表项是否是要操作的流表项,如果否,则直接忽略。
在操作330中,这里控制核能对流表项进行的操作,以查看和老化为主,如果涉及到删除,则需要转发核的配合,首先将该流表项从转发核的流表中移出,并将流表项的状态字段设置为无效。
根据本发明实施例一实施方式,其中,根据用户指令对流表项进行相应的操作,包括:若操作为删除,则通知转发核,由转发核执行删除操作。
如图4所示,如果用户要执行的操作是删除,控制核40会先逐一读取公共内存池10中的内存块,找到要删除的内存块,比如内存块102,经过查询公共内存池10维护的内存块分配表找到该内存块所属的转发核,假设该转发核为转发核30。之后,控制核40就会通知转发核30删除内存块102。转发核30收到该消息后就会执行删除流表项的操作,将流表项102从转发核30专用的流表中移出,并将该流表项的状态设置为无效。
根据本发明实施例第三方面,一种多核***的流表管理装置,应用于转发核,如图5所示,该装置50包括:内存块获取模块501,用于从公共内存池中获取内存块,其中,公共内存池被所有核共享;流表项创建模块502,用于在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效;流表项添加模块503,用于将流表项添加到本转发核专用的流表。
根据本发明实施例一实施方式,其中,该装置50还包括:流表创建模块,用于判断是否已经存在本转发核专用的流表,若是,则继续下一操作,若否,则创建本转发核专用的流表。
根据本发明实施例一实施方式,其中,该装置50还包括:流表获取模块,用于获取本转发核专用的流表;流表项查找模块,用于从本转发核专用的流表中查找到要操作的流表项;流表项管理操作模块,用于对要操作的流表项进行管理操作,管理操作包括查看、修改或删除,其中,若管理操作是删除,则将流表项从本转发核专用的流表中移除并将流表项的状态字段设置为无效。
根据本发明实施例一实施方式,其中,内存块获取模块501包括:公共内存池访问单元,用于从公共内存池中一次获取至少2个内存块;缓存区创建单元,用于判断是否已经存在本转发核专用的缓存区,若是,则继续下一操作,若否,则创建本转发核专用的缓存区;内存块存储单元,用于将至少2个内存块存储到本转发核专用的缓存区。相应地,流表项创建模块502包括:专用内存块获取单元,用于从本转发核专用的缓存区获取内存块;流表项创建单元,用于在内存块上创建一条包含状态字段的流表项并将状态字段设置为有效。
根据本发明实施例一实施方式,其中,该装置50还包括:缓存区检测模块,用于检测本转发核专用的缓存区是否已满,若是,则从本转发核专用的缓存区中获取状态字段为无效的内存块,将状态字段为无效的内存块放入公共内存池,若否,则将内存块放入本转发核专用的缓存区。
根据本发明实施例第四方面,提供一种多核***的流表管理装置,应用于控制核,如图6所示,该装置60包括:用户指令接收模块601,用于接收用户指令;公共池流表项获取模块602,用于逐一读取公共内存池内状态字段为有效的内存块以获取用户指令要操作的流表项;流表项操作模块603,用于根据用户指令对流表项进行相应的操作,其中操作包括查看、老化和删除。
根据本发明实施例一实施方式,其中,流表项操作模块603包括删除单元,用于若操作为删除,则通知转发核,由转发核执行删除操作。
根据本发明实施例第五方面,提供一种多核***的流表管理***,***包括:网卡,用于将数据报文均匀地分配到转发核由转发核进行转发;转发核,用于执行上述应用于转发核的多核***的流表管理方法以创建网卡分配的数据报文所对应的流表项;控制核,用于执行上述应用于控制核的多核***的流表管理方法以响应用户指令对转发核所创建的流表项进行相应的操作;其中,转发核从公共内存池获取内存块创建流表项,控制核通过逐一读取公共内存池的内存块以获取转发核所创建的流表项。
根据本发明实施例第六方面,提供一种计算机存储介质,存储介质包括一组计算机可执行指令,当指令被执行时用于执行上述任一项多核***的流表管理方法。
这里需要指出的是:以上针对多核***的流表管理装置实施例的描述、以上针对多核***的流表管理***实施例的描述和以上针对计算机存储介质实施例的描述,与前述方法实施例的描述是类似的,具有同前述方法实施例相似的有益效果,因此不做赘述。对于本发明对多核***的流表管理装置实施例的描述、对多核***的流表管理***实施例的描述和对计算机存储介质实施例的描述尚未披露的技术细节,请参照本发明前述方法实施例的描述而理解,为节约篇幅,因此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个装置,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以利用硬件的形式实现,也可以利用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储介质、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例方法的全部或部分。而前述的存储介质包括:移动存储介质、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种多核***的流表管理方法,应用于转发核,所述方法包括在创建流表项时进行以下操作:
从公共内存池中获取内存块,其中,所述公共内存池被所有核共享;
在所述内存块上创建一条包含状态字段的流表项并将所述状态字段设置为有效;
将所述流表项添加到本转发核专用的流表,所述本转发核专用的流表仅供本转发核使用,对控制核不可见,所述控制核不能通过流表来查找流表项的内容,所述控制核通过逐一读取公共内存池内的内存块来获得流表项的内容。
2.根据权利要求1所述的方法,在所述将所述流表项添加到本转发核专用的流表之前,所述方法还包括:
判断是否已经存在本转发核专用的流表,若是,则继续下一操作,若否,则创建本转发核专用的流表。
3.根据权利要求1所述的方法,所述方法还包括:
获取所述本转发核专用的流表;
从所述本转发核专用的流表中查找到要操作的流表项;
对所述要操作的流表项进行管理操作,所述管理操作包括查看、修改或删除,其中,若所述管理操作是删除,则将所述流表项从所述本转发核专用的流表中移除并将所述流表项的状态字段设置为无效。
4.根据权利要求3所述的方法,所述从公共内存池中获取内存块,包括:
从公共内存池中一次获取至少2个内存块;
判断是否已经存在本转发核专用的缓存区,若是,则继续下一操作,若否,则创建所述本转发核专用的缓存区;
将所述至少2个内存块存储到所述本转发核专用的缓存区;
相应地,所述在所述内存块上创建一条包含状态字段的流表项并将所述状态字段设置为有效,包括:
从所述本转发核专用的缓存区获取所述内存块;
在所述内存块上创建一条包含状态字段的流表项并将所述状态字段设置为有效。
5.根据权利要求4所述的方法,在所述将所述流表项从所述本转发核专用的流表移除并将所述流表项的状态字段设置为无效之后,所述方法还包括:
检测所述本转发核专用的缓存区是否已满,若是,则从所述本转发核专用的缓存区中获取状态字段为无效的内存块,将所述状态字段为无效的内存块放入所述公共内存池,若否,则将内存块放入所述本转发核专用的缓存区。
6.一种多核***的流表管理方法,应用于控制核,所述方法包括:
接收用户指令;
逐一读取公共内存池内状态字段为有效的内存块以获取所述用户指令要操作的流表项,所述流表项为转发核专用的流表中的流表项,所述转发核专用的流表对控制核不可见,所述控制核不能通过流表来查找所述流表项;
根据所述用户指令对所述流表项进行相应的操作,其中所述操作包括查看、老化和删除。
7.根据权利要求6所述的方法,所述根据所述用户指令对流表项进行相应的操作,包括:
若所述操作为删除,则通知转发核,由所述转发核执行所述删除操作。
8.一种多核***的流表管理装置,应用于转发核,所述装置包括:
内存块获取模块,用于从公共内存池中获取内存块,其中,所述公共内存池被所有核共享;
流表项创建模块,用于在所述内存块上创建一条包含状态字段的流表项并将所述状态字段设置为有效;
流表项添加模块,用于将所述流表项添加到本转发核专用的流表,所述本转发核专用的流表仅供本转发核使用,对控制核不可见,所述控制核不能通过流表来查找流表项的内容,所述控制核通过逐一读取公共内存池内的内存块来获得流表项的内容。
9.一种多核***的流表管理***,所述***包括:
网卡,用于将数据报文均匀地分配到转发核由所述转发核进行转发;
转发核,用于执行权利要求1所述的多核***的流表管理方法以创建所述网卡分配的数据报文所对应的流表项;
控制核,用于执行权利要求6所述的多核***的流表管理方法以响应用户指令对所述转发核所创建的流表项进行相应的操作;
其中,所述转发核从所述公共内存池获取内存块创建流表项,所述控制核通过逐一读取所述公共内存池的内存块以获取所述转发核所创建的流表项。
10.一种存储介质,在所述存储介质上存储了程序指令,其中,所述程序指令在运行时用于执行如权利要求1至7任一项所述的多核***的流表管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216106.0A CN111447145B (zh) | 2020-03-25 | 2020-03-25 | 一种多核***的流表管理方法、装置、***及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010216106.0A CN111447145B (zh) | 2020-03-25 | 2020-03-25 | 一种多核***的流表管理方法、装置、***及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111447145A CN111447145A (zh) | 2020-07-24 |
CN111447145B true CN111447145B (zh) | 2021-12-24 |
Family
ID=71652432
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010216106.0A Active CN111447145B (zh) | 2020-03-25 | 2020-03-25 | 一种多核***的流表管理方法、装置、***及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111447145B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113098858B (zh) * | 2021-03-29 | 2023-07-14 | 上海辰锐信息科技有限公司 | 一种建链报文的无锁处理***及方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102769576B (zh) * | 2012-08-17 | 2015-06-10 | 北京傲天动联技术股份有限公司 | 流表自学习方法、报文转发方法和交换机 |
CN104639452B (zh) * | 2014-12-31 | 2018-03-23 | 曙光信息产业(北京)有限公司 | 数据的处理方法及装置 |
CN110138662B (zh) * | 2019-05-08 | 2021-09-14 | 东软集团股份有限公司 | 多核***中的会话表项处理方法、装置及多核*** |
-
2020
- 2020-03-25 CN CN202010216106.0A patent/CN111447145B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111447145A (zh) | 2020-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3514689B1 (en) | Memory management method and apparatus | |
US11698929B2 (en) | Offload of data lookup operations | |
US11115332B2 (en) | Multicast message filtering in virtual environments | |
CN106547612B (zh) | 一种多任务处理方法及装置 | |
EP2645259B1 (en) | Method, device and system for caching data in multi-node system | |
US9767019B2 (en) | Pauseless garbage collector write barrier | |
US10002074B2 (en) | Non-intrusive storage of garbage collector-specific management data | |
US20110265098A1 (en) | Message Passing with Queues and Channels | |
JP2004326754A (ja) | 共用リソースを使用するための仮想計算機の管理 | |
CN105634958A (zh) | 基于多核***的报文转发方法和装置 | |
CN111182008B (zh) | 在用户空间中建立套接字连接 | |
CN106648462B (zh) | 数据存储方法及装置 | |
WO2019153702A1 (zh) | 一种中断处理方法、装置及服务器 | |
US20220214907A1 (en) | Virtual machine memory management method and device | |
CN108021449A (zh) | 一种协程实现方法、终端设备及存储介质 | |
CN104618304A (zh) | 数据处理方法及数据处理*** | |
CN111897666A (zh) | 用于多进程之间通信的方法、设备及*** | |
US11687364B2 (en) | Methods and apparatus for cache-aware task scheduling in a symmetric multi-processing (SMP) environment | |
CN111447145B (zh) | 一种多核***的流表管理方法、装置、***及存储介质 | |
CN102209016B (zh) | 一种数据处理方法、装置和数据处理*** | |
US7783849B2 (en) | Using trusted user space pages as kernel data pages | |
US7509461B1 (en) | Method and apparatus for intelligent buffer cache pre-emption | |
US20220342888A1 (en) | Object tagging | |
CN111176855A (zh) | 在用户空间中建立线程之间的队列 | |
US11726788B2 (en) | Tuple checkout with notify in coordination namespace system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |