專利名稱:處理接收協議數據單元的制作方法
背景技術:
1、相關技術的說明開放系統互聯(ISO)是國際標準化組織(ISO)的標準,其為實現七層的協議而定義了聯網框架。這七層是應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,和物理層。物理層連接到物理鏈路。當數據正被發送時,數據從應用層開始傳輸,通過表示層、會話層、傳輸層、網絡層、數據鏈路層、和物理層,到物理鏈路。當數據正被從物理鏈路上接收時,數據通過物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層,到達應用層。因此,控制從一層傳遞到下一層,以便發送和接收數據。
應用層(第七層)支持應用和終端用戶進程。表示層(第六層)將數據從應用格式譯成網絡格式,或相反。會話層(第五層)建立、管理和終止應用之間的連接。傳輸層(第四層)提供數據的傳輸。網絡層(第三層)提供交換和路由。數據鏈路層(第二層)把數據包編碼和解碼成比特。物理層(第一層)通過物理網絡傳送比特流。
聯網協議(如OSI)在存儲和進程間通信中的使用正在變得流行起來。這種趨向通過消除對用于攜帶存儲傳輸負荷的獨立物理介質的需要,給信息技術(IT)基礎設施帶來了巨大的成本優勢。這種優勢以相對于終端工作站的成本實現,而終端工作站必須在主處理器上運行更加復雜的協議。
因此,需要用于改善協議處理的技術。
附圖簡述現在參考附圖,其中相同的附圖標記在全文中表示相應的部分
圖1示出其中可以實現某些實施例的計算環境的細節。
圖2示出根據某些實施例的網絡適配器的方框圖。
圖3示出根據某些實施例的協議數據單元的方框圖。
圖4示出根據某些實施例的三個傳輸控制協議(TCP)段。
圖5示出根據某些實施例的傳輸控制協議(TCP)段和協議數據單元處理。
圖6示出根據某些實施例的由段處理引擎執行的操作。
圖7示出根據某些實施例的由段處理引擎執行的用于協議數據單元檢測的操作。
圖8示出根據某些實施例的由段處理引擎執行的用于標志驗證和剝離的操作。
圖9示出根據某些實施例由預處理代理執行的操作。
圖10示出根據某些實施例的接收緩存指令的格式。
圖11示出根據某些實施例的循環冗余校驗(CRC)數據結構的格式。
圖12示出根據某些實施例的段處理引擎和循環冗余校驗(CRC)引擎的交互。
圖13示出根據某些實施例在“BEFORE”情景中進行串行化的時間線。
圖14示出根據某些實施例在“AFTER”情景中進行串行化的時間線。
圖15示出根據某些實施例由循環冗余校驗(CRC)引擎執行的操作。
圖16示出根據某些實施例由段處理引擎執行的用于循環冗余校驗的操作。
詳細說明在以下描述中,參考形成該描述的一部分并示出幾個實施例的附圖。可以理解,可以利用其它的實施例,并且可以對結構和操作進行改變。
圖1示出其中可以實現某些實施例的計算環境的細節。主計算機102包括一個或多個中央處理單元(CPU)104、易失性存儲器106、非易失性存儲器108(例如,磁盤驅動器,光盤驅動器,磁帶驅動器等等)、操作系統110、和一個或多個網絡適配器128。一個或多個存儲驅動器120、一個或多個應用程序122、和一個或多個網絡驅動器126駐留在存儲器106,用于由CPU 104執行并且能夠通過網絡176發送和取回來自遠程存儲子系統140的數據包。此外,一部分存儲器被指定為應用空間124,該應用空間可以被應用程序122訪問。
主計算機102可以包含本領域已知的任何計算裝置,例如大型機、服務器、個人計算機、工作站、膝上型電腦、便攜式計算機、電話裝置、網絡設備、虛擬設備、存儲控制器等等。可以使用本領域任何已知的CPU 104和操作系統110。存儲器106中的程序和數據可以被交換到存儲器108中作為存儲器管理操作的一部分。網絡176可以包括任何類型的網絡,例如,存儲區域網(SAN)、局域網(LAN),廣域網(WAN)、因特網、內部網等等。
存儲子系統140包括連接到一個或多個存儲裝置190的存儲服務器180(即,一種計算裝置)。每一個存儲裝置190可以包括存儲裝置或存儲裝置陣列,例如直接訪問存儲設備(DASD)、簡單磁盤捆綁(JBOD)、獨立磁盤冗余陣列(RAID)、虛擬裝置等等。存儲服務器180包括輸入/輸出處理器182,其包括奇偶位發生器184。奇偶位發生器184能夠根據實施例產生奇偶校驗信息。
每一個網絡適配器128包括在網絡適配器128的硬件中實現的各種部件。每一個網絡適配器能夠通過網絡176發送和接收數據包。
每一個網絡驅動器126包括網絡適配器128專用于與每一個網絡適配器128以及操作系統110、每一個存儲驅動器120和每一個網絡適配器128之間的接口進行通信的命令。每一個網絡適配器128或網絡驅動器126實現處理數據包的邏輯,例如用以處理被打包在通信協議里面的數據包中包括的消息內容的傳輸協議層,例如傳輸控制協議(TCP)(IETF RFC 793,1981年9月公開)和/或因特網協議(IP)(IETF RFC 791,1981年9月公開),因特網小型計算機系統接口(iSCSI)(IETF RFC 3347,2003年2月公開),光纖信道(美國國家標準協會(ANSI)X3.269-199X,修訂版012,1995年12月4日),或者本領域公知的任何其它通信協議。傳輸協議層從收到的傳輸控制協議/因特網協議(TCP/IP)數據包解開有效載荷,并把數據傳送給網絡驅動器126,以返回到應用程序122。此外,發送數據的應用程序122向網絡驅動器126發送數據,然后網絡驅動器126把數據送到傳輸協議層,以在通過網絡176發送之前打包在TCP/IP數據包中。
存儲裝置108可以包括內部存儲裝置或者附加的或網絡可訪問的存儲裝置。存儲裝置108中的程序可被加載到存儲器106和由CPU104執行。輸入裝置150可以用來向CPU 104提供用戶輸入,并且可以包括鍵盤、鼠標、手寫筆、麥克風、觸摸顯示屏、或本領域已知的任何其它激活或輸入機制。輸出裝置152能夠呈現從CPU 104或其它部件傳來的信息,例如顯示器、監視器、打印機、存儲裝置等。
在某些實施例中,各種各樣的結構和/或者緩存器(未示出)可以駐留在存儲器106中,或者可以位于與存儲器106分離的存儲單元中。
圖2示出根據某些實施例的網絡適配器128的方框圖。網絡適配器包括使用若干個寄存器212的預處理代理210,包含循環冗余校驗(CRC)引擎224的直接存儲器存取(DMA)引擎220、段處理引擎230、輸入/輸出(I/O)處理器240,物理通信層242、和總線控制器244。CRC引擎224包括一個或多個循環冗余校驗(CRC)數據結構226和循環冗余校驗(CRC)存儲區域228。在某些實施例中,預處理代理210預先處理符合第4+層協議的數據段,為了引用方便,這些數據段將被稱為協議段。為了引用方便,術語“第4+層協議”在這里將用來描述出現的協議,例如iSCSI和RDMA(RDMA聯盟,TCP/IP網絡上的RDMA協議,版本1.0,2002年10月)。盡管iSCSI和RDMA協議可以被描述為更高級的協議(例如,第5層或更高級協議),實施例把iSCSI和RDMA協議稱為第4+層協議,這是因為它們與第4層協議的處理緊密聯系。當然這些協議中的一些(例如,RDMA)可以與傳輸層(第4層)協議(例如,TCP)緊密聯系。在某些實施例中,段處理引擎230處理數據段(例如,TCP段),為了便于引用,這些數據段可被稱為“傳輸層段”。協議數據單元可以被描述成用于第4+層協議的傳輸的單元。協議段可被描述成協議數據單元的部分或全部(即,協議數據單元可以形成一個或多個協議段)。
在某些實施例中,預處理代理210可以被描述為專用處理器,該專用處理器具有上下文敏感寄存器空間(寄存器212),并且可以結合段處理引擎230使用,以實現有效和可編程的接收處理。
總線控制器244使得每個網絡適配器128可以在計算機總線160上通信,該計算機總線可以包括本領域已知的任何總線接口,例如任何類型的外圍部件互聯(PCI)總線(例如PCI總線(PCI專業組,PCI本地總線規范,2.3版本,2002年3月公開)、PCI-X總線(PCI專業組,PCI-X 2.0a協議規范,2002年公開)、或PCI快速總線(PCI專業組,PCI快速基本規范1.0a,2002年公開)、小型計算機系統接口(SCSI)(美國國家標準協會(ANSI)SCSI控制器命令-2(SCC-2)NCITS.3181998),串行ATA(SATA 1.0a規范,2003年2月公開)等等。
網絡適配器128包括用于實現物理通信層242的網絡協議,用以在網絡176上向遠程數據存儲裝置發送網絡數據包和接收來自遠程數據存儲裝置的網絡數據包。在某些實施例中,網絡適配器128可以實現以太網協議(IEEE標準,802.3,2002年3月8日公開)、光纖信道協議(美國國家標準協會(ANSI)X3.269-199X,012版本,1995年12月4日)或者本領域中已知的任何其它網絡通信協議。
網絡適配器128包括輸入/輸出(I/O)控制器240。在某些實施例中,I/O控制器240可以包括因特網小型計算機系統接口(iSCSI控制器),并且可以理解的是,可以使用其它類型的網絡控制器,例如以太網介質訪問控制器(MAC)或卡。
為了減輕主處理器上運行更復雜協議的負擔,某些實施例從主處理器中卸載協議處理和數據放置。在某些實施例中,可以用專用硬件來提供所述卸載協議處理。在某些實施例中,網絡適配器128可以實現傳輸層卸載引擎(TOE),從而在網絡適配器中實現傳輸協議層,以減輕主計算機上的處理負擔。對協議處理的卸載導致對所接收的數據的有效的處理和放置。實施例提供接收路徑處理。在某些實施例中,接收路徑處理是用于第4+層(iSCSI,RDMA)協議數據單元的。
實施例改善第4+層協議數據單元(PDU)檢測、標志驗證和剝離、第4+層報頭處理(包括在第4層邊界上的那些報頭分離)、到應用空間的直接數據傳送、和循環冗余校驗(CRC)摘要計算。
循環冗余校驗可以被描述為用于檢測數據傳輸錯誤的技術。例如,利用循環冗余校驗技術,消息可以被劃分為若干個預定長度,這些預定長度可以由固定的除數相除,余數附加到該消息上。當消息和附加的余數被接收到時,接收的計算裝置重計算該余數,并將重計算出的余數與該附加的余數執行比較。如果余數不匹配,就檢測到錯誤。
圖3示出根據某些實施例的協議數據單元300的方框圖。協議數據單元300包括幾個字段,例如報頭310、一個或兩個摘要312、318、標志314、和有效載荷316。報頭310包括整個協議數據單元的長度以及其它信息。摘要312、318可以通過利用對所覆蓋的數據進行循環冗余校驗(例如CRC-32C技術)來獲得。iSCSI協議具有兩個摘要,一個用于報頭,一個用于有效載荷。RDMA協議具有用于整個協議數據單元的單個摘要。標志314是存在于TCP流中的字段。每個標志314是協議數據單元的起點或終點或者它們兩者的指針。有效載荷316是數據。
第4+層協議數據單元先被構建,然后作為字節流移交來進行TCP處理。所述TCP處理可以將每個協議段再分段成多個傳輸層段,使得發送出的每個傳輸層段不會超過有效最大數據段大小。圖4示出根據某些實施例的三個傳輸層段410、420、430。每個傳輸層段410、420、430分別包括第4層報頭#1、#2、#3。而且傳輸層段(例如410)有效載荷可以包括第4+層報頭和數據。
在某些情況下,用于第4+層的協議數據單元不完全包含在傳輸層段中。例如,單個協議數據單元#1 440具有報頭部分和兩個數據部分,其中傳輸層段410包括第4+層報頭#1和第4+層數據#1(即,用于協議數據單元#1的數據部分),傳輸層段420包括第4+層數據#1(即,用于協議單元#1的附加數據)。因此,協議數據單元可以被包含在單個傳輸層段中,協議數據單元可以在多個傳輸層段上分段,傳輸層段可以包含多個協議數據單元或它們的組合。
圖5示出根據某些實施例的傳輸層段和協議數據單元處理。在傳輸層段502、504到達,并且第4+層的協議數據單元被段處理引擎230檢測到時,來自第4+層報頭520的N字節相關數據的副本被直接放置在預處理代理210的寄存器空間212,并且所述上下文被加載。該上下文可以被描述為關于特殊TCP連接的信息。在某些實施例中,一個TCP連接具有一個上下文。在某些其它實施例中,一個TCP連接可以具有一個或多個上下文。在這個例子中,來自第4+層報頭520的相關數據包括位于兩個傳輸層段512、514中的兩個部分512和514。在第4+層線處理中,通過消除傳統系統中使用的存儲和轉發體系結構范例,報頭字節減少處理延遲。此外,當預處理代理210將命令發送給DMA引擎220時,輸入的數據可以被直接存儲器訪問(DMA)引擎220取回,以放置在應用空間124中。
圖6示出根據某些實施例的由段處理引擎230執行的操作。控制開始于框600,其中段處理引擎230接收傳輸層段。在某些實施例中,段處理引擎230從順序排列的傳輸層段中剝離報頭(框620),執行協議數據單元檢測(框604),執行標志驗證和剝離(框606),如果并行接收到一個窺視(peek)命令就處理它(框608-614)。在某些可選擇的實施例中,框602、604、606和608的處理可以串行執行,或者并行執行某些處理同時串行執行其它處理。在某些實施例中,執行框602的處理,以用于框604和606的處理。而且在某些實施例中,如果傳輸層段被無序地接收,則實施例將等待丟失的傳輸層段,并且在處理傳輸層段之前將其按順序放置。
在框604中,協議數據單元檢測識別第4+層報頭的位置。從框602、604和606開始,處理循環回到框600。
在框608中,段處理引擎230確定是否已接收到窺視命令。如果接收到,則處理繼續到框610,否則處理繼續到框614。窺視命令是用于請求段處理引擎230“提前查看”輸入的傳輸層段和定位特殊數據的命令。在框610中,段處理引擎230等待被請求的數據。一旦接收到被請求的數據,處理從框610繼續到框612。在框612中,段處理引擎230將第4+層報頭的位置的標志和/或所檢測到的協議數據單元的實際第4+層報頭轉發到預處理代理210。在某些實施例中,位置的標志通過發送指針到協議數據單元的起始位置和終止位置來提供。從框612開始,處理循環回到框600。在框614中,可以在循環回到框600之前執行其它的處理。盡管段處理引擎230被描述為在框608中檢查窺視命令,但是在框608的處理之前可能發生其它的處理。其它的處理可以包括處理附加輸入的傳輸層段。
為了接收協議數據單元,實施例提供可配置的標志處理代理(MPA)和協議數據單元檢測;預處理代理210寄存器212的數據的直接窺視;到應用空間124的數據放置(即,數據放置到應用程序訪問的存儲器中,而不是放置到通用存儲器區域,數據被從該通用存儲器區域移動到由應用程序訪問的存儲器);和循環冗余校驗(例如CRC-32C技術)驗證。
在某些實施例中,標志處理代理(MPA)可以是段處理引擎230的一部分。關于可配置的MPA和協議數據單元檢測,實施例提供用于每個TCP連接的配置機制,該TCP連接使得可以執行標志剝離/驗證和協議數據單元檢測。特別地,計算機具有與不同計算機分不同的連接(例如連接到第二計算機上的電子郵件賬號的第一計算機上的瀏覽器具有和第二計算機的連接)。在某些實施例中,可以在數據正在傳送期間建立TCP連接。
實施例為每個第4+層TCP連接設置下列新的參數(a)第4+層報頭中長度字段的偏移量(還稱為“O”)(b)第4+層報頭中長度字段的寬度(還稱為“W”)(c)長度字段乘法器(還稱為“M”)(d)長度字段加法器(還稱為“A”)(e)乘法/加法順序(還稱為“D”)(f)標志間隔(還稱為“I”)(g)初始偏移量(還稱為“S”)(h)標志長度(還稱為“L”)(i)標志類型(還稱為“T”)在新的TCP連接參數中,在第4+層連接時協商長度字段乘法器參數(M)和長度字段加法器參數(A)。乘法/加法順序參數(D)是用于給定的TCP連接的常量,它由用于創建連接的兩個計算裝置協商,并且這個參數決定如何為協議數據單元計算數據的最終長度,因為該第4+層協議不提供該信息。
只要連接被創建,并且在傳送任何數據之前,都可以設置新的TCP連接參數。這些字段和按順序排列的傳輸層段一起使用,以檢測協議數據單元邊界,驗證標志和刪除(剝離)標志。
圖7示出根據某些實施例的由段處理引擎230執行的用于協議數據單元檢測(框604)的操作。控制在框700開始,其中段處理引擎230從協議數據單元報頭中的長度字段偏移量(參數“O”)開始、以報頭中的長度字段的寬度(參數“W”)來提取值。例如,如果長度字段以四個字節的偏移量開始,并且具有五個字節的寬度,那么從字節四、五、六、七和八提取該值。在框702,段處理引擎230根據所提取的值(從框700)和乘法/加法順序參數(“D”)、長度字段乘法器參數(“M”)和長度字段加法器參數(“A”)的值來確定協議數據單元的最終長度。在某些實施例中,段處理引擎230使用下列的偽代碼來確定最終長度,其中(Value at[O..+O+W])是來自框700的處理的提取值如果(D==0)開始最終長度=((Value at[O..O+W])×M)+A否則最終長度=((Value at[O..O+W])+A)×M也就是說,如果乘法/加法順序參數(“D”)的值是0,則通過以下方式確定最終長度,即,取一個值,該值是以第4+層報頭參數的長度字段偏移量(“O”)的值開始到偏移量參數(“O”)的值加上第4+層報頭參數的長度字段寬度(“W”)的值。這個值與長度字段乘法器(“M”)的值相乘,然后該結果加上長度字段加法器參數(“A”)的值。
另一方面,如果乘法/加法順序參數(“D”)的值不是0,則通過以下方式確定最終長度,即,取一個值,該值是以第4+層報頭參數的長度字段偏移量(“O”)的值開始到偏移量參數(“O”)的值加上第4+層報頭參數的長度字段寬度(“W”)的值。這個值加上長度字段加法器(“A”)的值,然后結果與長度字段乘法器(“M”)的值相乘。
在框704中,段處理引擎230根據協議數據單元的起始位置和最終長度來檢測協議數據單元。在某些實施例中,協議數據單元從起始位置(“Start”)到起始位置加上所確定的最終長度(“Start”+final length)進行檢測。在某些實施例中,“Start”可以被描述為協議數據單元的數據的開始。
圖8示出根據某些實施例的由段處理引擎230執行的用于標志驗證和剝離(框606)的操作。控制在框800開始,其中段處理引擎230從初始偏移量提取標志長度參數(“L”)。在某些實施例中,初始偏移量是協議段的開始或協議數據單元的開始,并且可以被指定為參數“S”,它是一個變量。在框802中,段處理引擎230根據可以指向協議數據單元的開始和/或結束的標志類型來執行標志驗證。在某些實施例中,段處理引擎230利用下列偽代碼來驗證標志如果(T==開始)檢查標志是否指向協議數據單元檢測所發現的開始否則如果(T==結束)檢查是否結束否則如果(T==兩者)將標志域分為兩部分,和檢查一部分是否指向開始并且另一部分是否指向結束也就是說,對于標志驗證,段處理引擎230確定標志類型參數(“T”)的值是否被設置為開始。如果是,則段處理引擎230檢查標志是否指向協議數據單元的開始(即,在圖7中的協議數據單元檢測處理所發現的“Start”)。如果標志類型參數(“T”)的值被設置為結束,則段處理引擎230檢查標志是否指向協議數據單元的結束。如果標志類型參數(“T”)的值被設置為兩者,則段處理引擎230將標志域分為兩部分,并且檢查是否標志的一部分指向開始,標志的另一部分指向結束。
一旦標志被驗證,則在框804中,段處理引擎230在輸入的字節流中跳過標志間隔。
圖9示出根據某些實施例由預處理代理210執行的操作。第4+層協議數據單元的接收處理包括檢查報頭和處理報頭。在某些實施例中,在前一個消息的數據已完全傳送到主計算機102之前,執行報頭處理。由于這些第4+層協議用于應用程序122,例如磁盤訪問和進程間通信,期望存在低處理延遲。在某些實施例中,避免了在硅片中的硬編碼報頭處理,因為它為報頭處理提供靈活性差的解決方案。
實施例通過利用具有上下文敏感寄存器空間212的預處理代理210(例如微型引擎)而以靈活的方式執行報頭處理。
控制在框900開始,其中預處理代理210接收來自段處理引擎230的協議段的實際報頭數據的位置的標識或該實際報頭數據。在框902,預處理代理210解釋所接收的數據的報頭部分,從而確定協議數據單元的下一個數據部分的下一個報頭部分的位置。在框904中,預處理代理210發送窺視命令給段處理引擎230,用于下一個協議數據單元的報頭部分,并根據已發出的窺視命令接收被請求的數據。在某些實施例中,所接收的數據是協議數據單元的第4+層報頭和咸實際第4+層報頭的位置標識。盡管根據所發出的窺視命令接收數據被描述為下列窺視命令發送,但是可以在發出窺視命令之后的任何時間(例如在框906的處理之后)接收數據。通過使用窺視命令,某些實施例將直接窺視結果提供到預處理代理210寄存器212中。
某些實施例還在應用空間124中提供對所接收的數據的放置。在框906中,預處理代理210通知直接存儲器存取(DMA)引擎220將協議數據單元的“n”(其中“n”表示正整數值)字節數據存儲到應用空間124中。在某些實施例中,預處理代理210發出接收緩存指令給DMA引擎220。圖10示出根據某些實施例的接收緩存指令1000的格式。接收緩存指令1000包括操作碼1010、標記1012、跳越長度1014以及地址/長度對1016、1018、1020、…1022的列表。盡管示出了四個地址/長度對,但是在接收緩存指令中可以包括任何數量的地址/長度對。操作碼1010提供指令類型,它在這種情況下是“接收緩存”類型的指令。
操作碼1010后面跟隨與到應用空間124的數據傳送相關的標記1012。一些帶有指令的標記是用于計算在傳送數量上的CRC摘要(例如利用CRC32-C技術)的C和表示剝離將從被傳送的有效載荷去除的填充字節的P。
標記1012后面跟隨傳送數據時要跳越的跳越長度1014。跳越長度1014在跳躍第4+層報頭是有用的,使得數據被存儲在應用空間124中。跳越長度1014后面跟隨地址/長度對1016…1024的分散列表。地址/長度對1016…1024提供應用空間124中的地址和相關聯的長度,使得數據可以被存儲在指定長度的地址。
一旦用DMA引擎220調度接收緩存指令,接收緩存指令就被應用于輸入的傳輸層段。接收緩存指令剝離來自傳輸層段的協議數據單元的TCP有效載荷,完成到目的地應用空間124的有效載荷的傳輸,并且更新地址/長度參數來反映當前的傳輸。這個處理消除了按順序排列的傳輸層段的臨時緩存的需求。
實施例在數據正被傳輸到應用緩存時計算循環冗余校驗(例如CRC-32C)摘要。在只要傳輸層段到達就傳輸與每個傳輸層段相關的協議數據單元的有效載荷時,計算CRC-32C摘要是困難的。而且,在某些實施例中,可以采用4字節的間隔尺寸來計算循環冗余校驗摘要,但是傳輸層段可以采用任何字節的間隔尺寸。實施例以對存儲利用和性能有效的方式來執行循環冗余校驗。
在每個TCP連接上,保持CRC數據結構226,從而計算傳輸層段上的循環冗余校驗摘要。圖11示出根據某些實施例的CRC數據結構226的格式。CRC數據結構226包括部分CRC摘要字段1110、剩余計數1112和剩余數據1114。部分CRC摘要字段1110保持為在前傳輸層段的特定數量(例如[floor(N/4)×4],其中N是計算CRC的字節數量)字節而計算的循環冗余校驗(例如CRC-32C)摘要。剩余數據字段1112保持在前傳輸層段的剩余字節。在某些實施例中,剩余數據字節數={N-[floor(N/4)×4]}(其中N是其上計算CRC的字節數量)。剩余計數字段1114保持在剩余數據字段中有效的許多字節。
利用每個新的傳輸層段,給CRC引擎224提供在前傳輸層段的部分CRC摘要,它用作初始CRC。還提供“剩余數據”來計算隨后的CRC摘要。一旦協議數據單元被傳送,最后的CRC摘要就和所接收的摘要執行比較。如果發現匹配,就向應用程序122通知所接收的數據(例如用通過CRC引擎224設置的標記來通知預處理代理210),否則檢測到錯誤。在某些實施例中,當檢測到錯誤時,將錯誤通知網絡驅動器126。
圖12示出根據某些實施例的段處理引擎230和CRC引擎224的交互。段處理引擎230負責把下一個傳輸層段推送到CRC引擎224,以用于CRC摘要計算。利用每個新的傳輸層段,段處理引擎230提供在前傳輸層段的部分CRC摘要以及下一個傳輸層段。這個部分CRC摘要用作下一個傳輸層段的初始CRC摘要。因此,這種處理串行化在相同流上的背靠背傳輸層段處理。
圖13示出根據某些實施例在“BEFORE”情景中進行串行化的時間線1300。由于網絡通信業務量已經被示出為以突發方式到來,所以由時間線1300表示的串行化可能會影響性能。實施例通過在CRC引擎224內部引入用于CRC數據結構226的“向后一個”存儲區域228(例如高速緩沖存儲器)來解決這一問題。存儲區域228儲存部分CRC摘要。段處理引擎230確定當前傳輸層段和最后一個是否在相同流上,如果是,段處理引擎230開始向CRC引擎224傳送數據,而不用等待部分CRC摘要和剩余數據交換。CRC引擎224還知曉這種情況,并利用部分CRC摘要的緩存版本。圖14示出根據某些實施例在“AFTER”情景中串行化的時間線1400。在圖14中,時間線1400示出在“AFTRER”的情況下,在圖13的BEFORE情景中的“延遲”消失。
圖15示出根據某些實施例由CRC引擎224執行的操作。控制在框1500開始,其中CRC引擎224接收傳輸層段。在框1502中,CRC引擎224確定部分CRC摘要和剩余數據是否與傳輸層段一起被接收到。如果是,處理繼續到框1506,否則,處理繼續到框1504。在框1504中,CRC引擎224從CRC存儲區域228取回在前傳輸層段的部分CRC摘要和剩余數據。
在框1506中,CRC引擎224確定伴隨這個傳輸層段的接收是否接收到完整的協議數據單元。也就是說,由于協議數據單元可以具有嵌入在多個傳輸層段內部的多個協議段,所以CRC引擎224確定它現在是否接收到完整的協議數據單元。如果是,處理繼續到框1508,否則,處理繼續到框1516。
在框1508中,CRC引擎224利用所接收或所取回的部分CRC摘要和剩余數據來計算協議數據單元的完整的CRC摘要。例如,狀態機和相關的寄存器可以用于計算完整的CRC摘要,并且部分CRC摘要和剩余數據可用于保存在接收到協議數據單元的所有數據之前的寄存器狀態。在框1510中,CRC引擎224確定所計算出的CRC摘要和所接收的CRC摘要是否匹配。如果是,處理繼續到框1512,否則處理繼續到框1514。在框1512中,CRC引擎224將成功接收的數據通知應用程序122。在框1514中,CRC引擎224處理錯誤。
在框1516中,CRC引擎224利用所接收或所取回的部分CRC摘要和剩余數據來計算新的部分CRC摘要。在框1518中,所接收或所取回的部分CRC摘要和剩余數據將新的部分CRC摘要和剩余數據發送給段處理引擎230。在框1520中,所接收或所取回的部分CRC摘要和剩余數據在CRC數據結構226和CRC存儲區域228中儲存新的部分CRC摘要和剩余數據。然后,處理循環回到框1500。
圖16示出根據某些實施例的由段處理引擎230執行的用于循環冗余校驗的操作。控制在框1600開始,其中段處理引擎230接收當前傳輸層段。在框1602中,段處理引擎230確定是否接收到部分CRC摘要和剩余數據以用于最后傳輸層段。如果是,處理繼續到框1604,否則處理繼續到框1606。在框1604中,段處理引擎230將當前傳輸層段以及用于最后傳輸層段的部分CRC摘要和剩余數據一起轉發給CRC引擎224。
在框1606中,段處理引擎230確定當前傳輸層段和最后傳輸層段是否在相同流上。如果當前傳輸層段和最后傳輸層段具有相同的TCP連接并且以正確的順序接收,就可以確定當前傳輸層段與最后傳輸層段在相同流上。如果是這樣,處理繼續到框1608,否則處理循環回到框1604。在框1608中,段處理引擎230將當前傳輸層段發送給CRC引擎224,而不發送用于最后傳輸層段的部分CRC摘要和剩余數據。
因此,實施例解決了第4+層協議數據單元的接收和數據放置的實際問題。為用于處理其數據部分可包含協議段的所接收的傳輸層段的每個關鍵階段提供有效和完整的解決方案。
實施例提供用于第4+層協議數據單元檢測、標志驗證和剝離、利用預處理代理210的第4+層直接報頭檢查、以及可以跨越多個字節排列的傳輸層段的協議數據單元有效載荷的CRC計算的解決方案。接收業務量的流水線的處理被提供來用于處理第4+業務量。接收業務量的有效處理反過來改進整個系統的性能。
因此,某些實施例處理用于上層協議的協議數據單元,例如iSCSI和RDMA。
附加實施例的細節利用編程技術和/或工程技術已產生軟件、固件、硬件或它們的任何組合,所述的實施例可以被實現為方法、裝置或產品。在這里使用的術語“產品”和“電路”是指在硬件邏輯中實現的狀態機、代碼或邏輯(例如集成電路芯片、可編程門陣列(PGA)、專用集成電路(ASIC)等等)或者計算機可讀介質,例如磁盤存儲介質(例如硬盤驅動器、軟盤、磁帶等等)、光學存儲裝置(CD-ROM、光盤等等)、易失性和非易失性存儲器(例如EEPROM、ROM、PROM、RAM、DRAM、SRAM、固件、可編程邏輯等等)。在計算機可讀介質中的代碼被處理器訪問和執行。當代碼或邏輯被處理器執行時,電路可以包括介質(它包括代碼或邏輯)以及執行從介質加載的代碼的處理器。實現實施例的代碼還可以進一步通過傳輸介質或從網絡上的文件服務器訪問。在這種情況下,其中實現該代碼的產品可以包括傳輸介質例如網絡傳輸線、無線傳輸介質、通過空間傳播的信號、無線電波、紅外線信號等等。因此,該“產品”可以包括其中包含該代碼的介質。而且,該“產品”可以包括其中包含、處理和執行該代碼的硬件和軟件組件的組合。當然,本領域技術人員將認識到,可以對這種結構進行很多修改,該產品可以包括現有技術中已知的任何信息承載介質。而且,可以在適配器上或主板上的一個或多個集成電路上實現這些裝置、適配器等。
圖6、7、8、9、15和16所示的操作顯示按一定順序發生的某些事件。在可選擇的實施例中,某些操作可以按不同的順序執行、修改或省略。而且,可以在上述的邏輯中增加操作,并且仍然符合所述的實施例。而且,這里所述的操作可以依次發生,或者某些操作可以被并行執行。而且,可以通過單個的處理單元或者通過若干個分布式處理單元來執行操作。
以上所述的各種實施例的描述是為了舉例說明而提出的。它不是意在窮盡的或者限制性的。在上述教導下可以實現很多修改和變化。
權利要求
1.一種用于處理數據段的方法,包括從傳輸層段剝離報頭;執行協議數據單元檢測,以確定作為該傳輸層段的部分數據的協議段的數據;以及執行標志驗證和剝離。
2.如權利要求1所述的方法,其中,執行協議數據單元檢測還包括從協議數據單元的報頭的長度字段的偏移量并以該報頭的長度字段的寬度來提取值;確定該協議數據單元的最終長度;以及基于該協議數據單元的起始位置和最終長度檢測協議數據單元。
3.如權利要求2所述的方法,其中,確定該協議數據單元的最終長度是基于所提取的值以及乘法/加法順序參數、長度字段乘法器參數和長度字段加法器參數的值的。
4.如權利要求1所述的方法,其中,執行標志驗證和剝離還包括從初始偏移量提取標志長度數的字節;基于標志類型來驗證該標志;和在輸入的字節流中跳躍標志間隔。
5.如權利要求1所述的方法,還包括接收請求下一個協議數據單元的報頭部分的窺視命令;等待所述被請求的數據;和響應該窺視命令返回所述被請求的數據。
6.如權利要求5所述的方法,其中,返回所述被請求的數據還包括向預處理代理提供該協議數據單元的報頭的位置。
7.如權利要求5所述的方法,其中,返回所述被請求的數據還包括向預處理代理提供該協議數據單元的報頭。
8.一種處理數據段的方法,包括接收協議數據單元的報頭部分;利用所接收的報頭部分來確定要儲存在應用空間中的數據的字節數;基于所接收的報頭部分來確定下一個協議數據單元的下一個報頭部分;和發出窺視命令以獲得該下一個報頭部分。
9.如權利要求8所述的方法,還包括通知直接存儲器訪問(DMA)引擎來將所確定字節數的數據直接存儲到該應用空間。
10.一種用于執行循環冗余校驗的方法,包括接收傳輸層段;確定是否已接收到完整的協議數據單元;和響應于確定出尚未接收到完整協議數據單元,計算新的部分循環冗余校驗摘要;和存儲該新的部分循環冗余校驗摘要和來自該計算的剩余數據。
11.如權利要求10所述的方法,其中,該新的部分循環冗余校驗摘要和剩余數據被存儲在循環冗余校驗存儲區域內和循環冗余校驗數據結構內。
12.如權利要求10所述的方法,還包括將該新的部分循環冗余校驗摘要和剩余數據轉發到段處理引擎。
13.如權利要求10所述的方法,還包括確定部分循環冗余校驗摘要和剩余數據是否與該傳輸層段一起被接收;響應于確定出未接收到該部分循環冗余校驗摘要和剩余數據而取回該部分循環冗余校驗摘要和該剩余數據;和利用所取回的部分循環冗余校驗摘要和剩余數據計算該新的部分循環冗余校驗摘要。
14.如權利要求10所述的方法,還包括響應于確定出已接收到完整的協議數據單元,計算該協議數據單元的完整的循環冗余校驗摘要;確定所計算出的循環冗余校驗摘要和與該協議數據單元一起接收的循環冗余校驗摘要是否匹配;響應于確定出存在匹配,將成功接收的數據通知應用程序;和響應于確定出不匹配而執行錯誤處理。
15.一種用于執行循環冗余校驗的方法,包括接收當前傳輸層段;確定是否已接收到最后傳輸層段的部分循環冗余校驗摘要和剩余數據;和響應于確定出已接收到該部分循環冗余校驗摘要和剩余數據,將該當前傳輸層段與該最后傳輸層段的部分循環冗余校驗摘要和剩余數據一起轉發給循環冗余校驗引擎。
16.如權利要求15所述的方法,還包括響應于確定出尚未接收到該部分循環冗余校驗摘要和剩余數據,確定該當前傳輸層段是否與該最后傳輸層段在相同流上;和響應于確定出這些傳輸層段在相同流上,將該當前傳輸層段轉發給循環冗余校驗引擎,而不轉發該最后傳輸層段的部分循環冗余校驗摘要和剩余數據。
17.如權利要求16所述的方法,還包括響應于確定出這些傳輸層段在相同流上,將該當前傳輸層段與該最后傳輸層段的部分循環冗余校驗摘要和剩余數據一起轉發給循環冗余校驗引擎。
18.一種用于處理數據段的產品,其中該產品包括存儲指令的計算機可讀介質,和其中該產品被操作來從傳輸層段剝離報頭;執行協議數據單元檢測,以確定用于作為該傳輸層段的部分數據的協議段的數據;和執行標志驗證和剝離。
19,如權利要求18的產品,其中在執行協議數據單元檢測時,該產品被操作來從協議數據單元的報頭的長度字段的偏移量并以該報頭的長度字段的寬度來提取值;確定該協議數據單元的最終長度;和基于該協議數據單元的起始位置和最終長度來檢測協議數據單元。
20.如權利要求19所述的產品,其中,確定該協議數據單元的最終長度是基于所述提取的值以及乘法/加法順序參數、長度字段乘法器參數和長度字段加法器參數的值。
21.如權利要求18所述的產品,其中,在執行標志驗證和剝離時,該產品被操作來從初始偏移量提取標志長度數的字節;基于標志類型來驗證標志;和在輸入的字節流中跳躍標志間隔。
22.如權利要求18所述的產品,其中,該產品被操作來接收請求下一個協議數據單元的報頭部分的窺視命令;等待所述被請求的數據;和響應于該窺視命令而返回所述被請求的數據。
23.如權利要求22所述的產品,其中,當返回所述被請求的數據時,該產品被操作來向預處理代理提供該協議數據單元的報頭的位置。
24.如權利要求22所述的產品,其中,當返回所述被請求的數據時,該產品被操作來向預處理代理提供該協議數據單元的報頭。
25.一種用于處理數據段的產品,其中該產品包括存儲指令的計算機可讀介質,和其中該產品被操作來接收協議數據單元的報頭部分;利用所接收的報頭部分來確定要儲存在應用空間中的數據的字節數;基于所接收的報頭部分來確定下一個協議數據單元的下一個報頭部分;和發出窺視命令以獲得該下一個報頭部分。
26.如權利要求25所述的產品,其中,該產品被操作來通知直接存儲器訪問(DMA)引擎來將所確定的數據字節數直接存儲到該應用空間中。
27.一種用于執行循環冗余校驗的產品,其中,該產品包括存儲指令的計算機可讀介質,和其中該產品被操作來接收傳輸層段;確定是否已接收到完整的協議數據單元;和響應于確定出尚未接收到完整的協議數據單元,計算新的部分循環冗余校驗摘要;和存儲該新的部分循環冗余校驗摘要和來自該計算的剩余數據。
28.如權利要求27所述的產品,其中,該新的部分循環冗余校驗摘要和剩余數據被存儲在循環冗余校驗存儲區域內和循環冗余校驗數據結構內。
29.如權利要求27所述的產品,該產品被操作來將該新的部分循環冗余校驗摘要和剩余數據轉發到段處理引擎。
30.如權利要求27所述的產品,該產品被操作來確定該部分循環冗余校驗摘要和剩余數據是否與該傳輸層段一起被接收;響應于確定出未接收到該部分循環冗余校驗摘要和剩余數據,取回該部分循環冗余校驗摘要和該剩余數據;和利用所取回的部分循環冗余校驗摘要和剩余數據計算該新的部分循環冗余校驗摘要。
31.如權利要求27所述的產品,該產品被操作來響應于確定出已接收到該完整的協議數據單元,計算該協議數據單元的完整的循環冗余校驗摘要;確定所計算出的循環冗余校驗摘要和與該協議數據單元一起接收的循環冗余校驗摘要是否匹配;響應于確定出存在匹配,將成功接收的數據通知應用程序;和響應于確定出不匹配而執行錯誤處理。
32.一種用于執行循環冗余校驗的產品,其中該產品包括存儲指令的計算機可讀介質,和其中該產品被操作來接收當前傳輸層段;確定是否已接收到最后傳輸層段的部分循環冗余校驗摘要和剩余數據;和響應于確定出已接收到該部分循環冗余校驗摘要和剩余數據,將該當前傳輸層段與該最后傳輸層段的部分循環冗余校驗摘要和剩余數據一起轉發給循環冗余校驗引擎。
33.如權利要求32所述的產品,該產品被操作來響應于確定出尚未接收到該部分循環冗余校驗摘要和剩余數據,確定該當前傳輸層段是否與該最后傳輸層段在相同流上;和響應于確定出該傳輸層段在相同流上,將該當前傳輸層段轉發給循環冗余校驗引擎,而不轉發該最后傳輸層段的部分循環冗余校驗摘要和剩余數據。
34.如權利要求33所述的產品,其中,該產品被操作來響應于確定出這些傳輸層段不在相同流上,將該當前傳輸層段與該最后傳輸層段的部分循環冗余校驗摘要和剩余數據一起轉發給循環冗余校驗引擎。
35.一種用于處理數據段的系統,包括耦合到外圍部件互聯(PCI)總線的網絡適配器;和在該網絡適配器上的電路,該電路被操作來從傳輸層段剝離報頭;執行協議數據單元檢測,以確定作為該傳輸層段的部分數據的協議段的數據;和執行標志驗證和剝離。
36.如權利要求35所述的系統,其中,在執行協議數據單元檢測時,該電路被操作來從協議數據單元的報頭的長度字段的偏移量并以該報頭的長度字段的寬度來提取值;確定該協議數據單元的最終長度;和基于該協議數據單元的起始位置和最終長度來檢測協議數據單元。
37.如權利要求36所述的系統,其中,確定該協議數據單元的最終長度是基于所提取的值以及乘法/加法順序參數、長度字段乘法器參數和長度字段加法器參數的值。
38.如權利要求35所述的系統,其中,在執行標志驗證和剝離時,該電路被操作來從初始偏移量提取標志長度數的字節;根據標志類型來驗證標志;和在輸入的字節流中跳躍標志間隔。
39.如權利要求35所述的系統,其中,該電路被操作來接收請求下一個協議數據單元的報頭部分的窺視命令;等待所述被請求的數據;和響應于該窺視命令而返回所述被請求的數據。
40.如權利要求39所述的系統,其中,當返回所述被請求的數據時,該電路被操作來向預處理代理提供該協議數據單元的報頭的位置。
41.如權利要求39所述的系統,其中,當返回所述被請求的數據時,該電路被操作來向預處理代理提供該協議數據單元的報頭。
42.一種用于處理數據段的系統,包括耦合到外圍部件互聯(PCI)總線的網絡適配器;和在該網絡適配器上的電路,該電路被操作來接收協議數據單元的報頭部分;利用所接收的報頭部分來確定要儲存在應用空間中的數據的字節數;基于所接收的報頭部分來確定下一個協議數據單元的下一個報頭部分;和發出窺視命令以獲得該下一個報頭部分。
43.如權利要求42所述的系統,其中,該電路被操作來通知直接存儲器訪問(DMA)引擎將所確定的數據字節數直接存儲到該應用空間中。
44.一種用于執行循環冗余校驗的系統,包括耦合到外圍部件互聯(PCI)總線的網絡適配器;和在該網絡適配器上的電路,該電路被操作來接收傳輸層段;確定是否已接收到完整的協議數據單元;和響應于確定出尚未接收到完整的協議數據單元,計算新的部分循環冗余校驗摘要;和存儲該新的部分循環冗余校驗摘要和來自該計算的剩余數據。
45.如權利要求44所述的系統,其中,該新的部分循環冗余校驗摘要和剩余數據被存儲在循環冗余校驗存儲區域內和循環冗余校驗數據結構內。
46.如權利要求44所述的系統,該電路被操作來將該新的部分循環冗余校驗摘要和剩余數據轉發到段處理引擎。
47.如權利要求44所述的系統,該電路被操作來確定部分循環冗余校驗摘要和剩余數據是否與該傳輸層段一起被接收;響應于確定出未接收到該部分循環冗余校驗摘要和剩余數據,取回該部分循環冗余校驗摘要和該剩余數據;和利用所取回的部分循環冗余校驗摘要和剩余數據,計算該新的部分循環冗余校驗摘要。
48.如權利要求44所述的系統,該電路被操作來響應于確定出已接收到該完整的協議數據單元,計算該協議數據單元的完整的循環冗余校驗摘要;確定所計算出的循環冗余校驗摘要和與該協議數據單元一起被接收的循環冗余校驗摘要是否匹配;響應于確定出存在匹配,將成功接收的數據通知應用程序;和響應于確定出不匹配而執行錯誤處理。
49.一種用于執行循環冗余校驗的系統,包括耦合到外圍部件互聯(PCI)總線的網絡適配器;和在該網絡適配器上的電路,該電路被操作來接收當前傳輸層段;確定是否已接收到最后傳輸層段的部分循環冗余校驗摘要和剩余數據;和響應于確定出已接收到該部分循環冗余校驗摘要和剩余數據,將該當前傳輸層段與該最后傳輸層段的部分循環冗余校驗摘要和剩余數據一起轉發給循環冗余校驗引擎。
50.如權利要求49所述的系統,其中,該電路被操作來響應于確定出尚未接收到該部分循環冗余校驗摘要和剩余數據,確定該當前傳輸層段與該最后傳輸層段是否在相同流上;和響應于確定出這些傳輸層段在相同流上,將該當前傳輸層段轉發給循環冗余校驗引擎,而不轉發該最后傳輸層段的部分循環冗余校驗摘要和剩余數據。
51.如權利要求50所述的系統,其中,該電路被操作來響應于確定出這些傳輸層段不在相同流上,將該當前傳輸層段與該最后傳輸層段的部分循環冗余校驗摘要和剩余數據一起轉發給循環冗余校驗引擎。
全文摘要
提供用于處理數據段的技術,通過從傳輸層段剝離報頭,執行協議數據檢測以確定作為傳輸層段的部分數據的協議段的數據,以及執行標志驗證和剝離,從而處理數據段。還提供用于處理數據段的技術,其中接收到協議數據單元的報頭部分。利用所接收的報頭部分來確定將儲存在應用空間中的數據的字節數。而且,利用所接收的報頭部分來確定下一個協議數據單元的下一個報頭部分。然后,發出窺視命令以獲得下一個報頭部分。另外提供用于利用所儲存的部分循環冗余校驗摘要和剩余數據來執行循環冗余校驗的技術。
文檔編號H04L29/06GK1961540SQ200580017333
公開日2007年5月9日 申請日期2005年6月10日 優先權日2004年6月28日
發明者尼古拉斯·科爾曼, 拉梅什·克里希南, 安舒曼·塔庫爾, 羅伯特·科恩, 丹尼爾·曼索 申請人:英特爾公司