用于報文壓縮的保序方法和裝置制造方法
【專利摘要】本發明公開了一種用于報文壓縮的保序方法和裝置,其中該方法包括:接收多個報文,并依次判斷每個報文是否滿足壓縮條件;將滿足壓縮條件的待壓縮報文發送至壓縮請求隊列,并將未滿足壓縮條件的非待壓縮報文發送至臨時緩沖隊列;每當將待壓縮報文發送至壓縮請求隊列之前,判斷臨時緩沖隊列中當前是否存在有非待壓縮報文;如果存在,則將非待壓縮報文和待壓縮報文發送至壓縮請求隊列中的相應元數據對應的存儲單元中;以及對壓縮請求隊列中的待壓縮報文進行壓縮處理,通過壓縮響應隊列將壓縮處理后的待壓縮報文和元數據中的非待壓縮報文按序輸出。本發明實施例的保序方法有效地利用壓縮協處理器帶寬資源,優化了壓縮卡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日
【發明者】王燕飛, 吳教仁, 劉濤, 劉寧 申請人:百度在線網絡技術(北京)有限公司