用于报文压缩的保序方法和装置制造方法

文档序号:7798554阅读:146来源:国知局
用于报文压缩的保序方法和装置制造方法
【专利摘要】本发明公开了一种用于报文压缩的保序方法和装置,其中该方法包括:接收多个报文,并依次判断每个报文是否满足压缩条件;将满足压缩条件的待压缩报文发送至压缩请求队列,并将未满足压缩条件的非待压缩报文发送至临时缓冲队列;每当将待压缩报文发送至压缩请求队列之前,判断临时缓冲队列中当前是否存在有非待压缩报文;如果存在,则将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中;以及对压缩请求队列中的待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出。本发明实施例的保序方法有效地利用压缩协处理器带宽资源,优化了压缩卡I/O带宽和CPU使用效率。
【专利说明】用于报文压缩的保序方法和装置
【技术领域】
[0001 ] 本发明涉及网络通信【技术领域】,尤其涉及一种用于报文压缩的保序方法和装置。【背景技术】
[0002]目前,网络压缩一般是基于传输控制协议TCP之上的应用层的数据压缩,如超文本转移协议HTTP,主要通过细粒度控制到TCP层以实现对业务数据的压缩,但是对业务数据的透明压缩尚未发现。例如,类似采用协处理器或者中央处理器CPU的加速系统,可通过FIFO (First in First Out,先入先出队列)机制实现CPU与协处理器之间的通信,同时通过基于TCP流粒度的并行策略,以确保TCP流中的报文无乱序发生。
[0003]目前存在的问题是,FIFO机制的实现针对上述这种类似压缩的应用,会将所有的业务数据都经过协处理器进行处理,这样会导致数据压缩协处理器的宽度浪费问题,同时也额外消耗了不必要的输入输出端口(I/o)宽度。

【发明内容】

[0004]本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
[0005]为此,本发明的第一个目的在于提出一种用于报文压缩的保序方法。该方法可以有效地利用压缩协处理器带宽资源,也可以减少不必要的协处理器I/o访问,优化CPU使用效率,并且通过自适应的保序推送机制,减少了非待压缩报文保序过程中的积累处理延迟。
[0006]本发明的第二个目的在于提出一种用于报文压缩的保序装置。
[0007]为了实现上述目的,本发明第一方面实施例的用于报文压缩的保序方法,包括:接收多个报文,并依次判断每个所述报文是否满足压缩条件;将满足所述压缩条件的待压缩报文发送至压缩请求队列,并将未满足所述压缩条件的非待压缩报文发送至临时缓冲队列;每当将所述待压缩报文发送至所述压缩请求队列之前,判断所述临时缓冲队列中当前是否存在有非待压缩报文;如果当前存在有所述非待压缩报文,则将所述非待压缩报文和所述待压缩报文发送至所述压缩请求队列中的相应元数据对应的存储单元中;以及对所述压缩请求队列中的所述待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和所述元数据中的所述非待压缩报文按序输出至下一级处理系统或传输网络中。
[0008]本发明实施例的用于报文压缩的保序方法,每当将待压缩报文发送至压缩请求队列之前,判断临时缓冲队列中当前是否存在有非待压缩报文,如果当前存在有非待压缩报文,则将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中,并在对压缩请求队列中的待压缩报文进行压缩处理之后,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中,至少具有以下优点:(I)基于TCP Flow粒度进行数据压缩,不同TCP Flow允许采用不同的压缩方法,实现了对业务数据透明的数据压缩;(2)通过压缩协处理器进行数据压缩,协处理器与CPU之间进行异步操作,提高了压缩设备的系统性能;(3)通过对报文长度小于预设值的报文进行过滤,避免了小报文压缩无压缩收益,提高了数据压缩协处理器的有效负载的利用率和优化协处理器的I/o性能。
[0009]为了实现上述目的,本发明第二方面实施例的用于报文压缩的保序装置,包括:接收模块,用于接收多个报文;第一判断模块,用于依次判断每个所述报文是否满足压缩条件;发送模块,用于将满足所述压缩条件的待压缩报文发送至压缩请求队列,并将未满足所述压缩条件的非待压缩报文发送至临时缓冲队列;第二判断模块,用于每当所述发送模块将所述待压缩报文发送至所述压缩请求队列之前,判断所述临时缓冲队列中当前是否存在有非待压缩报文;所述发送模块还用于在所述第二判断模块判断所述临时缓冲队列中当前存在有所述非待压缩报文时,将所述非待压缩报文和所述待压缩报文发送至所述压缩请求队列中的相应元数据对应的存储单元中;压缩保序模块,用于对所述压缩请求队列中的所述待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和所述元数据中的所述非待压缩报文按序输出至下一级处理系统或传输网络中。
[0010]本发明实施例的用于报文压缩的保序装置,每当发送模块将待压缩报文发送至压缩请求队列之前,通过第二判断模块判断临时缓冲队列中当前是否存在有非待压缩报文,发送模块在当前存在有非待压缩报文时,将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中,压缩保序模块在对压缩请求队列中的待压缩报文进行压缩处理之后,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中,至少具有以下优点:(1)基于TCP Flow粒度进行数据压缩,不同TCP Flow允许采用不同的压缩方法,实现了对业务数据透明的数据压缩;(2)通过压缩协处理器进行数据压缩,协处理器与CPU之间进行异步操作,提高了压缩设备的系统性能;(3)通过对报文长度小于预设值的报文进行过滤,避免了小报文压缩无压缩收益,提高了数据压缩协处理器的有效负载的利用率和优化协处理器的I/O性能。
[0011]本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
【专利附图】

【附图说明】
[0012]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
[0013]图1是根据本发明一个实施例的用于报文压缩的保序方法的流程图;
[0014]图2是根据本发明一个实施例的判断报文满足压缩条件的流程图;
[0015]图3是根据本发明一个实施例的用于报文压缩的保序方法的示意图;
[0016]图4是根据本发明一个实施例的非待压缩报文多于待压缩报文的TCP流的示意图;
[0017]图5是根据本发明一个实施例的对用于报文压缩的保序方法进行优化的流程图;
[0018]图6是根据本发明一个实施例的对用于报文压缩的保序方法进行优化的示意图;
[0019]图7是根据本发明一个实施例的用于报文压缩的保序装置的结构示意图;
[0020]图8是根据本发明一个具体实施例的用于报文压缩的保序装置的结构示意图。
【具体实施方式】
[0021]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
[0022]下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。
[0023]下面参考附图描述根据本发明实施例的用于报文压缩的保序方法和装置。
[0024]本发明实施例提供的一种用于报文压缩的保序方法,包括:接收多个报文,并依次判断每个报文是否满足压缩条件;将满足压缩条件的待压缩报文发送至压缩请求队列,并将未满足压缩条件的非待压缩报文发送至临时缓冲队列;每当将待压缩报文发送至压缩请求队列之前,判断临时缓冲队列中当前是否存在有非待压缩报文;如果当前存在有非待压缩报文,则将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中;以及对压缩请求队列中的待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中。
[0025]图1是根据本发明一个实施例的用于报文压缩的保序方法的流程图。
[0026]如图1所示,该用于报文压缩的保序方法可以包括:
[0027]S101,接收多个报文,并依次判断每个报文是否满足压缩条件。
[0028]具体地,可先接收TCP (Transmission Control Protocol,传输控制协议)流(TCPFlow)中包含的多个报文,之后可依次判断每个报文是否满足压缩条件,以便将满足压缩条件的报文进行压缩,将不满足压缩条件的报文不进行压缩。
[0029]在本发明的一个 实施例中,如2所示,判断报文满足压缩条件可以包括:
[0030]S201,获取每个报文的长度。
[0031]S202,判断每个报文的长度是否大于或等于预设值。
[0032]其中,在本发明的实施例中,预设值可由系统设定。例如,系统可根据报文长度的实际情况确定该预设值的大小,可收集大量报文,先获取这些报文的长度,之后对这些长度求平均,以获得平均值,之后可根据该平均值确定预设值。
[0033]S203,如果大于或等于预设值,则判断报文满足压缩条件。
[0034]S204,如果小于预设值,则判断报文未满足压缩条件。
[0035]由此,可根据报文的长度判断该报文是否满足压缩条件,提高了判断结果的准确度。
[0036]举例而言,如图3所示,接收到的TCP Flow中连续存在P0、P1、…P6这七个报文,依次获取这七个报文的长度,可判断出报文P2、P4、P5的长度有限,即小于预设值,也就是说,报文P2、P4、P5为未满足压缩条件的报文,可无需对其进行压缩;判断出报文P0、P1、P3、P6的长度大于预设值,即报文PO、P1、P3、P6为满足压缩条件的报文,需对其进行压缩。
[0037]S102,将满足压缩条件的待压缩报文发送至压缩请求队列,并将未满足压缩条件的非待压缩报文发送至临时缓冲队列。
[0038]例如,如图3所示,为了优化对P2、P4、P5这种无压缩收益的报文进行压缩导致的协处理器开销,避免报文P2、P4 、P5进入1/0 (Input/Output,输入输出端口)阶段。因此,当处理到报文P3时,压缩请求队列中共有PO、Pl和P3这三个待压缩报文,报文P2将被滤除。此时,如果直接将报文P2透传到下一级报文处理过程或者输出到网卡,则可能会引发报文P2在报文PO和Pl之前输出到传输网络中,从而导致乱序发生。
[0039]为此,在本发明的实施例中,可将满足压缩条件的待压缩报文PO、PU P3、P6发送至压缩请求队列,并将未满足压缩条件的非待压缩报文P2、P4、P5发送至临时缓冲队列中。其中,如图3所示,0rder_buffer可为TCP Flow session结构中控制乱序的临时缓冲队列,用于临时记录非待压缩报文。此外,非待压缩报文P2、P4、P5无需压缩,并可通过队尾入队操作记录到Order_buffer中,且可旁路压缩系统并输出到后级系统中。
[0040]S103,每当将待压缩报文发送至压缩请求队列之前,判断临时缓冲队列中当前是否存在有非待压缩报文。
[0041]例如,如图3所示,压缩引擎判断报文Pl满足压缩条件,当将待压缩报文Pl发送至压缩请求队列之前,可先判断此时临时缓冲队列中当前是否存在有非待压缩报文。
[0042]S104,如果当前不存在有非待压缩报文,则将满足压缩条件的待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中。
[0043]例如,当将待压缩报文Pl发送至压缩请求队列之前,判断此时临时缓冲队列中当前不存在有非待压缩报文,之后可将该待压缩报文Pl发送至压缩请求队列中的相应元数据(metadata)对应的存储单元中。
[0044]S105,如果当前存在有非待压缩报文,则将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中。
[0045]具体而言,当判断临时缓冲队列中当前存在有非待压缩报文时,可先提取临时缓冲队列中当前存在的非待压缩报文,之后可将满足压缩条件的待压缩报文和提取的非待压缩报文一起发送至压缩请求队列中。其中,在本发明的实施例中,非待压缩报文可以以指针形式记录至待压缩报文对应的元数据中。此外,在本发明的一个实施例中,元数据具有待压缩报文的存储地址。也就是说,每当存在待压缩报文入队操作时,提取oder_buffer临时链表的队头指示的旁路报文并记录到压缩队列相关项的元数据中。
[0046]例如,如图3所示,压缩引擎判断报文P2不满足压缩条件,可先将该非待压缩报文P2发送至临时缓冲队列中。之后,压缩引擎判断报文P3满足压缩条件,当将待压缩报文P3发送至压缩请求队列之前,判断此时临时缓冲队列中当前存在有非待压缩报文P2。之后可先提取临时缓冲队列中当前存在的非待压缩报文P2,并将Order_buffer临时链表的队头指针置空。最后,可将待压缩报文P3和非待压缩报文P2 —起发送至压缩请求队列中。
[0047]又如,如图3所示,压缩引擎判断报文P6满足压缩条件,当将待压缩报文P6发送至压缩请求队列时,待压缩报文P6可将临时缓冲队列中的非待压缩报文P4和P5 —起带入压缩请求队列中。
[0048]S106,对压缩请求队列中的待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中。
[0049]具体而言,可先根据元数据中的存储地址获取待压缩报文,并对待压缩报文进行压缩处理。之后,可将元数据中的待压缩报文的存储地址替换为压缩处理后的待压缩报文的存储地址。最后,当待压缩报文进行压缩处理完成后并被从压缩响应队列中取走时,可先顺序输出每个元数据中记录的指针,并从指针的头部开始遍历,依次输出非待压缩报文和压缩处理后的待压缩报文。
[0050]举例而言,如图3所示,在某一时刻,压缩请求队列存在待压缩报文P3,同时待压缩报文P3附带一个指针记录非待压缩报文P2 ;压缩请求队列存在待压缩报文P6,同时待压缩报文P6进入压缩请求队列后,可记录order_bufTer的队头指针到待压缩报文P6的相关指针中。
[0051]例如,当压缩引擎对待压缩报文P3进行出队操作时,首先可顺序输出当前待压缩报文P3对应的元数据记录的乱序指针,从该指针头部遍历并依次输出非待压缩报文P2,最后输出待压缩报文P3。由此,可以确保非待压缩报文P2、P4和P5不经过实际的压缩过程、不消耗压缩带宽、不引发协处理器I/O过程,同时也不影响整体的压缩性能,最终也可以达到TCP Flow内数据报文的保序过程。
[0052]本发明实施例的用于报文压缩的保序方法,每当将待压缩报文发送至压缩请求队列之前,判断临时缓冲队列中当前是否存在有非待压缩报文,如果当前存在有非待压缩报文,则将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中,并在对压缩请求队列中的待压缩报文进行压缩处理之后,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中,至少具有以下优点:(I)基于TCP Flow粒度进行数据压缩,不同TCP Flow允许采用不同的压缩方法,实现了对业务数据透明的数据压缩;(2)通过压缩协处理器进行数据压缩,协处理器与CPU之间进行异步操作,提高了压缩设备的系统性能;(3)通过对报文长度小于预设值的报文进行过滤,避免了小报文压缩无压缩收益,提高了数据压缩协处理器的有效负载的利用率和优化协处理器的I/O性能。
[0053]需要说明的是,发明人通过对实际数据传输的数据报文进行分析,发现有种现象普遍存在,例如,在Web Page网页的传输过程中,某一方向绝大部分为小ACK(Acknowledgement,确认字符)报文,这些ACK报文不符合压缩条件,并且满足压缩条件的待压缩报文的分布明显稀疏于非待压缩报文的分布。依据上述用于报文压缩的保序方法的逻辑,若待压缩报文迟迟不被送入压缩请求队列,则临时缓冲队列中的非待压缩报文将会一直等待该待压缩报文将其携带到压缩请求队列中,这样将会出现非待压缩报文积累过高的延迟的现象,甚至影响TCP性能和TCP上层协议的正确性。
[0054]举例而言,如图4所示,非待压缩报文与待压缩报文的稀疏性对比,图中ACK表示ACK报文且捎带极少量TCP payload或者无TCP payload的报文,这种现象普遍存在于大块数据的单向推送的数据传输过程中。
[0055]为了更灵活地处理这种稀疏性差异大的报文,对上述保序方法进行优化设计。在本发明的实施例中,对于非待压缩报文明显多于待压缩报文的情景,避免通过待压缩报文来推送,而是由非待压缩报文直接主动推送输出;当主动推送非待压缩报文之前必须保证压缩卡中没有当前session中的报文,否则可能乱序,所以需要感知压缩卡队列中所有当前session报文的数目。具体地,在本发明的一个实施例中,如图5所示,对该用于报文压缩的保序方法进行优化可以包括:
[0056]S501,获取压缩请求队列中当前待压缩报文的数目。
[0057]举例而言,可为每个报文中的session添加Fly_in_HW_cnt变量,该变量可表示当前在压缩卡中的待处理报文的数目,可维护当前仍然处于压缩请求队列和压缩响应队列中的所有报文。例如,每当一个待压缩报文进入压缩请求队列时,可执行Fly_in_HW_cnt++操作;每当一个压缩处理后的待压缩报文出压缩响应队列时,可执行Fly_in_HW_cnt--操作。也就是说,可通过获取Fly_in_HW_cnt变量当前的值,即可获取压缩请求队列中当前待压缩报文的数目。
[0058]S502,当压缩处理后的待压缩报文通过压缩响应队列出队,且压缩请求队列中的当前待压缩报文的数目变为预设阀值时,将临时缓冲队列中的当前所有非待压缩报文输出至下一级处理系统或传输网络中。
[0059]其中,在本发明的实施例中,预设阀值可为O。例如,如图6所示,出队时,当Fly_in_HW_cnt-=0,即压缩请求队列中最后一个待压缩报文出队时,同时临时缓冲队列0rder_buffer中当前还存在有非待压缩报文时,此时,可通过Flush Order_buffer强行将0rder_buffer中当前记录的所有非待压缩报文直接输出到下一级处理或者输出到网卡,无需经过压缩卡队列。其中,Flush Order_buffer可维护所有临时非待压缩报文。由此,避免了死锁和高延迟,优化性能。
[0060]S503,当判断当前接收到的报文为非待压缩报文,且压缩请求队列中的当前待压缩报文的数目等于预设阀值时,将非待压缩报文直接输出至下一级处理系统或传输网络中。
[0061]例如,如图6所示,入队时,当Fly_in_HW_cnt==0,即当前没有待压缩报文被发送到压缩请求队列中时,同时临时缓冲队列0rder_buffer中当前不存在有非待压缩报文时,此时,TCP Flow中的未满足压缩条件的非待压缩报文无需经过Order_buffer缓冲,可以直接进入下一级处理或者输出到压缩卡。这样,可避免死锁和高延迟,优化性能。
[0062]综上所述,这种优化策略充分从单session粒度角度,考虑到非待压缩报文在order_buffer中的积累延迟控制,即对于连续大段的非待压缩流,可以自适应的完成透传功能。也就是说,对于非待压缩报文,可直接旁路压缩卡的硬件处理流程,优化了压缩卡I/O带宽和CPU使用效率,避免了压缩带宽资源浪费,`并且,当Fly_in_HW_cnt—==0时,通过Flush Order_buffer强行将临时缓冲队列中的非待压缩报文直接输出至下一级处理或者输出至网卡,减少了非待压缩报文保序过程中的积累处理延迟。
[0063]由上述实施例可知,获取压缩请求队列中当前待压缩报文的数目和临时缓冲队列中当前非待压缩报文的数目,当压缩请求队列中的当前待压缩报文的数目等于预设阀值,且临时缓冲队列中的当前非待压缩报文的数目不等于预设阀值时,将临时缓冲队列中的当前非待压缩报文输出至下一级处理系统或传输网络中;当压缩请求队列中的当前待压缩报文的数目等于预设阀值,且临时缓冲队列中的当前非待压缩报文的数目等于预设阀值时,将未满足压缩条件的非待压缩报文直接输出至下一级处理系统或传输网络中,优化了压缩卡I/O带宽和CPU使用效率,避免了压缩带宽资源浪费,并且减少了非待压缩报文保序过程中的积累处理延迟。
[0064]为了实现上述实施例,本发明还提出一种用于报文压缩的保序装置。
[0065]本发明实施例提出的一种用于报文压缩的保序装置,包括:接收模块,用于接收多个报文;第一判断模块,用于依次判断每个报文是否满足压缩条件;发送模块,用于将满足压缩条件的待压缩报文发送至压缩请求队列,并将未满足压缩条件的非待压缩报文发送至临时缓冲队列;第二判断模块,用于每当发送模块将待压缩报文发送至压缩请求队列之前,判断临时缓冲队列中当前是否存在有非待压缩报文;发送模块还用于在第二判断模块判断临时缓冲队列中当前存在有非待压缩报文时,将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中;压缩保序模块,用于对压缩请求队列中的待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中。
[0066]图7是根据本发明一个实施例的用于报文压缩的保序装置的结构示意图。
[0067]如图7所示,该用于报文压缩的保序装置可以包括:接收模块100、第一判断模块200、发送模块300、第二判断模块400和压缩保序模块500。
[0068]具体地,接收模块100用于接收多个报文。第一判断模块200用于依次判断每个报文是否满足压缩条件。更具体地,接收模块100可接收TCP流中包含的多个报文,之后,第一判断模块200可依次判断每个报文是否满足压缩条件,以便将满足压缩条件的报文进行压缩,将不满足压缩条件的报文不进行压缩。
[0069]在本发明的一个实施例中,第一判断模块200还用于获取接收模块100接收的每个报文的长度,并判断每个报文的长度是否大于或等于预设值,以及在大于或等于预设值时,判断报文满足压缩条件。其中,在本发明的实施例中,预设值可由系统设定。例如,系统可根据报文长度的实际情况确定该预设值的大小,可收集大量报文,先获取这些报文的长度,之后对这些长度求平均,以获得平均值,之后可根据该平均值确定预设值。
[0070]在本发明的另一个实施例中,第一判断模块200还用于在判断每个报文的长度小于预设值时,可判断报文未满足压缩条件。
[0071]由此,可根据报文的长度判断该报文是否满足压缩条件,提高了判断结果的准确度。
`[0072]举例而言,如图3所示,接收模块100接收到的TCP Flow中连续存在PO、P1、…P6这七个报文,第一判断模块200可依次获取这七个报文的长度,并判断出报文P2、P4、P5的长度有限,即小于预设值,也就是说,报文P2、P4、P5为未满足压缩条件的报文,可无需对其进行压缩;判断出报文PO、P1、P3、P6的长度大于预设值,即报文PO、P1、P3、P6为满足压缩条件的报文,需对其进行压缩。
[0073]发送模块300用于将满足压缩条件的待压缩报文发送至压缩请求队列,并将未满足压缩条件的非待压缩报文发送至临时缓冲队列。
[0074]例如,如图3所示,为了优化对P2、P4、P5这种无压缩收益的报文进行压缩导致的协处理器开销,避免报文P2、P4、P5进入I/O阶段。因此,当处理到报文P3时,压缩请求队列中共有PO、Pl和P3这三个待压缩报文,报文P2将被滤除。此时,如果直接将报文P2透传到下一级报文处理过程或者输出到网卡,则可能会引发报文P2在报文PO和Pl之前输出到传输网络中,从而导致乱序发生。
[0075]为此,在本发明的实施例中,发送模块300可将满足压缩条件的待压缩报文PO、P1、P3、P6发送至压缩请求队列,并将未满足压缩条件的非待压缩报文P2、P4、P5发送至临时缓冲队列中。其中,如图3所示,0rder_buffer可为TCP Flow session结构中控制乱序的临时缓冲队列,用于临时记录非待压缩报文。此外,非待压缩报文P2、P4、P5无需压缩,并可通过队尾入队操作记录到0rder_buffer中,且可旁路压缩系统并输出到后级系统中。
[0076]第二判断模块400用于每当发送模块300将待压缩报文发送至压缩请求队列之前,判断临时缓冲队列中当前是否存在有非待压缩报文。例如,如图3所示,在第一判断模块200判断报文Pl满足压缩条件,且在发送模块300待压缩报文Pl发送至压缩请求队列之前,第二判断模块400可先判断此时临时缓冲队列中当前是否存在有非待压缩报文。
[0077]在本发明的一个实施例中,发送模块300还用于在第二判断模块400判断临时缓冲队列中当前不存在有非待压缩报文时,可将满足压缩条件的待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中。例如,在发送模块300将待压缩报文Pl发送至压缩请求队列之前,第二判断模块400判断此时临时缓冲队列中当前不存在有非待压缩报文,之后发送模块300可将该待压缩报文Pl发送至压缩请求队列中的相应元数据(metadata)对应的存储单元中。
[0078]在本发明的一个实施例中,发送模块300还用于在第二判断模块400判断临时缓冲队列中当前存在有非待压缩报文时,将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中。
[0079]更具体地,在本发明的实施例中,在第二判断模块400判断临时缓冲队列中当前存在有非待压缩报文时,发送模块300可先提取临时缓冲队列中当前存在的非待压缩报文,之后可将满足压缩条件的待压缩报文和提取的非待压缩报文一起发送至压缩请求队列中。其中,在本发明的实施例中,非待压缩报文可以以指针形式记录至待压缩报文对应的元数据中。此外,在本发明的一个实施例中,元数据具有待压缩报文的存储地址。也就是说,每当存在待压缩报文入队操作时,发送模块300可提取oder_bufTer临时链表的队头指示的旁路报文并记录到压缩队列相关项的元数据中。
[0080]例如,如图3所示,在第一判断模块200判断报文P2不满足压缩条件时,发送模块300可先将该非待压缩报文P2发送至临时缓冲队列中。之后,第一判断模块200判断报文P3满足压缩条件,在发送模块300将待压缩报文P3发送至压缩请求队列之前,第二判断模块400判断此时临时缓冲队列中当前存在有非待压缩报文P2。发送模块300可先提取临时缓冲队列中当前存在的非待压缩报文P2,并将Order_buffer临时链表的队头指针置空。最后,可将待压缩报文P3和非待压缩报文P2 —起发送至压缩请求队列中。
[0081]又如,如图3所示,第一判断模块200判断报文P6满足压缩条件,在发送模块300将待压缩报文P6发送至压缩请求队列时,待压缩报文P6可将临时缓冲队列中的非待压缩报文P4和P5 —起带入压缩请求队列中。
[0082]压缩保序模块500用于对压缩请求队列中的待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中。
[0083]更具体地,在本发明的实施例中,压缩保序模块500可先根据元数据中的存储地址获取待压缩报文,并对待压缩报文进行压缩处理。之后,可将元数据中的待压缩报文的存储地址替换为压缩处理后的待压缩报文的存储地址。最后,当待压缩报文进行压缩处理完成后并被从压缩响应队列中取走时,可先顺序输出每个元数据中记录的指针,并从指针的头部开始遍历,依次输出非待压缩报文和压缩处理后的待压缩报文。
[0084]举例而言,如图3所示,在某一时刻,压缩请求队列存在待压缩报文P3,同时待压缩报文P3附带一个指针记录非待压缩报文P2 ;压缩请求队列存在待压缩报文P6,同时待压缩报文P6进入压缩请求队列后,可记录order_bufTer的队头指针到待压缩报文P6的相关指针中。
[0085]例如,当压缩保序模块500对待压缩报文P3进行出队操作时,首先可顺序输出当前待压缩报文P3对应的元数据记录的乱序指针,从该指针头部遍历并依次输出非待压缩报文P2,最后输出待压缩报文P3。由此,可以确保非待压缩报文P2、P4和P5不经过实际的压缩过程、不消耗压缩带宽、不引发协处理器I/O过程,同时也不影响整体的压缩性能,最终也可以达到TCP Flow内数据报文的保序过程。
[0086]本发明实施例的用于报文压缩的保序装置,每当发送模块将待压缩报文发送至压缩请求队列之前,通过第二判断模块判断临时缓冲队列中当前是否存在有非待压缩报文,发送模块在当前存在有非待压缩报文时,将非待压缩报文和待压缩报文发送至压缩请求队列中的相应元数据对应的存储单元中,压缩保序模块在对压缩请求队列中的待压缩报文进行压缩处理之后,通过压缩响应队列将压缩处理后的待压缩报文和元数据中的非待压缩报文按序输出至下一级处理系统或传输网络中,至少具有以下优点:(1)基于TCP Flow粒度进行数据压缩,不同TCP Flow允许采用不同的压缩方法,实现了对业务数据透明的数据压缩;(2)通过压缩协处理器进行数据压缩,协处理器与CPU之间进行异步操作,提高了压缩设备的系统性能;(3)通过对报文长度小于预设值的报文进行过滤,避免了小报文压缩无压缩收益,提高了数据压缩协处理器的有效负载的利用率和优化协处理器的I/O性能。
[0087]图8是根据本发明一个具体实施例的用于报文压缩的保序装置的结构示意图。
[0088]如图8所示,该用于报文压缩的保序装置可以包括:接收模块100、第一判断模块200、发送模块300、第二判断模块400、压缩保序模块500和第一获取模块600。
[0089]具体地,第一获取模块600用于获取压缩请求队列中当前待压缩报文的数目。举例而言,第一获取模块600可为每个报文中的session添加Fly_in_HW_cnt变量,该变量可表示当前在压缩卡中的待处理报文的数目,可维护当前仍然处于压缩请求队列和压缩响应队列中的所有报文。例如,每当一个待压缩报文进入压缩请求队列时,可执行Fly_in_HW_cnt++操作;每当一个压缩处理后的待压缩报文出压缩响应队列时,可执行Fly_in_HW_cnt—操作。也就是说,第一获取模块600可通过获取Fly_in_HW_cnt变量当前的值,即可获取压缩请求队列中当前待压缩报文的数目。
[0090]在本发明的一个实施例中,压缩保序模块500还用于在压缩处理后的待压缩报文通过压缩响应队列出队,且压缩请求队列中的当前待压缩报文的数目变为预设阀值时,将临时缓冲队列中的当前所有非待压缩报文输出至下一级处理系统或传输网络中。其中,在本发明的实施例中,预设阀值可为O。
[0091]例如,如图6所示,出队时,当Fly_in_HW_cnt—=0,即压缩请求队列中最后一个待压缩报文出队时,同时临时缓冲队列0rder_buffer中当前还存在有非待压缩报文时,此时,压缩保序模块500可通过Flush Order_buffer强行将Order_buffer中当前记录的所有非待压缩报文直接输出到下一级处理或者输出到网卡,无需经过压缩卡队列。其中,FlushOrder_buffer可维护所有临时非待压缩报文。由此,避免了死锁和高延迟,优化性能。
[0092]在本发明的一个实施例中,压缩保序模块500还用于在第一判断模块判断当前接收到的报文为非待压缩报文,且压缩请求队列中的当前待压缩报文的数目等于预设阀值时,将非待压缩报文直接输出至下一级处理系统或传输网络中。
[0093]例如,如图6所示,入队时,当Fly_in_HW_cnt==0,即当前没有待压缩报文被发送到压缩请求队列中时,同时临时缓冲队列Order_buffer中当前不存在有非待压缩报文时,此时,TCP Flow中的未满足压缩条件的非待压缩报文无需经过Order_buffer缓冲,可以直接进入下一级处理或者输出到压缩卡。这样,可避免死锁和高延迟,优化性能。
[0094]综上所述,这种优化策略充分从单session粒度角度,考虑到非待压缩报文在order_buffer中的积累延迟控制,即对于连续大段的非待压缩流,可以自适应的完成透传功能。也就是说,对于非待压缩报文,可直接旁路压缩卡的硬件处理流程,优化了压缩卡I/O带宽和CPU使用效率,避免了压缩带宽资源浪费,并且,当Fly_in_HW_cnt—==0时,通过Flush Order_buffer强行将临时缓冲队列中的非待压缩报文直接输出至下一级处理或者输出至网卡,减少了非待压缩报文保序过程中的积累处理延迟。
[0095]本发明实施例的用于报文压缩的保序装置,通过第一获取模块获取压缩请求队列中当前待压缩报文的数目,第二获取模块获取临时缓冲队列中当前非待压缩报文的数目,压缩保序模块在压缩请求队列中的当前待压缩报文的数目等于预设阀值,且临时缓冲队列中的当前非待压缩报文的数目不等于预设阀值时,将临时缓冲队列中的当前非待压缩报文输出至下一级处理系统或传输网络中;在压缩请求队列中的当前待压缩报文的数目等于预设阀值,且临时缓冲队列中的当前非待压缩报文的数目等于预设阀值时,将未满足压缩条件的非待压缩报文直接输出至下一级处理系统或传输网络中,优化了压缩卡I/o带宽和(PU使用效率,避免了压缩带宽资源浪费,并且减少了非待压缩报文保序过程中的积累处理延迟。
[0096]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属【技术领域】的技术人员所理解。
[0097]在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(R0M),可擦除可编辑只读存储器(EPR0M或闪速存储器),光纤装置,以及便携式光盘只读存储器(⑶ROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
[0098]应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
[0099]本【技术领域】的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0100]此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0101 ] 上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0102]此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
[0103]在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
[0104]尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
【权利要求】
1.一种用于报文压缩的保序方法,其特征在于,包括: 接收多个报文,并依次判断每个所述报文是否满足压缩条件; 将满足所述压缩条件的待压缩报文发送至压缩请求队列,并将未满足所述压缩条件的非待压缩报文发送至临时缓冲队列; 每当将所述待压缩报文发送至所述压缩请求队列之前,判断所述临时缓冲队列中当前是否存在有非待压缩报文; 如果当前存在有所述非待压缩报文,则将所述非待压缩报文和所述待压缩报文发送至所述压缩请求队列中的相应元数据对应的存储单元中;以及 对所述压缩请求队列中的所述待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和所述元数据中的所述非待压缩报文按序输出至下一级处理系统或传输网络中。
2.根据权利要求1所述的方法,其特征在于,所述将非待压缩报文和所述待压缩报文发送至所述压缩请求队列中的相应元数据对应的存储单元中包括: 提取所述临时缓冲队列中当前存在的所述非待压缩报文; 将满足所述压缩条件的所述待压缩报文和提取的所述非待压缩报文发送至所述压缩请求队列中,其中,所述非待压缩报文以指针形式记录至所述待压缩报文对应的元数据中。
3.根据权利要求1所述的方法,其特征在于,所述元数据具有所述待压缩报文的存储地址,所述对压缩请求队列中的所述待压缩报文进行压缩处理包括: 根据所述存储地址获取所述待压缩报文,并对所述待压缩报文进行压缩处理; 将所述元数据中的所述待压缩报文的存储地址替换为压缩处理后的待压缩报文的存储地址。
4.根据权利要求2所述的方法,其特征在于,所述通过压缩响应队列将压缩处理后的待压缩报文和所述元数据中的所述非待压缩报文按序输出至下一级处理系统或传输网络中包括: 顺序输出所述元数据中记录的指针,并从所述指针的头部开始遍历,依次输出所述非待压缩报文和压缩处理后的所述待压缩报文。
5.根据权利要求1所述的方法,其特征在于,判断所述报文满足所述压缩条件包括: 获取每个所述报文的长度; 判断每个所述报文的长度是否大于或等于预设值; 如果大于或等于所述预设值,则判断所述报文满足所述压缩条件。
6.根据权利要求1所述的方法,其特征在于,还包括: 获取所述压缩请求队列中当前待压缩报文的数目; 当所述压缩处理后的待压缩报文通过压缩响应队列出队,且所述压缩请求队列中的当前待压缩报文的数目变为预设阀值时,将所述临时缓冲队列中的当前所有非待压缩报文输出至下一级处理系统或传输网络中。
7.根据权利要求6所述的 方法,其特征在于,还包括: 当判断当前接收到的报文为非待压缩报文,且所述压缩请求队列中的当前待压缩报文的数目等于所述预设阀值时,将所述非待压缩报文直接输出至下一级处理系统或传输网络中。
8.一种用于报文压缩的保序装置,其特征在于,包括: 接收模块,用于接收多个报文; 第一判断模块,用于依次判断每个所述报文是否满足压缩条件; 发送模块,用于将满足所述压缩条件的待压缩报文发送至压缩请求队列,并将未满足所述压缩条件的非待压缩报文发送至临时缓冲队列; 第二判断模块,用于每当所述发送模块将所述待压缩报文发送至所述压缩请求队列之前,判断所述临时缓冲队列中当前是否存在有非待压缩报文; 所述发送模块还用于在所述第二判断模块判断所述临时缓冲队列中当前存在有所述非待压缩报文时,将所述非待压缩报文和所述待压缩报文发送至所述压缩请求队列中的相应元数据对应的存储单元中; 压缩保序模块,用于对所述压缩请求队列中的所述待压缩报文进行压缩处理,通过压缩响应队列将压缩处理后的待压缩报文和所述元数据中的所述非待压缩报文按序输出至下一级处理系统或传输网络中。
9.根据权利要求8所述的装置,其特征在于,所述发送模块还用于:提取所述临时缓冲队列中当前存在的所述非待压缩报文,并将满足所述压缩条件的所述待压缩报文和提取的所述非待压缩报文发送至所述压缩请求队列中,其中,所述非待压缩报文以指针形式记录至所述待压缩报文对应的元数据中。
10.根据权利要求8所述的装置,其特征在于,所述元数据具有所述待压缩报文的存储地址,所述压缩保序模块还用于:根据所述存储地址获取所述待压缩报文,并对所述待压缩报文进行压缩处理,以及将所述元数据中的所述待压缩报文的存储地址替换为压缩处理后的待压缩报文的存储地址。`
11.根据权利要求9所述的装置,其特征在于,所述压缩保序模块具体用于:顺序输出所述元数据中记录的指针,并从所述指针的头部开始遍历,依次输出所述非待压缩报文和压缩处理后的所述待压缩报文。
12.根据权利要求8所述的装置,其特征在于,所述第一判断模块还用于:获取所述接收模块接收的每个所述报文的长度,并判断每个所述报文的长度是否大于或等于预设值,以及在大于或等于所述预设值时,判断所述报文满足所述压缩条件。
13.根据权利要求8所述的装置,其特征在于,还包括: 第一获取模块,用于获取所述压缩请求队列中当前待压缩报文的数目;其中 所述压缩保序模块还用于在所述压缩处理后的待压缩报文通过压缩响应队列出队,且所述压缩请求队列中的当前待压缩报文的数目变为预设阀值时,将所述临时缓冲队列中的当前所有非待压缩报文输出至下一级处理系统或传输网络中。
14.根据权利要求13所述的装置,其特征在于,所述压缩保序模块还用于在所述第一判断模块判断当前接收到的报文为非待压缩报文,且所述压缩请求队列中的当前待压缩报文的数目等于所述预设阀值时,将所述非待压缩报文直接输出至下一级处理系统或传输网络中。
【文档编号】H04L29/06GK103888452SQ201410086621
【公开日】2014年6月25日 申请日期:2014年3月10日 优先权日:2014年3月10日
【发明者】王燕飞, 吴教仁, 刘涛, 刘宁 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1