具体实施方式
下面将详细描述本发明的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本发明。
首先,必须说明的是,本发明所称的异态性数据,是指在处理中部分涉及共享资源独占性访问,部分不涉及共享资源独占性访问的数据,亦即从共享资源独占性访问的角度显示出不同状态的数据。由于现有技术中采用令牌或锁的机制来避免共享资源访问冲突,导致了不涉及共享资源独占性访问的数据也受到处理器挂起的影响造成处理性能的下降,本发明正是针对上述现有技术的缺陷,提供一种在多处理器环境中,不采用令牌或锁得机制来保证共享资源不发生冲突的方案,以提升异态性数据的并行处理性能,同时降低实现复杂度。
请结合附图1,示出了本发明提供的异态性数据的并行处理方法一实施例的流程图,适用于多处理器为部分涉及共享资源独占性访问的异态性数据提供并行处理的情况。有必要指出,这里所指的多处理器,是指对异态性数据进行区别性处理的多处理器,比如对于流水线工作方式下的前期处理器而言,由于并未涉及到共享资源独占性访问,数据的异态性并未体现,因此这些前期处理器并不适用于下述处理方法,沿用其现有技术中的处理模式即可。
本实施例包括以下步骤:
S1、接收到涉及共享资源独占性访问的数据的任一处理器将该数据输出到指定的缓存队列中;
从步骤S1的执行可以看出,即使首次接收到涉及共享资源独占性访问数据的处理器为多个,由于其并不执行共享资源的独占性访问,因此无需进行处理器的挂起和等待操作,而是将涉及共享资源独占性访问的数据送入缓存队列之后即可进行下一数据的处理,不会产生处理瓶颈;
S2、对该指定的缓存队列中的数据按照排队或限速的方式重新输入该多处理器,使同时至多一个处理器对其进行接收和处理;
从步骤S2的执行可以看出,同时至多一个处理器的数据处理,实现的是共享资源的串行访问,能够保证不会发生共享资源竞争;由于在采用令牌或者锁的情况下,实际的共享资源独占性访问也是串行处理,因此,上述步骤S2中的缓冲操作并不会降低涉及共享资源独占性访问的数据的处理效果。
特别是,由于涉及共享资源独占性访问的数据仅占用一个处理器,因此其它处理器可以被解放出来进行不涉及共享资源独占性访问的数据处理,事实上大大提高了处理器并行处理的速度,使并行处理的性能更加均匀。与此同时,由于不用在各处理器之间进行令牌或者锁的申请、释放及交换,实现起来的难度和成本大为降低。
较佳的,步骤S1之前还包括步骤S0:对接收到的数据进行识别,如果涉及共享资源独占性访问,对所述数据执行步骤S1;如果不涉及共享资源独占性访问,则依照现有技术中各处理器的处理方式不变,即由当前处理器直接处理。
作为具体的实施例,根据处理器所处的不同处理环境(例如,流水线工作方式和非流水线工作方式)和采取的不同处理手段(例如,排队和限速),上述步骤可以具有不同的实现方式。
对于非流水线工作方式而言,多处理器中的每一个都独立完成数据处理的全过程,其对于异态性数据的并行处理方法的实现相对简单。
请结合图2A,显示了图1所示方法在非流水线工作方式下通过排队方式实现调度的一个具体实施例,包括以下步骤:
SA1、指定一处理器并为其设置缓存队列作为指定的缓存队列,这也就意味着,从该缓存队列输出的数据仅能够被该指定处理器所处理,如果指定的处理器忙,就需要一直等待,从而保证共享资源的串行访问;
SA2、任一处理器对非从该缓存队列接收到的数据进行识别,涉及共享资源独占性访问,则执行步骤SA3,否则不涉及共享资源独占性访问,执行步骤SA5;
SA3、将涉及到共享资源独占性访问的数据输出到指定的缓存队列中;
SA4、排队在缓存队列中的数据依次重新输入该指定的处理器中,被该处理器串行顺序处理,包括进行共享资源的独占性访问以及其它后续处理;
SA5、直接进行数据处理。
有必要指出的是,在初始化阶段数据的进入是随机的,也就是任何数据都有可能进入该指定的处理器进行处理;与其它未被指定的处理器一样,该指定的处理器对于不涉及共享资源独占性访问的数据直接处理,同时将涉及共享资源独占性访问的数据送入缓存队列。但是,当缓存队列中具有数据之后,该指定的处理器就会在上一个数据释放后,被占用进行缓存队列中数据的串行处理,直到缓存队列中的数据处理完成再进入自由接收状态。显然,当并行处理过程中有大量涉及共享资源独占性访问的数据时,该指定的处理器相当于专职进行共享资源串行访问的处理器,将其它的处理器解放出来进行不涉及共享资源独占性访问的数据的处理。
请结合图2B,显示了图1所示方法在非流水线工作方式下通过限速方式实现调度的一个具体实施例,包括以下步骤:
SB1、预先设置一专用的缓存队列作为指定的缓存队列,此时,该缓存队列是独立设置的,即从该缓存队列输出的数据可能输出到多处理器的任意一个;
SB2、任一处理器对非从该缓存队列接收到的数据进行识别,涉及共享资源独占性访问,则执行步骤SB3,否则不涉及共享资源独占性访问,执行步骤SB5;
SB3、将该涉及共享资源独占性访问的数据输出到指定的缓存队列中;
SB4、将该缓存队列的数据按照预设的速率,重新输入到并行处理器中,由接收到的处理器进行包括共享资源独占性访问在内的处理;其中,该预设的速率不大于数据完成处理器处理的速率;
SB5、直接进行数据处理。
可以理解,由于步骤SB4中缓存队列发送数据的速率不大于数据完成处理器处理的速率,因此,只有在前一个涉及共享资源独占性访问的数据被处理完成后,下一个涉及共享资源独占性访问的数据才会进入;这也就意味着,同一时刻,至多有一个处理器在进行共享资源的独占性访问,因此不会出现共享资源的竞争,也无需进行令牌或者锁的调度。
在具体实现上,不同类型业务数据的处理可能具有不同的速率,实际取值可由网络管理人员根据经验值进行选取,比如一个NAT数据包首包的整体处理包括查询会话表、NAT地址资源的申请、NAT会话表的创建以及NAT转换和转发,依据特定的设备性能具有趋于一致的处理速率,可依此作为限速的依据。具体的限速操作可以通过NP或者包处理器等具有硬件流量整形功能的设备实现。
与非流水线工作方式相比较,流水线工作方式下对于异态性数据的并行处理方法的实现相对复杂一些,这是因为涉及共享资源独占性访问的多处理器可能仅仅是流水线中的一个处理环节,而其它处理环节的处理过程中,数据并不具有异态性的特征。
请结合图2C,显示了图1所示方法在流水线工作方式下通过排队方式实现调度的一个具体实施例,包括以下步骤:
SC1、预先为流水线的每一处理环节指定一处理器并为起始处理环节的指定处理器设置一缓存队列作为指定的缓存队列,其中,前一处理环节指定处理器的输出作为后一处理环节指定处理器的输入,因此,从该缓存队列输出的数据仅能够被流水线上相衔接的指定处理器所处理,如果任一环节的指定处理器忙,就需要一直等待,从而保证共享资源处理环节的串行访问;
SC2、对非从该缓存队列接收到的数据进行识别,涉及共享资源独占性访问,则执行步骤SC3,否则不涉及共享资源独占性访问,执行步骤SC5;
需要指出,在流水线工作方式下,进行数据识别的工作不一定要由执行数据处理的处理器进行,这种识别工作可能在前一处理环节就已经完成;
SC3、将涉及到共享资源独占性访问的数据输出到该指定的缓存队列中;
SC4、将该缓存队列的数据依次重新输入所述起始处理环节的指定处理器中,由该起始处理环节及之后处理环节的指定处理器依次进行包括共享资源独占性访问在内的处理;
SC5、由当前处理器及后续处理器直接进行数据处理。
可以看出,流水线处理方式下,缓存队列中的数据会重新进入流水线,由各级处理环节的指定处理器处理;较佳的,为了提高处理的效率,重新进入流水线的数据可以携带之前环节已经提取的信息,避免或者减少重复工作量。
需要指出的是,这种流水线排队处理方式是有一定的条件限制的,即要求程序在任何一级处理环节都能够实现数据控制,将其调度给指定的处理器来处理,因此,如果流水线芯片的各级处理器是由硬件自动调度,软件无法干预的话,这一方案将无法实现。
请结合图2D,显示了图1所示方法在流水线工作方式下通过限速方式实现调度的一个具体实施例,包括以下步骤:
SD1、预先设置一专用的缓存队列作为指定的缓存队列,此时,该缓存队列是独立设置的,即从该缓存队列输出的数据可能输出到多处理器的任意一个;
SD2、对非从该缓存队列接收到的数据进行识别,涉及共享资源独占性访问,则执行步骤SD3,否则不涉及共享资源独占性访问,执行步骤SD5;
同样的,在流水线工作方式下,进行数据识别的工作不一定要由执行数据处理的处理器进行,这种识别工作可能在前一处理环节就已经完成;
SD3、将涉及到共享资源独占性访问的数据输出到该指定的缓存队列中;
SD4、将缓存队列中的数据按照预设的速率,重新输入到起始处理环节中,由该起始处理环节及之后处理环节中接收到缓存队列输入的数据的处理器进行包括共享资源独占性访问在内的处理;其中,该预设的速率不大于数据完成共享资源独占性访问的速率;
SD5、由当前处理器及后续处理器直接进行数据处理。
由于步骤SD4中缓存队列发送数据的速率不大于完成共享资源独占性访问的速率,因此,在前一个涉及共享资源独占性访问的数据被处理完成时或者之后,下一个涉及共享资源独占性访问的数据才会进入;因此同一时刻,涉及共享资源独占性访问的环节至多有一个处理器在进行处理,因此不会出现共享资源的竞争,也无需进行令牌或者锁的调度。
在具体实现上,可以通过NP或者包处理器等具有硬件流量整形功能的设备,根据实际业务数据的处理速率经验值进行限速。较佳的,在保证不会发生资源抢占的情况下,为了提高处理性能,该限速速率的取值不应太小,比如,可以设定该速率不小于数据完成全部处理环节的速率,以免造成缓存队列中数据的长时间等待。
需要指出,上述实施例是以所有数据都涉及到同一共享资源独占性访问为例进行说明,对于涉及不同共享资源独占性抢占的数据,可以分别输入不同的缓存队列,每一缓存队列均采用上述实施例提供的技术方案。
本领域普通技术人员可以理解,上述方法适合于包括计算机数据处理、电信业务等等所有并行处理部分数据涉及共享资源独占性访问、部分数据不涉及共享资源独占性访问的异态性数据的场合,从而达到避免共享资源竞争、提高处理性能以及降低实现复杂度的目的。
为了便于理解,本发明还提供了使用上述方法进行NAT数据包处理的具体实施例。
其中,NAT数据包的处理过程中,NAT首包的处理涉及到了NAT地址资源的申请和NAT会话表的建立,即涉及到了共享资源的独占性访问,而NAT后续包的处理仅是简单的依照NAT会话表进行报文修改和转发,并未涉及到共享资源的独占性访问问题,因此在某些处理环节表现出了异态性数据的特征。
假设一个15M PPS处理能力的网络处理器,能够最大支持300KPPS的新建流;如果按现有技术来处理,如果有大于300KPPS的新建流到来时,处理器被新建流大量或者全部占用,同时被锁住等候资源释放,极有可能会导致与新建流混在一起的后续NAT数据包被严重阻塞,导致转发性能严重下降。特别是按照流水线工作方式进行并行处理的芯片,由于通常要求在上级流水线处理器加锁、在下级流水线处理器解锁,涉及多级流水线处理器的操作,严重影响流水线的处理效率,且容易出错。
本发明实施例所提供的异态性数据的并行方法通过保持一个处理器进行NAT首包的串行处理,其他处理器进行NAT后续包的并行处理,能够很好的解决上述问题。
由于排队工作方式较为本领域技术人员熟知,因此,这里就限速情况进行一简单介绍,其基本思路为控制NAT首包的报文流量,保证一个处理器能够完全完成NAT首包即新建流的处理,报文如果按照这个速率进入,就不会发生多个处理器同时进行NAT地址池竞争的情况。请结合图3,包括以下步骤:
(1)判断接收到的是NAT首包还是后续包,即将需要竞争共享资源的,性能低的新建流的数据包识别出来;具体识别步骤包括:
S01、对于接收到的NAT会话数据包,提取其IP五元组信息;
S02、根据该IP五元组信息执行NAT会话表查询;
S03、如果NAT会话表匹配失败,则该NAT会话数据包为NAT首包,执行以下步骤;如果匹配成功,则该NAT会话数据包为NAT后续包,根据该NAT会话表内容执行NAT转换后转发。
(2)接收到该NAT首包的处理器将其输出到指定的缓存队列中;
(3)进行流量整形,包速率V小于最大新建流的处理速率;这样,NAT首包的输出速率降低,保证同一时刻仅有一个处理器在接收处理,不会出现共享资源竞争的情况;
(4)经过整形的NAT首包再重新进入处理器进行新建流的流程处理,完成NAT地址资源的申请和会话表的创建,然后转发;
需要指出,在保证不会出现资源竞争的情况下,V的取值应尽可能大。
下面以一个按四级流水线方式工作的网络处理器使用图3所示NAT数据包处理方法的情况为例进行具体说明,请参见图4A:
当一个NAT首包进入时,报文内容提取环节的处理器从报文中得到查询NAT会话表的关键字,进入会话表项查询环节进行会话表查找;首包必然在NAT会话表中查询不到,因此查询表项处理环节的处理器将该NAT首包送入缓存队列进行流量整形后,再重新返回到流水线进行报文处理:对报文进行内容提取后,完成NAT新建流所必需的各种查表操作,然后根据查表结果进行NAT转换所需的地址和端口的获取,完成地址端口转换后,将报文发送出去;
对于后续包,报文内容提取环节的处理器从报文中得到查询NAT会话表的关键字,进入会话表项查询环节进行会话表查找;直接命中NAT会话表,完成地址转换后将报文发送出去。
可以看出,对于NAT数据包使用本发明进行处理后,无需使用令牌或者锁的机制,虽然对新建流性能会有所影响,但原来的方案加锁后实际也只有单引擎工作,所以影响并不大,同时能够极大地提高转发的性能,使得整体性能更为均匀。
同时需要指出,本实施例中是在流水线的查询表项处理环节将涉及共享资源独占性访问的数据输入到缓存队列,但对于一些不可中途退出的流水线芯片,则需要经历报文修改环节后再输入缓存队列,具体可以通过标记等方式实现直接通过,避免报文修改环节对其加以处理,如图4B所示。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括如下步骤:
S1、接收到涉及共享资源独占性访问的数据的任一处理器将所述数据输出到指定的缓存队列中;
S2、将所述指定的缓存队列中的数据按照排队或限速的方式重新输入所述多处理器,使同时至多一个处理器对其进行接收和处理。
所述的存储介质包括:ROM/RAM(Read Only Memory/Random-Access Memory,只读存储器/随机访问内存)、磁碟或者光盘等。
相应的,本发明还提供了异态性数据的并行处理装置的实施例。
请参见图5,显示了上述并行处理装置100的框图,包括为部分涉及共享资源独占性访问的异态性数据提供并行处理的多处理器101,还包括一与该多处理器101连接的缓存单元102,该缓存单元102包括缓存队列1021和发送模块1022。
其中,该多处理器101用于直接处理接收到的未涉及共享资源独占性访问的数据,以及,将接收到的涉及共享资源独占性访问的数据转发到缓存队列1021;
缓存队列1021用于缓存任一处理器101发送的涉及共享资源独占性访问的数据;
发送模块1022与缓存队列1021连接,用于将缓存队列1021中的数据按照排队或限速的方式重新输入多处理器101,使同时至多一个处理器对其进行接收和处理。
由上述提供的并行处理装置100,即使首次接收到涉及共享资源独占性访问的数据的处理器101为多个,由于其并不执行共享资源的独占性访问,因此无需进行处理器的挂起和等待操作,而是将涉及共享资源独占性访问的数据送入缓存队列1021之后即可进行下一数据的处理,不会产生处理瓶颈;
而通过发送模块1022的调度,同时至多一个处理器101进行涉及共享资源独占性访问的数据处理,实现的是共享资源的串行访问,能够保证不会发生共享资源竞争;由于在采用令牌或者锁的情况下,实际的共享资源独占性访问也是串行处理,因此,上述缓冲操作并不会降低涉及共享资源独占性访问的数据的处理效果;
以及,由于涉及共享资源独占性访问的数据仅占用一个处理器101,因此其它处理器101可以被解放出来进行不涉及共享资源独占性访问的数据处理,事实上大大提高了处理器并行处理的速度,使并行处理的性能更加均匀;
与此同时,由于不用在各处理器101之间进行令牌或者锁的申请、释放及交换,大大降低了代码的处理复杂度,实现起来的难度和成本大为降低。
作为具体的实施例,根据处理器101所处的不同处理环境(例如,流水线工作方式和非流水线工作方式)和采取的不同处理手段(例如,排队和限速),上述并行处理装置可以具有不同的实现方式。
在非流水线工作方式下,每个处理器101都会执行数据的完整处理操作,因此其本身设有数据识别功能,以区分数据是否涉及共享资源的独占性访问。
请结合图6A,显示了排队处理方式下并行处理装置100的一个具体实施例,该发送模块1022与一指定处理器101的输入连接,将涉及共享资源独占性访问的数据依次重新输入该指定的处理器中,由该指定的处理器对输入的数据进行包括共享资源独占性访问在内的处理。这也就意味着,从该缓存队列1021输出的数据仅能够被该指定处理器101所处理,如果指定的处理器101忙,就需要一直等待,从而保证共享资源的串行访问。
请结合图6B,显示了限速处理方式下并行处理装置100的一个具体实施例,该发送模块1022与多处理器101的输入连接,将涉及共享资源独占性访问的数据按照预设的速率,重新输入到多处理器101中,由接收到缓存队列1021输入的数据的处理器101进行包括共享资源独占性访问在内的处理;其中,预设的速率不大于数据完成处理器处理的速率。可以看出,这种输入是随机的,但由于速率设置的关系,只有在前一个涉及共享资源独占性访问的数据被处理完成后,下一个涉及共享资源独占性访问的数据才会进入;因此同一时刻,至多有一个处理器在进行共享资源的独占性访问,因此不会出现共享资源的竞争,也无需进行令牌或者锁的调度。
相对的,在流水线工作方式下,本发明所提到的处理器101可能仅会执行数据的有关共享资源独占性访问环节的处理操作,其可能本身设有数据识别功能,也可能在其前面环节设有专门进行数据识别的处理器,处理器101根据前面环节处理器的识别结果区分数据是否涉及共享资源的独占性访问。
请结合图6C,显示了排队处理方式下并行处理装置100的一个具体实施例。该流水线中前一处理环节指定处理器的输出作为后一处理环节指定处理器的输入,且发送模块1022与起始处理环节的一指定处理器连接,将涉及共享资源独占性访问的数据依次重新输入起始处理环节的指定处理器中,由起始处理环节及之后处理环节的指定处理器对缓存队列1021输入的数据依次进行包括共享资源独占性访问在内的处理。因此,从该缓存队列1021输出的数据仅能够被流水线上相衔接的指定处理器所处理,如果任一环节的指定处理器忙,就需要一直等待,从而保证共享资源处理环节的串行访问。
有必要指出的是,流水线排队处理的实现方案需要具备一定的条件才能够加以实现,即程序在任何一级处理环节都能够实现数据控制,将其调度给指定的处理器来处理,而不能够是硬件的自动调度。
请结合图6D,显示了限速处理方式下并行处理装置100的一个具体实施例。该发送模块1022与起始处理环节的并行处理器连接,将涉及共享资源独占性访问的数据按照预设的速率,重新输入到起始处理环节中,由起始处理环节及之后处理环节中接收到所述缓存队列1021输入的数据的处理器进行包括共享资源独占性访问在内的处理;其中,预设的速率不大于数据完成共享资源独占性访问的速率。
可以看出,在前一个涉及共享资源独占性访问的数据被处理完成时或者之后,下一个涉及共享资源独占性访问的数据才会进入;因此同一时刻,涉及共享资源独占性访问的环节至多有一个处理器在进行处理,因此不会出现共享资源的竞争,也无需进行令牌或者锁的调度。较佳的,为了避免缓存队列1021中数据过长时间等待,可以设置预设的速率不小于数据完成全部处理环节的速率。
本领域普通技术人员可以理解,上述方法适合于包括计算机数据处理、电信业务等等所有并行处理部分数据涉及共享资源独占性访问、部分数据不涉及共享资源独占性访问的异态性数据的场合,从而达到避免共享资源竞争、提高处理性能以及降低实现复杂度的目的。
为了便于理解,本发明还提供了使用上述方法进行NAT数据包处理的具体实施例。
并行处理装置100采用流水线工作方式,依次包括进行报文元素提取的多处理器、进行表项查找的多处理器、进行表项结果处理的多处理器101以及进行报文修改的多处理器;其中,进行表项结果处理的多处理器101与缓存单元102连接,缓存单元102与进行报文元素提取的多处理器连接;进行表项结果处理的多处理器101用于将NAT首包发送给缓存单元102,将NAT后续包发送给进行报文修改的多处理器执行NAT转换后转发,以及,对于从缓存单元102重新输入的NAT首包,进行NAT地址资源的申请和NAT会话表的创建,并发送给进行报文修改的多处理器执行NAT转换后转发。
通过上述并行处理装置100,无需使用锁,就可以避免对NAT地址池的抢占,不会对新建流的处理构成大的影响,同时能够保证后续包的转发性能,降低实现难度,使NAT业务的整体处理性能更为均匀。
虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。