CN101854302A - 报文保序方法及系统 - Google Patents

报文保序方法及系统 Download PDF

Info

Publication number
CN101854302A
CN101854302A CN201010190599A CN201010190599A CN101854302A CN 101854302 A CN101854302 A CN 101854302A CN 201010190599 A CN201010190599 A CN 201010190599A CN 201010190599 A CN201010190599 A CN 201010190599A CN 101854302 A CN101854302 A CN 101854302A
Authority
CN
China
Prior art keywords
message
thread
order
preserving
sequence number
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.)
Granted
Application number
CN201010190599A
Other languages
English (en)
Other versions
CN101854302B (zh
Inventor
曹彪
刘志远
赵丰收
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201010190599.1A priority Critical patent/CN101854302B/zh
Publication of CN101854302A publication Critical patent/CN101854302A/zh
Application granted granted Critical
Publication of CN101854302B publication Critical patent/CN101854302B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种报文保序方法及系统,该方法包括以下步骤:多个线程竞争原子锁;得到该原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放该原子锁。通过本发明完善了保序处理。

Description

报文保序方法及系统
技术领域
本发明涉及通信领域,具体而言,涉及一种报文保序方法及系统。
背景技术
通讯网络设备的基本功能是转发报文,在保证转发性能的情况下,还必须保证报文的转发质量(例如,保证报文转发的低时延、低抖动等)。此外,对于一些用户业务的报文(例如用户语音、视频等)还必须保证报文转发的顺序(简称为保序),即同一个数据流的报文从进入网络设备到离开网络设备的顺序应该严格相同。目前,为了提高网络设备的报文处理能力,多核处理器已经被应用在网络通讯设备上了。
在多核处理器系统中,报文的保序可以通过硬件和软件来实现。其中,利用硬件实现的保序功能(例如,利用硬件保序队列来实现保序,或者利用报文标签(tag)值切换等)对系统整体性能影响比较小、易于维护。但是,利用硬件来实现保序在不同的硬件架构需要使用不同的硬件机制来实现,因而造成了对硬件依赖性比较大、通用性不够强,需要不同的专业人员来维护。
软件保序利用软件保序算法的灵活性和通用性,可以屏蔽硬件结构的差异,具有移植和维护方便的特点。目前的软件保序策略分为以下两种:
一、按流分发
按流分发保序是将同一用户的报文分发到同一个线程上处理。图1是根据相关技术的按流分发报文的示意图,硬件在接收单元接收到报文之后,首先按照一定规则将报文分成不同的数据流。然后将不同的数据流分发到不同的核上处理。这样可以将同一用户的报文被分发到同一个核上进行处理,可以保证报文处理的顺序。由于不同流间的报文相互间没有联系,不同流的报文顺序是不需要考虑的。按流分发的实现过程比较简单,但是由于多核处理器的硬件分类单元对报文的分类能力有限,不能解析出所有的用户报文。并且由于用户报文的随机性,容易出现线程之间负荷分担不均匀,导致有的线程比较空闲,而有的线程负荷比较大。
二、序列号保序
序列号保序是根据报文序列号和期望序列号并通过期望序列号的不断推进来实现报文的保序。图2是根据相关技术的序列号报文保序的示意图,硬件接收单元将从同一端口接收的报文打上一个序列号(pkt_seq),其中,每接收一个报文,pkt_seq就会递增1,不同端口的报文序列号是独立编号、互不影响的。然后,硬件分发单元按照轮询的方式将报文分担到每个线程进行并行处理。在报文处理完毕之后,将报文送入保序单元。保序单元预先为每个接收端口分配一个期望序列号(exp_seq)和保序队列(order_que),期望序列号和保序队列为每个线程都能共同访问的共享变量。图3是根据相关技术的保序队列结构示意图,保序队列不同于一般的先入先出队列,报文根据自身序列号在保序队列中有一个对应位置,期望序列号指向保序队列中当前的保序位置。保序队列节点有两个特性:一是节点状态,包括有效和无效,其中,“有效”表示线程可以处理当前节点的报文;二是节点动作,根据业务要求可以将用户报文分为保序和非保序,区别在于是否需要保序单元发送该报文。
报文在进入保序单元之后,线程判断当前处理报文的序列号与期望序列号是否相同,如果相同则通过原子锁(spin_lock)的方式(即,线程通过原子锁的方式来操作期望序列号exp_seq和保序队列)锁住当前报文在保序队列中的位置,处理该报文,并将期望序列号递增1,然后继续判断保序队列下一个节点的状态,直到队列下一个节点状态无效;否则将报文缓存到保序队列中,并返回接收新的报文。
上述的在报文进入保序单元之后,线程是根据spin_lock的方式来锁住当前报文在保序队列中的位置。发明人发现,在网络流量比较大的情况下,这样的处理方式,会使获得锁的线程一直处于保序发送状态,如果这个线程还要执行其他功能,那么由于该线程一直处于保序发送状态而无法执行其应该执行的功能。从而有可能导致影响单板性能或流控机制,引起流量抖动。
发明内容
本发明的主要目的在于提供一种报文保序方案,以至少解决上述问题。
根据本发明的一个方面,提供了一种报文保序方法,包括以下步骤:多个线程竞争原子锁;得到所述原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放所述原子锁。
根据本发明的另一个方面,提供了一种报文保序系统,包括:竞争模块,用于使多个线程竞争原子锁;处理模块,用于使得到所述原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放所述原子锁。
通过本发明,采用多个线程竞争原子锁;得到该原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放该原子锁。解决了获取到原子锁的线程一直处于保序发送状态而无法执行其应该执行的功能而导致影响单板性能或流控机制的问题,进而完善了保序处理。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据相关技术的在多核处理器系统中按流分发报文的示意图;
图2是根据相关技术的在多核处理器系统中采用序列号报文保序的示意图;
图3是根据相关技术的保序队列结构示意图;
图4是根据本发明实施例的报文保序方法的流程图;
图5是根据本发明实施例软件序列号报文保序策略报文动作类型示意图;
图6是根据本发明实施例的报文保序策略过程结构示意图;
图7是根据本发明实施例的保序单元多线程保序示意图;
图8是根据本发明实施例五的软件序列号报文保序策略流程图;
图9是根据本发明实施例六的软件序列号报文保序策略异常保护机制流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
实施例一
图4是根据本发明实施例的报文保序方法的流程图,该流程包括以下步骤:
步骤S402,多个线程竞争原子锁;
步骤S404,得到该原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放该原子锁。
由于在现有技术中,一个线程在获取到原子锁之后,只要保序队列中有报文需要处理,那么该线程就会一直进行报文保序的处理,那么该线程就无法执行其应该执行的功能,从而就会产生相应的问题。通过上述步骤S404,得到该原子锁的线程在对一定数量(例如,一个报文或者设置一个阈值)的报文进行保序处理之后,释放该原子锁,这样该线程就不会一直处理报文保序的处理,从而可以解决现有技术中的问题。
获取原子锁的方式可以包括两种:一种是线程在获取不到原子锁的情况下会一直等待,直到该线程获取到原子锁(例如,spin_lock);另一种是获取原子锁失败的线程直接返回(例如,spin_trylock)。如果在本实施例中采用第一种方式,虽然可以在一定程度上解决现有技术中的问题,但是,如果一个线程一直未获得原子锁,也会影响该线程功能的执行。因此,采用第二种处理方式可以最大程度解决现有技术中的问题。
优选地,在获取原子锁之前,可以对节点的状态是否有效和序列号与期望序列号是否相等进行判断。其中,如果判断保序队列中的当前节点的状态,则在当前节点的状态为有效的情况下,并且,当前报文序列号和期望序列号相同的情况下,多个线程尝试获取原子锁。
优选地,在线程得到原子锁之后,进行保序处理时,对保序队列中的当前节点的状态和/或当前报文的序列号和期望序列号是否相同进行判断。其中,如果获取原子锁的线程判断保序队列中的当前节点的状态,在所述当前节点的状态为有效的情况下,得到所述原子锁的线程对所述一个或多个报文进行处理;如果获取所述原子锁的线程比较当前报文的序列号和期望序列号,则在两者相同的情况下,将所述当前报文发送至对应的端口。如果在尝试获取原子锁之前和进行保序处理时均采用了上述的判断,则可以提高安全性。
优选地,在将当前报文发送至对应的端口之后,获取所述原子锁的线程进行下一个报文的处理或者释放所述原子锁。如果在处理完一个报文之后就释放原子锁,可以使其他的线程增加进行保序处理的机会,如果在处理完多个报文之后再释放原子锁,可以在一定程度上提高保序处理的速度,因此,可以根据实际的需要进行试验以选择一个最佳的阈值。
在现有的保序处理中,由于是采用的一个线程在获取到原子锁之后一直进行保序处理,这样,在用户报文序列号出现丢失等异常情况下,缺乏异常保护机制,导致保序模块死锁。在本实施例中采用以下的手段来解决这个问题:
为每一个线程均申请一个共享变量(即,每个线程均对应一个共享变量),这样,线程在接收报文之前,判断该线程的共享变量的值,在该线程的共享变量的值不是初始值的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元释放该丢失的报文序列号;在该线程的共享变量的值是初始值的情况下,接收报文,并将接收到的报文的序列号赋给该线程的共享变量,在接收到的报文进入所述保序单元之后,将共享变量的值恢复为初始值。
通过上述的异常保护机制,在序列号出现丢失的情况下对保序单元起到了保护作用。
在本实施例中,还提供了一种报文保序系统,包括:竞争模块、处理模块,其中,竞争模块,用于使多个线程竞争原子锁;处理模块,用于使得到该原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放该原子锁。
优选地,处理模块用于使得到原子锁的线程比较当前报文的序列号和期望序列号,在两者相同的情况下,将当前报文发送至对应的端口;在将当前报文发送至对应的端口之后,获取原子锁的线程进行下一个报文的处理或者释放该原子锁。
优选地,该系统还可以包括异常处理模块,该异常处理模块用于使多个线程中的每个线程在接收报文之前,判断该线程的共享变量的值,在该线程的共享变量的值不是初始值的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元释放该丢失的报文序列号;其中,每个线程均对应一个共享变量;在该线程的共享变量的值是初始值的情况下,接收报文,并将接收到的所述报文的序列号赋给该线程的共享变量,在接收到的报文进入保序单元之后,将共享变量的值恢复为初始值。
实施例二
本实施包括了实施例一及其变型实施例的实施方式,提供了一种报文保序方法,包括如下步骤:
步骤S2,为每个硬件接收端口配置一个保序缓存队列和期望序列号;
步骤S4,保序定义点(报文序列号的分配与提取),为每个端口的接收报文分配一个递增的保序序列号,并将报文按一定规则分发到并行运行的不同线程上处理;
步骤S6,多核处理单元中各个线程接收到报文后提取报文序列号,按照业务用户需要将报文分为保序和非保序两种,在报文处理终结点将报文送入保序单元。例如,可以根据用户报文的类型及需求将报文分为两种类型:保序和非保序。保序报文需要在保序单元做发送处理,非保序报文不需要保序发送,只需要“释放序列号”。在报文处理终结点需要向保序单元传递报文接收端口号、报文序列号及报文类型;
步骤S8,保序恢复点(即,保序单元入口),保序单元采用先缓存再保序发送的方法对报文做保序发送,例如,报文被缓存到保序缓存队列之前可以判断队列是否已满,判断条件为报文序列号与期望序列号的差值绝对值是否大于保序队列长度,如果大于则进入等待状态,否则执行缓存操作。然后,利用spin_trylock机制访问当前期望序列号在保序缓存队列指示的位置,trylock成功后判断节点状态是否有效及节点序列号是否与期望序列号相等,如果满足条件,则发送该报文,节点状态置为无效并“预取”该节点的下一个位置,期望序列号递增1,释放该节点原子锁,然后继续spin_trylock“预取”的下一个节点,其中,“预取”下一个节点操作要放在期望序列号递增1之前。
优选地,线程在先缓存再保序发送的过程中,根据报文接收端口号和报文序列号将报文缓存到保序队列相应节点位置,锁住该节点后记录下报文的发送信息、报文序列号及报文类型,将该节点标记为有效并释放节点原子锁。
优选地,在该步骤中,线程可以在spin_trylock前后两次判断保序条件:节点状态是否有效和节点序列号是否与期望序列号相等。如果不满足条件,则该线程直接返回。
在本实施例中,spin_trylock机制保证了多线程做保序发送,避免了大流量下单线程做保序发送。
实施例三
在本实施例中提供了一种异常保序机制,异常保护机制需要每个线程维护一个线程序列号,并初始化为-1。线程序列号记录当前报文序列号,在报文进入保序单元之后线程序列号被置为-1。线程在接收下一个报文之前判断线程序列号是否为-1,如果不是则需要将该序列号送入保序单元做“释放序列号”操作,其中,“释放序列号”表示报文不需要保序发送,只需要在spin_trylock成功后将期望序列号递增1。通过上述异常保序机制,如果中间出现流程错误导致序列号丢失,则序列号丢失的报文会被检测出来,能够保证不影响其它报文的顺序。
在本实施例中保序恢复点是协同操作的多个实体,由多个保序恢复点实体共同完成序列号的恢复操作,实现保序的高效性。
实施例四
本实施例包括了实施例一及其变型实施例的实施方式,提供了一种报文保序方法,首先对保序定义点、报文处理单元、保序恢复点进行说明:保序定义点为物理端口接收的每个报文分配一个序列号;报文处理单元:多个核并行处理报文,并在报文处理终结处向保序单元传递报文的“动作类型”。图5是根据本发明实施例软件序列号报文保序策略报文动作类型示意图,如图5所示,动作类型包括保序和非保序,其中,保序报文的动作是保序发送并释放序列号,非保序报文的动作是释放序列号;保序恢复点:在使用保序队列和期望序列号的基础上,利用多核处理器的spin_trylock机制实现多线程保序。
该方法包括如下步骤:
步骤S22,作为保序定义点,包含报文序列号的分配及提取,其中,保序定义点为接收报文分配序列号,并将报文轮询到各个线程;各个线程提取并记录接收报文序列号;
步骤S24,多核并行处理过程的差异性可能导致报文出现“乱序”,在报文处理终结处调用保序单元接口,向保序单元传递报文信息、接收端口及“动作类型”等;
步骤S26,实现报文保序发送,可以分为四个环节:(1)存储(store),线程根据接收端口号和序列号计算报文在保序队列中的位置,报文在store之前判断保序队列是否已满:未满,则利用原子锁spin_lock锁住该节点,将报文缓存到保序队列并置该队列节点为有效,然后释放原子锁进入下一个环节;如果已满,则进入等待状态,如果等待时间超过阈值后,需要将窗口向前推动并发送当前处理报文;(2)spin_trylock,获取当前期望序列号exp_seq,并计算其在保序队列中的位置,如果该位置节点有效,则多个线程同时spin_trylock“争抢”该节点原子锁,spin_trylock的效果是每次有且仅有一个线程会获取原子锁成功,而spin_trylock失败的线程则直接返回;spin_trylock成功后还需要判断另外两个条件:节点状态有效、节点序列号与期望序列号相等,条件同时满足则进入下一个环节,否则释放原子锁后,直接返回。(3)执行(Do_Job),首先线程判断节点的“动作类型”,保序报文被发送至端口,非保序报文则只需要“释放序列号”,然后“预取”当前节点的下一个位置,并将期望序列号递增1并释放该节点原子锁,最后spin_trylock“预取”节点的原子锁,重复环节(2)和(3)。
下面通过实施例五和实施例六并结合附图进行说明。图6是根据本发明实施例的报文保序策略过程结构示意图,如图6所示,在保序定义点处,每个接收报文被分配一个序列号,当报文被轮询分发到各个线程后会导致同一数据流的报文被轮询到各个线程,报文经过多线程并行处理后必须要经过保序恢复点,按照接收序列号和期望序列号来实现报文的保序发送。图7是根据本发明实施例的保序单元多线程保序示意图,如图7所示,保序单元在实现保序算法过程中采用了spin_trylock机制,保证线程参与保序的均匀性和负荷分担,避免大流量下个别线程的负荷过重。
实施例五
图8是根据本发明实施例五的软件序列号报文保序策略流程图,如图8所示,该流程包括如下步骤:
步骤S801:为保序单元创建保序队列及期望序列号。
为每个接收端口创建一个保序队列,队列长度为2的整数次幂,长度大小可以预先设置。每个接收端口对应一个期望序列号,期望序列号与接收报文序列号长度大小相同,并一一对应。
步骤S802:保序定义点,保序定义点为接收到的报文分配一个连续递增的序列号,并按照一定的规则分发到并行运行的线程上。
步骤S803:多线程处理单元提取保序定义点为报文分配的序列号,保存在报文描述符中,并完成对报文的处理。
由于是多个核并行处理,报文在处理过程中可能发生“乱序”。在报文处理的终结点,线程将报文送入保序单元,需要向保序单元传递以下信息:报文接收序列号、接收端口号、保序动作类型。
步骤S804:保序恢复点,从接口单元接收的报文被送入保序单元进行顺序恢复。
步骤S805:判断保序队列状态,报文缓存到保序队列。
在报文被缓存到保序窗口之前需要判断保序窗口是否已满,如果保序窗口不满,则可以继续向保序窗口中缓存报文,如果保序窗口满,需要等待一段时间,如果在等待的一段时间内,窗口依然还处于满的状态,则向前滑动窗口,将窗口中处于最前面的报文发送出去。判断条件为当前序列号(cur_seq)与期望序列号(expect_seq)差值绝对值是否小于“保序窗口”的大小(OQ_WINDOW_SIZE),即:
|cur_seq-expect_seq|>=OQ_WINDOW_SIZE
“保序窗口”的大小可以自由配置,最大长度为保序队列长度-1。
步骤S806:报文节点store过程。
通过报文接收序列号和接收端口号计算出该报文在保序队列中的位置,并获取该节点的原子锁。通过判断报文的保序动作类型,将报文分为保序与不保序两种。这两种报文向保序队列缓存的共同信息为:报文序列号、保序动作类型;不同点是:保序报文需要传递的报文的发送信息,例如,报文数据地址,发送端口等,而不保序报文不需要。最后将保序队列节点置为有效,并释放该节点原子锁。
步骤S807:spin_trylock,多个线程“竞争”期望序列号。
计算当前期望序列号在保序队列中的对应位置,获取该位置节点的原子锁。如果该节点有效,则多个线程同时spin_trylock“争抢”该原子锁,spin_trylock的效果是最后有且仅有一个线程会获取该原子锁成功,其他线程获取原子锁失败后则直接返回;获取原子锁成功后还需要继续判断该节点是否满足两个条件:节点状态有效、节点序列号与期望序列号相等。条件满足则进入下一个环节,否则释放原子锁后,直接返回。
步骤S808:Do_Job,spin_trylock成功后的线程操作。
线程获取该节点对应的原子锁之后,判断节点的“保序动作”来Do_Job:需要保序发送的报文被发送至端口,不需要保序的报文则只需要“释放序列号”。Do_Job完成后,该节点被置位无效,并“预取”期望序列号对应的下一个节点,最后将期望序列号加1并释放该节点原子锁。获取“预取”节点的原子锁,重复步骤S807。
实施例六
图9是根据本发明实施例六的软件序列号报文保序策略异常保护机制流程图,该流程包括如下步骤:
步骤S901:每个线程维护一个自己的线程序列号thrd_seq;为每个线程申请一个共享变量,初始化值设置为-1。
步骤S902:线程序列号thrd_seq记录当前处理报文的序列号;在线程提取接收报文序列号的地方,将接收报文序列号赋给线程序列号thrd_seq。
步骤S903:保序恢复点处将线程序列号thrd_seq置为-1,表示该报文序列号已经被正常“释放”。
步骤S904:线程在每次接收下一个报文之前判断线程序列号的有效性。
判断线程序列号thrd_seq是否等于-1,相等说明线程处理的上一个报文的序列号已经被正常“释放”,重复步骤S902;否则说明上一个报文的序列号“丢失”,需要将thrd_seq送入保序单元来“释放”报文序列号,进入保序单元。
本发明的上述实施例实现过程简单,能够克服大流量情况下出现的单线程保序现象,避免个别线程负荷过重,能很好的解决流控失效问题。异常保护机制使保序单元在序列号丢失及错误的情况下也能正常工作,因此,保序策略更加完善,保序功能更加稳定有效。通过本发明的上述实施例,克服了现有软件保序的不足,实现一种更加完善、稳定的软件保序方法。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种报文保序方法,其特征在于,包括以下步骤:
多个线程竞争原子锁;
得到所述原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放所述原子锁。
2.根据权利要求1所述的方法,其特征在于,
判断所述保序队列中的当前节点的状态;
在所述当前节点的状态为有效的情况下,所述多个线程竞争所述原子锁。
3.根据权利要求1所述的方法,其特征在于,
判断当前报文的序列号和期望序列号是否相同;
在相同的情况下,得到所述原子锁的线程对所述当前节点的报文进行保序处理。
4.根据权利要求1至3中任一项所述的方法,其特征在于,得到所述原子锁的线程对所述预定个数的报文进行处理包括:
获取所述原子锁的线程判断所述保序队列中的当前节点的状态,在所述当前节点的状态为有效的情况下,得到所述原子锁的线程对所述预定个数的报文进行处理。
5.根据权利要求1至3中任一项所述的方法,其特征在于,得到所述原子锁的线程对所述预定个数的报文进行处理包括:
得到所述原子锁的线程比较当前报文的序列号和期望序列号,在两者相同的情况下,将所述当前报文发送至对应的端口;
在将所述当前报文发送至对应的端口之后,得到所述原子锁的线程进行下一个报文的处理或者释放所述原子锁。
6.根据权利要求1所述的方法,其特征在于,还包括:
每个线程在接收报文之前,判断该线程的共享变量的值,在该线程的共享变量的值不是初始值的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元释放所述丢失的报文序列号;其中,所述每个线程均对应一个共享变量;
在该线程的共享变量的值是初始值的情况下,接收报文,并将接收到的所述报文的序列号赋给该线程的共享变量,在接收到的所述报文进入所述保序单元之后,将所述共享变量的值恢复为初始值。
7.根据权利要求1所述的方法,其特征在于,未得到所述原子锁的线程返回。
8.一种报文保序系统,其特征在于,包括:
竞争模块,用于使多个线程竞争原子锁;
处理模块,用于使得到所述原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放所述原子锁。
9.根据权利要求8所述的系统,其特征在于,
所述处理模块,还用于使得到所述原子锁的线程比较当前报文的序列号和期望序列号,在两者相同的情况下,将所述当前报文发送至对应的端口;并在将所述当前报文发送至对应的端口之后,获取所述原子锁的线程进行下一个报文的处理或者释放所述原子锁。
10.根据权利要求8或9所述的系统,其特征在于,还包括:
异常处理模块,用于使所述多个线程中的每个线程在接收报文之前,判断该线程的共享变量的值,在该线程的共享变量的值不是初始值的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元释放所述丢失的报文序列号;其中,所述每个线程均对应一个共享变量;在该线程的共享变量的值是初始值的情况下,接收报文,并将接收到的所述报文的序列号赋给该线程的共享变量,在接收到的所述报文进入所述保序单元之后,将所述共享变量的值恢复为初始值。
CN201010190599.1A 2010-05-27 2010-05-27 报文保序方法及系统 Active CN101854302B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010190599.1A CN101854302B (zh) 2010-05-27 2010-05-27 报文保序方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010190599.1A CN101854302B (zh) 2010-05-27 2010-05-27 报文保序方法及系统

Publications (2)

Publication Number Publication Date
CN101854302A true CN101854302A (zh) 2010-10-06
CN101854302B CN101854302B (zh) 2016-08-24

Family

ID=42805578

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010190599.1A Active CN101854302B (zh) 2010-05-27 2010-05-27 报文保序方法及系统

Country Status (1)

Country Link
CN (1) CN101854302B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103078811A (zh) * 2013-01-31 2013-05-01 北京金和软件股份有限公司 一种基于多线程环境网络数据包乱序控制方法
CN104572568A (zh) * 2013-10-15 2015-04-29 阿里巴巴集团控股有限公司 读锁操作方法、写锁操作方法及系统
CN104954851A (zh) * 2014-03-28 2015-09-30 深圳市茁壮网络股份有限公司 一种数据处理方法及装置
CN105511954A (zh) * 2014-09-23 2016-04-20 华为技术有限公司 一种报文处理方法及装置
CN106537329A (zh) * 2014-07-08 2017-03-22 Arm 有限公司 用于为多线程执行锁保护处理操作的数据处理装置及方法
CN107370797A (zh) * 2017-06-30 2017-11-21 北京百度网讯科技有限公司 一种基于HBase的强有序队列操作的方法和装置
CN113141235A (zh) * 2020-01-20 2021-07-20 华为技术有限公司 处理数据的方法和相关装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003039093A2 (en) * 2001-10-30 2003-05-08 Hi/Fn, Inc. Method and system for packet ordering for parallel packet transform processing
CN1996958A (zh) * 2006-12-30 2007-07-11 华为技术有限公司 保证报文顺序的方法和装置
CN101436989A (zh) * 2008-12-26 2009-05-20 福建星网锐捷网络有限公司 一种转发报文的方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003039093A2 (en) * 2001-10-30 2003-05-08 Hi/Fn, Inc. Method and system for packet ordering for parallel packet transform processing
CN1996958A (zh) * 2006-12-30 2007-07-11 华为技术有限公司 保证报文顺序的方法和装置
CN101436989A (zh) * 2008-12-26 2009-05-20 福建星网锐捷网络有限公司 一种转发报文的方法及装置

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103078811B (zh) * 2013-01-31 2015-12-09 北京金和软件股份有限公司 一种基于多线程环境网络数据包乱序控制方法
CN103078811A (zh) * 2013-01-31 2013-05-01 北京金和软件股份有限公司 一种基于多线程环境网络数据包乱序控制方法
CN104572568A (zh) * 2013-10-15 2015-04-29 阿里巴巴集团控股有限公司 读锁操作方法、写锁操作方法及系统
CN104572568B (zh) * 2013-10-15 2021-07-23 蚂蚁金服(杭州)网络技术有限公司 读锁操作方法、写锁操作方法及系统
CN104954851B (zh) * 2014-03-28 2018-11-13 深圳市茁壮网络股份有限公司 一种数据处理方法及装置
CN104954851A (zh) * 2014-03-28 2015-09-30 深圳市茁壮网络股份有限公司 一种数据处理方法及装置
CN106537329B (zh) * 2014-07-08 2020-03-06 Arm 有限公司 用于为多线程执行锁保护处理操作的数据处理装置及方法
US10423467B2 (en) 2014-07-08 2019-09-24 Arm Limited Data processing apparatus and method for performing lock-protected processing operations for multiple threads
CN106537329A (zh) * 2014-07-08 2017-03-22 Arm 有限公司 用于为多线程执行锁保护处理操作的数据处理装置及方法
CN105511954B (zh) * 2014-09-23 2020-07-07 华为技术有限公司 一种报文处理方法及装置
CN105511954A (zh) * 2014-09-23 2016-04-20 华为技术有限公司 一种报文处理方法及装置
CN107370797A (zh) * 2017-06-30 2017-11-21 北京百度网讯科技有限公司 一种基于HBase的强有序队列操作的方法和装置
CN107370797B (zh) * 2017-06-30 2021-07-27 北京百度网讯科技有限公司 一种基于HBase的强有序队列操作的方法和装置
CN113141235A (zh) * 2020-01-20 2021-07-20 华为技术有限公司 处理数据的方法和相关装置
CN113141235B (zh) * 2020-01-20 2022-07-22 华为技术有限公司 处理数据的方法和相关装置

Also Published As

Publication number Publication date
CN101854302B (zh) 2016-08-24

Similar Documents

Publication Publication Date Title
CN101854302A (zh) 报文保序方法及系统
US10153985B2 (en) Dragonfly processor interconnect network
US7305487B2 (en) Optimized scalable network switch
US7039058B2 (en) Switched interconnection network with increased bandwidth and port count
US8713220B2 (en) Multi-bank queuing architecture for higher bandwidth on-chip memory buffer
CN101729402A (zh) 流相容的动态负荷平衡
KR20070007769A (ko) 에러 정정을 이용하는 높은 병렬 스위칭 시스템
Minkenberg et al. Designing a crossbar scheduler for HPC applications
US20180019947A1 (en) Credit Loop Deadlock Detection and Recovery in Arbitrary Topology Networks
JP2016501475A (ja) 受動相互接続及び分散型スイッチレススイッチングを行うルータ
JP2016501474A (ja) 分散型スイッチレス相互接続
Gharan et al. A novel virtual channel implementation technique for multi-core on-chip communication
KR20170015000A (ko) 온칩 네트워크 및 이의 통신방법
US5799015A (en) Recirculation routes in switching networks used with scalable coherent interfaces
JP2015536621A (ja) 受動接続性光学モジュール
US20100158002A1 (en) Communication system, node, terminal, program and communication method
CN1965542A (zh) 处理分组标头
Ye et al. Assessment of optical switching in data center networks
KR101726375B1 (ko) 데이터 이중화 장치
CN110601996B (zh) 一种采用令牌保底分布式贪心算法的环网防饥饿流控方法
US7536477B2 (en) Access mechanisms for efficient sharing in a network
US20080310412A1 (en) Information relay apparatus, control method and information processing system
US8830838B2 (en) Node interface indicators
Wang et al. Towards" Zero-buffer" Datacenter Networks
CN118101557A (zh) 片上网络结构及片上网络的流量均衡方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant