CN109120550B - 一种无锁化处理方法和装置 - Google Patents
一种无锁化处理方法和装置 Download PDFInfo
- Publication number
- CN109120550B CN109120550B CN201810790841.5A CN201810790841A CN109120550B CN 109120550 B CN109120550 B CN 109120550B CN 201810790841 A CN201810790841 A CN 201810790841A CN 109120550 B CN109120550 B CN 109120550B
- Authority
- CN
- China
- Prior art keywords
- thread
- stream
- timeout treatment
- time
- overtime
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/622—Queue service order
- H04L47/6225—Fixed service order, e.g. Round Robin
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/625—Queue scheduling characterised by scheduling criteria for service slots or service orders
- H04L47/627—Queue scheduling characterised by scheduling criteria for service slots or service orders policing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/02—Capturing of monitoring data
- H04L43/028—Capturing of monitoring data by 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
本发明涉及计算机数据处理技术领域,提供了一种无锁化处理方法和装置。其中方法包括流超时闭环队列、流超时处理线程和包处理线程;所述流超时处理线程与包处理线程之间相差预设的超时间隔,流超时处理线程按照预设的时间间隔ts在所述流超时闭环队列中的各节点位置间跳转;包处理线程,采用与所述流超时处理线程同步的跳转速度实现在所述流超时闭环队列中各节点位置间跳转。本发明提高性能并节省资源,避免了多线程同时访问流超时队列时写冲突或者采用锁机制引入的性能问题。避免多线程场景使用多个流超时队列,降低资源开销,降低代码和处理流程复杂度。
Description
【技术领域】
本发明涉及计算机数据处理技术领域,特别是涉及一种无锁化处理方法和装置。
【背景技术】
网络流量经过网关/DPI设备是,会根据会话五元组(源IP、源Port、目的IP、目的Port和协议)建立一条会话流(Flow)。但是这条流是有生命周期的,需要有超时回收机制。
DPI设备通常有多张收包网卡,每张收包网卡收包后对应多个处理线程来处理收到的包,对于网络包中,每个新的会话,会新建一条流,新建的流会添加到超时处理队列,超时线程会处理超时队列中的流,在超时处理线程中当流会话结束(TCP会话收到FIN/RST包)或者流超时(流超过预设的空闲超时时间)时会被删除,如图1所示。多个包处理线程添加流到流超时处理队列时需要做保护,否则将会导致写覆盖,造成数据丢失或数据异常。
传统方法一般采用如下两种:
1、一个流表超时队列,所有的收包处理线程创建的流都添加到流表超时队列,通过加互斥锁来解决并发写的问题。该方案缺点是互斥锁会导致性能瓶颈,所有包处理线程在添加流表超时队列时串行处理。
2、多个流表超时队列,每个收包处理线程创建一个流表超时队列,避免并发添加到流表超时队列时发生冲突。该方案缺点是要维护多个流表超时队列,每个包处理线程必须对应1个流表超时队列,当收包口或包处理线程增多时,也对应的需要增加流表超时队列。
鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
【发明内容】
本发明要解决的技术问题是避免背景技术中方法1中涉及的互斥锁会导致性能瓶颈,所有包处理线程在添加流表超时队列时串行处理;以及背景技术中方法2中涉及的维护多个流表超时队列,每个包处理线程必须对应1个流表超时队列,当收包口或包处理线程增多时,也对应的需要增加流表超时队列,带来计算资源的浪费。
本发明采用如下技术方案:
第一方面,本发明提供了一种无锁化处理方法,用于流超时闭环队列、一个或者多个流超时处理线程和一个或者多个包处理线程;其中,所述流超时闭环队列用于存储在对应各时间节点上获取的流数据的标识信息;所述一个或者多个流超时处理线程与所述一个或者多个包处理线程之间相差预设的超时间隔,方法包括:
所述一个或者多个流超时处理线程按照预设的时间间隔ts在所述流超时闭环队列中的各节点位置间跳转;所述一个或者多个流超时处理线程,对于其抵达的节点中存储的标识信息所对应的流数据进行超时处理;
所述一个或者多个包处理线程,采用与所述流超时处理线程同步的跳转速度实现在所述流超时闭环队列中各节点位置间跳转;所述包处理线程用于在网卡接收到数据包的时候,将相应数据内容存储到当前包处理线程所指向的节点位置中标识信息所标定的存储区域。
优选的,所述流超时处理线程比对所述超时处理所用时间ti和所述预设的时间间隔ts,
若ti>ts,则按照长度为1的跳转参数值调整所述流超时处理线程;并进入流超时处理补时环节;在所述流超时处理补时环节中,后续处理的一个或者多个流超时处理线程在完成流超时处理便跳转,直到ti-ts的超时部分的时间被补偿回来,然后恢复比对所述流超时处理所用时间ti和所述预设的时间间隔ts的判断过程;
若ti<ts,在等待当前节点位置的停留时长达到ts时,按照长度为1的跳转参数值,调整所述流超时处理线程。
优选的,所述包处理线程的跳转位置和/或流超时处理线程的跳转位置具体根据以下公式计算得到:
POSx=计算得到的理论跳转量%tmout_queue_size;其中,tmout_queue_size为流超时闭环队列的总的节点位置数量,计算得到的理论跳转量包括包处理线程的理论跳转量或者流超时处理线程的理论跳转量。
优选的,在超时参数值为tc时,所述预设的超时间隔具体由tc/ts个节点位置构成。
优选的,具体的:
用于存储有效标识信息的各节点位置之间,均设置有缓冲带proc_flex;其中,所述缓冲带proc_flex由预设数量的空置节点构成;
则每次在进行包处理线程所对应节点位置间跳转时,跳转的距离额外加上所述缓冲带proc_flex长度。
优选的,在所述流超时处理线程数量具体为一条时,初始状态时所述流超时处理线程指向的流超时闭环队列中的节点位置为起始位置;而相对应的所述一个或者多个包处理线程中的首个包处理线程所指向的流超时闭环队列中的节点位置为起始位置+tc/ts计算得到;其它包处理线程所执行的流超时闭环队列中的节点位置为起始位置+tc/ts+thread_idx*proc_flex计算得到,其中,thread_idx为后续包处理线程的序号,在首个包处理线程序号为0的基础上,其它后续包处理线程的序号thread_idx依次相差1。
优选的,在所述超时处理的速度小于或者等于一个或者多个包处理线程生成流数据链的速度,则所述方法还包括:
设置N个流超时处理线程,其中,所述N个流超时处理线程的总速度大于等于一个或者多个包处理线程生成流数据链的速度;
其中,对应各流超时处理线程设置有一超时处理任务状态栏,所述超时处理任务状态栏实时更新各流超时处理线程所处理的节点位置的标识信息,以便各流超时处理线程在完成各自节点位置的超时处理后,能够根据所述超时处理任务状态栏确定下一个等待其超时处理的节点位置。
优选的,所述流超时处理线程在执行对应第j节点的超时处理时,具体包括:
流超时处理线程确认第j节点所对应的流数据是否在完成存储后被访问过;
若确认被访问过,则根据被访问时间,计算从被访问时间起抵达超时时间所需经过的节点位置数量M,并将所述被访问过的流数据,转移到根据所述节点位置数量M确定的目标节点位置所对应的存储区域。
优选的,所述标识信息具体为:与存储区域建立有映射关系的地址指针、存储区域的地址信息或存储区域的接口参数值。
第二方面,本发明还提供了一种无锁化处理装置,用于实现第一方面所述的无锁化处理方法,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行第一方面所述的无锁化处理方法。
第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的无锁化处理方法。
本发明直接通过在流超时闭环队列引入对应预设超时时间的超时间隔,并通过实现流超时处理线程和包处理线程跳转速度的同步,从而完成了在一个闭环空间范围内的流数据的载入和流超时的处理之间相差的时间即为预设的超时时间,其中,流超时处理线程跳转完所述超时间隔所需的时间即为所述超时时间。本发明提高性能并节省资源,避免了多线程同时访问流超时队列时写冲突或者采用锁机制引入的性能问题。避免多线程场景使用多个流超时队列,降低资源开销,降低代码和处理流程复杂度。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的现有技术中的一种收包网卡和流超时对应结构关系图;
图2是本发明实施例提供的一种无锁化处理方法的流程示意图;
图3是本发明实施例提供的一种流超时闭环队列的结构效果示意图;
图4是本发明实施例提供的一种流超时处理完后线程跳转操作流程示意图;
图5是本发明实施例提供的另一种流超时处理完后线程跳转操作流程示意图;
图6是本发明实施例提供的另一种流超时闭环队列的结构效果示意图;
图7是本发明实施例提供的一种变化后的流超时闭环队列的结构效果示意图;
图8是本发明实施例提供的一种变化后的流超时闭环队列的结构效果示意图;
图9是本发明实施例提供的一种无锁化处理装置的结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
在本发明实施例中,给予以下概念定义描述:
流:根据会话五元组(包括源IP、源Port、目的IP、目的Port和协议)建流的一条记录。
流超时闭环队列:包处理线程添加流信息到队列,并且,由流超时处理线程来对流做超时处理并从队列移除。
包处理线程:负责处理网卡接收到的网络数据包,根据五元组信息建流,并将流添加到流超时闭环队列。一台设备多张网卡,每个网卡对应多个包处理线程。
流超时处理线程:确定流是否超时,如果流超时,则将流移除、释放等等;在具体实现过程中还会涉及流数据被访问情况,则流超时处理线程还会计算预计超时时间,将该流信息挂在后续的节点上。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
本发明实施例1提供了一种无锁化处理方法,用于流超时闭环队列、一个或者多个流超时处理线程和一个或者多个包处理线程;其中,所述流超时闭环队列用于存储在对应各时间节点上获取的流数据的标识信息,所述标识信息具体为:与存储区域建立有映射关系的地址指针、存储区域的地址信息或存储区域的接口参数值。所述一个或者多个流超时处理线程与所述一个或者多个包处理线程之间相差预设的超时间隔。在本发明实施例中,所述流超时闭环队列并非用于存储流数据的,而是用于存储标识所述存储流数据的地址的标识信息,这样处理的优势是能够与本发明实时中所涉及的流超时处理线程和包处理线程的跳转动作相呼应,从而形成一套轻量级的变换过程,并且,本发明实施例所提出的超时间隔也需要一个可以明确界定大小的对象(即流超时闭环队列中的各节点位置);现实环境中存储包数据的存储空间通常是不固定,而相应的在同一时间收到的多个包数据也可能是以一种链表的方式存储,具体存储位置是无法作为上述流超时闭环队列中各节点位置有效的界定对象的。如图2所示,方法包括:
在步骤201中,一个或者多个流超时处理线程按照预设的时间间隔ts在所述流超时闭环队列中的各节点位置间跳转;所述一个或者多个流超时处理线程,对于其抵达的节点中存储的标识信息所对应的流数据进行超时处理。其中,数据包在被包处理线程处理并完成存储后,便被成为流数据(具体表现方式为流数据链),以便于后续的流超时处理线程的描述更为紧凑。
其中,流超时处理线程的数量通常是由一超时处理任务的时间复杂度、预设时间范围内的最高的超时任务数据总量(通常可以根据历史操作经验统计出来)来决定。其中,超时处理任务的时间复杂度越高,对于单一流超时处理线程的任务负担也会越重;而最高的超时任务数据总量越大,则同样表征着需要多少个超时处理任务,才能够在预设时间范围内完成相应数量的超时任务。在本发明实施例中,优选的是处理完成超时处理任务的能力大于包处理线程完成数据包写入的能力,简单的理解,便是流超时处理线程处理预设时间范围内的最高的超时任务数据总量的速度,相比包处理线程写入相应数据包的速度快,并且,流超时处理线程处理单个节点位置中超时任务的时间小于预设的时间间隔ts,包处理线程写入最小单位数据流包的时间小于预设的时间间隔ts,此时,跳转表现出的实现方式也是最简单的,即每次流超时处理线程和包处理线程在完成各自任务后,等待ts时间到达后,进行一轮跳转动作。
其中,最高的超时任务数据总量通常也跟物理网卡(或者虚拟网卡)的数量多少有关,上述流超时处理线程通常是根据经验给与初始值,并在使用和测试的过程中进行调整,从而得到当前网络应用环境下最合适的流超时处理线程。
在步骤202中,一个或者多个包处理线程,采用与所述流超时处理线程同步的跳转速度实现在所述流超时闭环队列中各节点位置间跳转;所述包处理线程用于在网卡接收到数据包的时候,将相应数据内容存储到当前包处理线程所指向的节点位置中标识信息所标定的存储区域。
其中,包处理线程的数量即图1中标注的收包处理线程所示,其数量通常是跟物理网卡(即图1中标注为eth1,eth2,…,eth6的对象)的数量关联,通常一个物理网卡会配备一个或者多个包处理线程。
本发明实施例直接通过在流超时闭环队列引入对应预设超时时间的超时间隔,并通过实现流超时处理线程和包处理线程跳转速度的同步,从而完成了在一个闭环空间范围内的流数据的载入和流超时的处理之间相差的时间即为预设的超时时间,其中,流超时处理线程跳转完所述超时间隔所需的时间即为所述超时时间。本发明提高性能并节省资源,避免了多线程同时访问流超时队列时写冲突或者采用锁机制引入的性能问题。避免多线程场景使用多个流超时队列,降低资源开销,降低代码和处理流程复杂度。
如图3所示,为针对本发明实施例所提供的一种流超时闭环队列的结构示意图,从图3中可以看到,相应示意结构中所采用的流超时处理线程tmout_proc_thread数量为一个,而包处理线程pkt_proc_thread的数量为两个(可以简单认为举例环境中采用了2个物理网卡,并且每一个物理网卡给予了一个包处理线程的设定)。图3是将流超时闭环队列展平后的效果示意图,其中首节点POS0和尾节点POSk+n(其中,k和n分别为POS的位置下标值,例如POS0代表该流超时闭环队列所设定的起始位置)两者之间的互相衔接的,所述包处理线程的跳转位置和/或流超时处理线程的跳转位置具体根据以下公式计算得到:POSx=计算得到的理论跳转量%tmout_queue_size;其中,x为POS的位置下标值,其取值根据等式右侧计算结果转换得到(例如计算得到的理论跳转量%tmout_queue_size=6,则相应的x取值为5,因为POS的位置下标值是从0开始计数的),tmout_queue_size为流超时闭环队列的总的节点位置数量,计算得到的理论跳转量包括包处理线程的理论跳转量或者流超时处理线程的理论跳转量,所述“%”为取余计算符,基于上述关系式便可以让整个计算过程在未达到清零点(即线性跳转总量过大时,通常会采用抵达指定值便进行清零操作)的时候一直按照一种线性跳转方式计算,从而简化了计算过程。图3给予了一种初始状态下流超时处理线程tmout_proc_thread所指向节点位置和包处理线程pkt_proc_thread所指向节点位置的效果示意图,初始状态时所述流超时处理线程tmout_proc_thread指向的流超时闭环队列中的节点位置为起始位置;而相对应的所述一个或者多个包处理线程pkt_proc_thread中的首个包处理线程所指向的流超时闭环队列中的节点位置为起始位置+tc/ts(其中,超时间隔=tc/ts个节点个数,所述tc为超时参数值)计算得到。
在本发明实施例实现过程中,所述流超时处理线程和所述包处理线程在进行跳转的时候,在理想情况下若超时处理所用时间ti均小于预设的时间间隔ts,那么处理起来也就最方便了,即每次超时处理之后,等待预设的时间间隔ts的计时结束便进行一轮流超时处理线程和所述包处理线程各自的跳转行为。然而,实际情况则比上述理想情况更为复杂,即为了保证包数据存储的分散性和管理的便利性,要求所述预设的时间间隔ts尽可能小,因为,如果所述预设的时间间隔ts过大,则会造成一个节点位置上存储的数据链表总大小过大,从而为后续的超时处理带来困难,尤其是超时处理不仅仅是由包数据删除这种简单操作构成时。因此,结合本发明实施例,还存在一种优选的实现方案,用于对实际可能产生的复杂情况进行有规律的处理,如图4所示,具体的:
在步骤301中,在每一次执行完流超时处理时,流超时处理线程比对所述超时处理所用时间ti和所述预设的时间间隔ts。
在步骤302中,若ti>ts,则按照长度为1的跳转参数值调整所述流超时处理线程;并进入步骤303的流超时处理补时环节;
在步骤303中,后续处理的一个或者多个流超时处理线程在完成流超时处理便跳转,直到ti-ts的超时部分的时间被补偿回来,然后恢复比对所述流超时处理所用时间ti和所述预设的时间间隔ts的判断过程。
其中,在流超时处理补时环节,每一次执行完后续处理的一个或者多个流超时处理任务,仍然会进行超时处理所用时间ti和所述预设的时间间隔ts的差值计算,从而确定剩余补充的距离;但是,此时,所述的进行超时处理所用时间ti和所述预设的时间间隔ts的差值计算与上述的恢复比对所述流超时处理所用时间ti和所述预设的时间间隔ts的判断过程并不相同,所述恢复比对所述流超时处理所用时间ti和所述预设的时间间隔ts的判断过程是指重新回到步骤301执行相关联步骤内容。
在步骤304中,若ti<ts,在等待当前节点位置的停留时长达到ts时,按照长度为1的跳转参数值,调整所述流超时处理线程。
对于应用场景中包含多个线程的情况,各线程在执行完超时处理所使用的时间存在一定差异,因此,为了克服上述多处理器存在可能发生的访问冲突问题,结合本发明实施例还存在一种优选的实现方案,具体的:
用于存储有效标识信息的各节点位置之间,均设置有缓冲带proc_flex;其中,所述缓冲带proc_flex由预设数量的空置节点构成;
其实现原理是,是避免两个相邻的包处理线程,虽然同时在满足预设时间间隔ts跳转,但是,因为线程之间可能存在的跳转动作执行速度的不一致,存在发生前一个包处理线程没有跳转完成,而后一个包处理线程已经完成跳转,造成两个包处理线程处理冲突的情况发生。此时,以上述步骤301-304为例,当加入所述缓冲带proc_flex后,具体表述为如图5(相比较301-304做了进一步的展开)所示:
在步骤301’中,在每一次执行完流超时处理时,流超时处理线程比对所述超时处理所用时间ti和所述预设的时间间隔ts。
在步骤302’中,若ti>ts,则按照长度为1的跳转参数值调整所述流超时处理线程;并进入步骤303’的流超时处理补时环节;若ti<ts,则进入步骤305’。
在步骤303’中,后续处理的一个或者多个流超时处理线程在完成流超时处理便跳转。
在步骤304’中,比对所述超时处理所用时间ti和所述预设的时间间隔ts,确认ti-ts的超时部分的时间是否被补偿回来,若补偿回来了则回到步骤301’,若未补偿回来则回到步骤303’。
其中,ti仅仅是各超时处理所用时间的标识对象,其中,对应不同的超时处理任务,其中i的具体取值也相应变更。例如:对于节点位置为POS0上的超时处理所用时间,所述ti具体表现为t0,而对于节点位置为POS1上的超时处理所用时间,所述ti具体表现为t1,以此类推。
在步骤305’中,在等待当前节点位置的停留时长达到ts时,按照长度为1的跳转参数值,调整所述流超时处理线程。
缓冲带proc_flex对于上述流超时处理线程的超时处理(步骤301’-步骤305’)来说没有直观的影响,其主要影响的是包处理线程。后续将在实施例2中具体展开阐述所述缓冲带proc_flex对包处理线程带来的处理过程的变化。
结合本发明实施例,还存在一种情况,即被包处理线程存储到对应节点位置的相应存储区域后,并且,在超时之前该流数据又被访问过,此时,按照优选的超时规则,相应节点下的流数据,应当被重新挂在到以其被访问时间为起始时间,并且相隔超时间隔距离的另一节点位置之下,因此,结合本发明实施例还存在一种优选的实现方案,用于实现上述过程,所述流超时处理线程在执行对应第j节点的超时处理时,具体包括:
流超时处理线程确认第j节点所对应的流数据是否在完成存储后被访问过;
若确认被访问过,则根据被访问时间,计算从被访问时间起抵达超时时间所需经过的节点位置数量M,并将所述被访问过的流数据,转移到根据所述节点位置数量M确定的目标节点位置所对应的存储区域。
实施例2:
本发明实施例,具体在实施例1基础上,以所述流超时处理线程数量具体为一条时,进行阐述本发明中相关的实现细节注重点、差异点,在本发明实施例中,以设置有缓冲带proc_flex为具体环境具备要素之一,如图6所示,具体的:
初始状态时所述流超时处理线程指向的流超时闭环队列中的节点位置为起始位置;而相对应的所述一个或者多个包处理线程中的首个包处理线程所指向的流超时闭环队列中的节点位置为起始位置+tc/ts计算得到;其它包处理线程所执行的流超时闭环队列中的节点位置为起始位置+tc/ts+thread_idx*proc_flex计算得到,其中,thread_idx为后续包处理线程的序号,在首个包处理线程序号值为0的基础上,其它后续包处理线程的序号thread_idx依次相差1(如图6中所示的thread_idx0=0和thread_idx1=1)。
如图6所述,假设所述proc_flex的长度为三个节点位置,则从图6所示的初始位置,在完成一轮预设时间间隔ts计时后,相应的thread_idx0和thread_idx1向下一个节点位置跳转,对应跳转后的效果示意图如图7所示,其中,thread_idx0从初始的POSk跳转到POSk+1位置上(如图7中对应thread_idx0的箭头指向位置所示),而相应的thread_idx1从初始的POSk+proc_flex跳转到POSk+proc_flex+1上(如图7中对应thread_idx1的箭头指向位置所示),此时,tmout_proc_thread也由初始的POS0跳转到了POS1,从图中可以看到抵达同一预设时间间隔ts时,各包处理线程和流超时处理线程的步进是同步的。需要指出来的时,在实际处理过程中,所述预设时间间隔ts远小于超时时间tc(例如:所述tc取30s,相应的ts取1ms),因此,对于如图7所示的单一流超时处理线程在完成图7中所示POSk~POSk+proc_flex所需的时间在允许的超时误差范围内,则可以保证整个无锁化处理方法能够复合设计要求,稳定的运行下去。即通过设定的超时间隔和预设时间间隔,保证了流超时处理线程和包处理线程之间在流超时闭环队列中各节点位置间跳转的步进速度的一致性,又基于超时间隔和预设时间间隔本身就是根据超时时间计算得到的,从而避免了针对每一个节点位置的超时统计,提高了计算机资源的使用效率。
如图8所示,在图7所示的初始状态下,经过4轮跳转后,所述thread_idx0包处理线程来到了初始状态时thread_idx1所在的位置,此时,thread_idx0会在POSk+proc_flex节点位置所对应的数据链表后端继续完成数据写入;而此时,方案所设置的proc_flex长度可以满足tmout_proc_thread流超时处理线程在处理完POSk~POSk+proc_flex(即从POSk位置的流数据超时处理开始,一致完成到POSk+proc_flex位置的流数据超时处理结束)所需的时间在允许的超时误差范围内。根据上述列举的参数为例,所述tc取30s,相应的ts取1ms,则此时的超时误差在4ms左右。
实施例3:
本发明实施例,具体在实施例1基础上,以所述流超时处理线程数量具体为多个时进行阐述。之所以要设置多个流超时处理线程,通常是因为在所述超时处理的速度小于或者等于一个或者多个包处理线程生成流数据链的速度,则所述方法还包括:
设置N个流超时处理线程,其中,所述N个流超时处理线程的总速度大于等于一个或者多个包处理线程生成流数据链的速度;
其中,对应各流超时处理线程设置有一超时处理任务状态栏,所述超时处理任务状态栏实时更新各流超时处理线程所处理的节点位置的标识信息,以便各流超时处理线程在完成各自节点位置的超时处理后,能够根据所述超时处理任务状态栏确定下一个等待其超时处理的节点位置。
其中,所述超时处理任务状态栏用于记录各流超时处理线程正在处理节点位置信息,从而保证若有流超时处理线程提前完成流超时处理后,能够识别哪些节点正处于其它流超时处理节点处理过程中,从而避免流超时处理冲突的发生。
实施例4:
如图9所示,是本发明实施例的无锁化处理装置的架构示意图。本实施例的无锁化处理装置包括一个或多个处理器21以及存储器22。其中,图9中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图9中以通过总线连接为例。
存储器22作为一种无锁化处理方法和装置非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的无锁化处理方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行无锁化处理装置的各种功能应用以及数据处理,即实现实施例1、2和3的无锁化处理方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的无锁化处理方法,例如,执行以上描述的图2、4、5所示的各个步骤。
值得说明的是,上述装置的单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例1、2和3基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种无锁化处理方法,其特征在于,用于流超时闭环队列、一个或者多个流超时处理线程和一个或者多个包处理线程;其中,所述流超时闭环队列用于存储在对应各时间节点上获取的流数据的标识信息;所述一个或者多个流超时处理线程与所述一个或者多个包处理线程之间相差预设的超时间隔,方法包括:
所述一个或者多个流超时处理线程按照预设的时间间隔ts在所述流超时闭环队列中的各节点位置间跳转;所述一个或者多个流超时处理线程,对于其抵达的节点中存储的标识信息所对应的流数据进行超时处理;
所述一个或者多个包处理线程,采用预设的时间间隔ts在所述流超时闭环队列中各节点位置间跳转;所述包处理线程用于在网卡接收到数据包的时候,将相应数据内容存储到当前包处理线程所指向的节点位置中标识信息所标定的存储区域。
2.根据权利要求1所述的无锁化处理方法,其特征在于,所述流超时处理线程比对所述超时处理所用时间ti和所述预设的时间间隔ts,
若ti>ts,则按照长度为1的跳转参数值调整所述流超时处理线程;并进入流超时处理补时环节;在所述流超时处理补时环节中,后续处理的一个或者多个流超时处理线程在完成流超时处理便跳转,直到ti-ts的超时部分的时间被补偿回来,然后恢复比对所述流超时处理所用时间ti和所述预设的时间间隔ts的判断过程;
若ti<ts,在等待当前节点位置的停留时长达到ts时,按照长度为1的跳转参数值,调整所述流超时处理线程;然后恢复比对所述流超时处理所用时间ti和所述预设的时间间隔ts的判断过程。
3.根据权利要求1所述的无锁化处理方法,其特征在于,所述包处理线程的跳转位置和/或流超时处理线程的跳转位置具体根据以下公式计算得到:
POSx=计算得到的理论跳转量%tmout_queue_size;其中,tmout_queue_size为流超时闭环队列的总的节点位置数量,计算得到的理论跳转量包括包处理线程的理论跳转量或者流超时处理线程的理论跳转量;其中,所述“%”为取余计算符。
4.根据权利要求1所述的无锁化处理方法,其特征在于,在超时时间参数值为tc时,所述预设的超时间隔具体由tc/ts个节点位置构成。
5.根据权利要求4所述的无锁化处理方法,其特征在于,具体的:
用于存储有效标识信息的各节点位置之间,均设置有缓冲带proc_flex;其中,所述缓冲带proc_flex由预设数量的空置节点构成;
则每次在进行包处理线程所对应节点位置间跳转时,跳转的距离额外加上所述缓冲带proc_flex长度。
6.根据权利要求5所述的无锁化处理方法,其特征在于,在所述流超时处理线程数量具体为一条时,初始状态时所述流超时处理线程指向的流超时闭环队列中的节点位置为起始位置;而相对应的所述一个或者多个包处理线程中的首个包处理线程所指向的流超时闭环队列中的节点位置为起始位置+tc/ts计算得到;其它包处理线程所执行的流超时闭环队列中的节点位置为起始位置+tc/ts+thread_idx*proc_flex计算得到,其中,thread_idx为后续包处理线程的序号,在首个包处理线程序号为0的基础上,其它后续包处理线程的序号thread_idx依次相差1。
7.根据权利要求1所述的无锁化处理方法,其特征在于,在所述超时处理的速度小于或者等于一个或者多个包处理线程生成流数据链的速度,则所述方法还包括:
设置N个流超时处理线程,其中,所述N个流超时处理线程的总速度大于等于一个或者多个包处理线程生成流数据链的速度;
其中,对应各流超时处理线程设置有一超时处理任务状态栏,所述超时处理任务状态栏实时更新各流超时处理线程所处理的节点位置的标识信息,以便各流超时处理线程在完成各自节点位置的超时处理后,能够根据所述超时处理任务状态栏确定下一个等待其超时处理的节点位置。
8.根据权利要求1所述的无锁化处理方法,其特征在于,所述流超时处理线程在执行对应第j节点的超时处理时,具体包括:
流超时处理线程确认第j节点所对应的流数据是否在完成存储后被访问过;
若确认被访问过,则根据被访问时间,计算从被访问时间起抵达超时时间所需经过的节点位置数量M,并将所述被访问过的流数据,转移到根据所述节点位置数量M确定的目标节点位置所对应的存储区域。
9.根据权利要求1-8任一所述的无锁化处理方法,其特征在于,所述标识信息具体为:与存储区域建立有映射关系的地址指针、存储区域的地址信息或存储区域的接口参数值。
10.一种无锁化处理装置,其特征在于,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行权利要求1-9任一所述的无锁化处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810790841.5A CN109120550B (zh) | 2018-07-18 | 2018-07-18 | 一种无锁化处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810790841.5A CN109120550B (zh) | 2018-07-18 | 2018-07-18 | 一种无锁化处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109120550A CN109120550A (zh) | 2019-01-01 |
CN109120550B true CN109120550B (zh) | 2019-10-08 |
Family
ID=64862193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810790841.5A Active CN109120550B (zh) | 2018-07-18 | 2018-07-18 | 一种无锁化处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109120550B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104363115A (zh) * | 2014-10-30 | 2015-02-18 | 任子行网络技术股份有限公司 | 一种dpi无锁流状态管理方法及*** |
CN105700939A (zh) * | 2016-04-21 | 2016-06-22 | 北京京东尚科信息技术有限公司 | 一种分布式***中多线程同步的方法和*** |
WO2017166777A1 (zh) * | 2016-03-29 | 2017-10-05 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN107239378A (zh) * | 2016-03-29 | 2017-10-10 | 北京忆恒创源科技有限公司 | 一种超时监测方法及*** |
CN107947960A (zh) * | 2017-10-13 | 2018-04-20 | 用友网络科技股份有限公司 | 配置信息的推送方法及***、配置信息的接收方法及*** |
-
2018
- 2018-07-18 CN CN201810790841.5A patent/CN109120550B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104363115A (zh) * | 2014-10-30 | 2015-02-18 | 任子行网络技术股份有限公司 | 一种dpi无锁流状态管理方法及*** |
WO2017166777A1 (zh) * | 2016-03-29 | 2017-10-05 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN107239378A (zh) * | 2016-03-29 | 2017-10-10 | 北京忆恒创源科技有限公司 | 一种超时监测方法及*** |
CN105700939A (zh) * | 2016-04-21 | 2016-06-22 | 北京京东尚科信息技术有限公司 | 一种分布式***中多线程同步的方法和*** |
CN107947960A (zh) * | 2017-10-13 | 2018-04-20 | 用友网络科技股份有限公司 | 配置信息的推送方法及***、配置信息的接收方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN109120550A (zh) | 2019-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Thiele et al. | Design space exploration of network processor architectures | |
US7555579B2 (en) | Implementing FIFOs in shared memory using linked lists and interleaved linked lists | |
US20180123983A1 (en) | Programmable Broadband Gateway Hierarchical Output Queueing | |
US6947425B1 (en) | Multi-threaded sequenced transmit software for packet forwarding device | |
US7292594B2 (en) | Weighted fair share scheduler for large input-buffered high-speed cross-point packet/cell switches | |
CN103309738B (zh) | 用户作业调度方法及装置 | |
CN105005546A (zh) | 一种内置交点队列的异步axi总线结构 | |
CN109246031A (zh) | 一种交换机端口流量排队方法和装置 | |
WO2014099267A1 (en) | Parallel processing using multi-core processor | |
CN105794161B (zh) | 用于飞行器的数据通信网络 | |
CN109688069A (zh) | 一种处理网络流量的方法、装置、设备及存储介质 | |
CN104978321B (zh) | 构造数据队列的方法、装置及从其***和消费对象的方法 | |
CN104579862A (zh) | 用于飞机的数据通信网络 | |
CN109347884A (zh) | 一种实时以太网到现场总线的转换方法及装置、存储介质 | |
CN109254726A (zh) | 分布式存储***中服务质量保障方法、控制节点及*** | |
CN110214436A (zh) | 一种多核无锁速率限制装置和方法 | |
CN106105098B (zh) | 交换机及业务请求报文的处理方法 | |
CN115361333B (zh) | 一种基于QoS边缘自适应的网云融合信息传输方法 | |
CN109218227A (zh) | 一种网络数据包处理方法和装置 | |
CN109120550B (zh) | 一种无锁化处理方法和装置 | |
CN106375249A (zh) | 交换芯片数据架构、其控制方法及控制*** | |
CN108989233A (zh) | 拥塞管理方法及装置 | |
CN100361084C (zh) | 用于利用门管理器维护实体顺序的方法和装置 | |
JPH02296431A (ja) | 通信ネツトワークアクセス方法及び装置 | |
Yun et al. | Transport-support workflow composition and optimization for big data movement in high-performance networks |
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 |