專利名稱:使用散列對經由rdma寫入的消息的可靠接收的制作方法
技術領域:
本公開一般地涉及用于處理經由遠程直接存儲器訪問(RDMA)接收的消息的方法和裝置。
背景技術:
遠程直接存儲器訪問(RDMA)是網絡接口卡(OTC)的特征,其使得一臺計算機直接訪問另一臺計算機的存儲器中的信息。具體地,經由RDMA技術,計算機可從另一臺計算機的存儲器讀取信息,以及將信息寫入另一臺計算機的存儲器,而不會牽涉到計算機的操作系統或者中央處理器(CPU)中的任何一個。
圖1是示出其中可實現各個實施例的示例系統的框圖。圖2是示出在貫穿于更新存儲器的過程中的存儲器內容以及當這些內容在更新過程期間被讀取時可能導致的問題的示例的圖形。圖3A是示出根據一個實施例的所更新存儲器的示例的圖形。圖;3B是示出處理經由RDMA讀取或寫入操作獲得的消息的示例性通常方法的處理流程圖。圖4A是示出經由RDMA從存儲器讀取的示例性通常方法的處理流程圖。圖4B是示出經由RDMA從存儲器讀取的示例方法的處理流程圖。圖5A是示出經由RDMA寫入到存儲器的示例性通常方法的處理流程圖。圖5B是示出經由RDMA寫入到存儲器的示例方法的處理流程圖。圖6是其中可實現各個實施例的示例網絡設備的圖形表示。
具體實施例方式在以下的描述中,闡述了許多特定細節以便提供對所公開實施例的透徹理解。然而,對于本領域技術人員來說將明顯的是,可在沒有這些特定細節中的某些或全部的情況下實現所公開的實施例。在其它情況下,沒有詳細描述眾所周知的處理步驟,以便簡化描述。概述在一個實施例中,作為RDMA讀取操作或RDMA寫入操作的結果,第一網絡系統從第二網絡系統獲得消息和與其鄰接的消息的散列。第一網絡系統生成所獲得消息的計算出的散列,并且將所計算的消息散列與所獲得的消息散列比較。第一網絡系統根據所計算散列是否等于所獲得散列來處理所獲得消息。實施例的具體示例在以下描述中,經由RDMA讀取操作讀取或經由RDMA寫入操作寫入的存儲器內容可稱作為“消息”。該消息可包括數據和/或其它信息,例如命令(如請求)。命令可以是有條件的并且請求接收系統在出現指定條件時執行指定的動作。例如,條件可基于消息中提供的至少一部分數據。作為一個示例,第一系統可請求第二系統在處理達到特定的序號時執行指定的動作。所公開的實施例使得經由RDMA讀取操作或RDMA寫入操作接收消息的系統能夠確定消息是否為完整和有效的消息。當系統確定消息完整并且有效時,它可以繼續處理消息。 然而,如果系統確定RDMA讀取操作或RDMA寫入操作沒有成功地完成,系統將不會處理消肩、ο圖1是示出其中可實現各個實施例的示例系統的框圖。如圖1中所示,第一網絡系統(例如計算機)102經由網絡106連接到第二網絡系統(例如計算機)104。該網絡可以用多種RDMA技術實現,例如無限帶寬或因特網廣域RDMA協議(iWARP)。第一計算機102的RDMA設備108 (例如NIC)可以與第二計算機104的RDMA設備 110通信。具體地,第一計算機102的RDMA設備108可以向第二計算機104的RDMA設備 110發送請求(例如讀取或寫入請求)以便訪問第二計算機104的存儲器112。然后,第二計算機104的RDMA設備110可以通過經由系統總線114(例如外圍組件互連(PCI)總線) 訪問存儲器112來實現請求(例如讀取或寫入請求),該系統總線114可連接到芯片組116, 芯片組116進一步連接到存儲器112。以該方式,第二計算機104的RDMA設備110可代表第一計算機102執行操作。重要的是,要注意,以該方式訪問第二計算機104的存儲器112, 不牽涉第二計算機104的中央處理器(CPU) 118。類似地,第二計算機104的RDMA設備110(例如NIC)可以與第一計算機102的 RDMA設備108通信。具體地,第二計算機104的RDMA設備110可以向第一計算機102的 RDMA設備108發送請求(例如讀取或寫入請求)以便訪問第一計算機102的存儲器120。 然后,第一計算機102的RDMA設備108可以通過經由系統總線122(例如PCI總線)訪問存儲器120來實現請求(例如讀取或寫入請求),該系統總線122可連接到芯片組124,芯片組IM進一步連接到存儲器120。以該方式,第一計算機102的RDMA設備108可代表第二計算機104執行操作。重要的是,要注意,以該方式訪問第一計算機102的存儲器120,不牽涉第一計算機102的中央處理器(CPU) 126。圖2是示出在貫穿于更新存儲器的過程中的存儲器內容以及當這些內容在更新過程期間被讀取時可能導致的問題的示例的圖形。假設在該示例中,第一計算機102的 RDMA設備108向第二計算機104的RDMA設備110發出了讀取請求,以便讀取第二計算機 104的存儲器112的內容。然而,第二計算機104的CPU 118正在更新第二計算機104的存儲器112的內容。在更新過程期間,可執行一個以上的計算。因此,當執行計算時刻更新存儲器112的不同塊,并且因此可在不同的時間更新存儲器112的不同塊。例如,在第一時刻,可在202表示存儲器112的內容。如所示的,存儲塊204、206、 和208都存儲有值“0”。在第二時刻,可在210表示存儲器112的內容。如該示例中所示的,存儲塊204的內容已更新為存儲有值“1”。在第三時刻,可在218表示存儲器112的內
6容。存儲塊206的內容現在已更新為值“2”。不幸地,如果在更新過程的中間RDMA讀取請求被發出,那么可在完成那些存儲器的塊的更新之前,讀取一個或多個存儲器的塊。而且,可無序地讀取存儲器的塊。在該示例中,存儲器的塊204、206、208的讀取結果可分別為“0”、 “2”、和“0”,如2 所示,盡管已被讀取的存儲器的塊204、206、208的內容在特定的時間點從沒有存在過。類似的問題可由于經由RDMA寫入操作執行的遠程存儲器更新而出現。具體地, RDMA寫入操作是“單向的”。換言之,當第一網絡系統的第一 RDMA執行RDMA寫入操作來將消息寫入到第二網絡系統的存儲器時,當RDMA寫入操作完成時第一 RDMA不通知第二網絡系統。更具體地,第二網絡系統的第二 RDMA和在第二網絡系統上運行的軟件都不會接收 RDMA寫入操作完成的通知。不幸地,RDMA寫入操作可按任何順序將數據寫入到接收系統的存儲器。這些排序問題可能在接收系統無序地接收接收分組時,或者由于RDMA設備、系統總線等中的實現細節而出現。為了避免獲得和處理經由RDMA讀取操作或RDMA寫入操作獲得的不完整的消息, 所公開的實施例使得系統能夠確定是否已經寫入了完整的消息,以及該消息是否已準備好用于處理(而不是將會至少部分地由隨后的操作重寫的不完整消息)。盡管可以標記另外的存儲位置(例如“有效”位)以表示存儲器已被更新,該另外的存儲器位置也可能被無序地寫入。因此,有效位可在消息已變為有效之前被寫入。還可以執行另外的事務(例如輪詢存儲器位置)以便確定存儲器的更新是否已完成。然而,執行另外的事務將會減慢系統并且導致網絡使用的效率降低。在所公開的實施例中,可在RDMA讀取操作或RDMA寫入操作中涉及的兩個網絡系統上配置軟件和/或硬件,將在下面更詳細地描述。根據一個實施例,準備或生成要經由 RDMA寫入操作或本地寫入操作寫入的消息的系統可向消息應用散列函數以生成消息散列。 然后,消息散列可連同消息一起以鄰接方式存儲在存儲器中。例如,消息散列可“附加”到消息并且然后被存儲。為了描繪消息及其對應散列之間的分隔,可在消息和對應散列之間存儲指示符。作為候選,發送和接收網絡系統兩者可配置為識別消息和/或對應散列中的預定數量的位或預定組的位。盡管消息和/或對應散列可以是固定大小,所公開的實施例也可以用大小可變的消息來實現。例如,消息可包含表示消息和/或對應散列的長度的字段。然后,可通過消息的長度來計算散列。所存儲消息的一個示例將在下面參考圖3來描述。然后,因為RDMA讀取或RDMA 寫入操作而“接收”消息的系統可獲得所存儲散列,用于確定消息是否為有效完整的消息, 如將在下面參考圖4A到B以及圖5A到B進一步詳細描述。圖3A是示出根據一個實施例的所更新存儲器的示例的圖形。根據一個實施例,相關于單個“事務”(例如,將被在單次時間寫入并且可被單獨處理的每一個單位)有關的所有數據計算散列值。有關于單個事務的數據可稱作為單個消息。散列值可存儲在與消息相同的數據緩沖區中的鄰接存儲器中,這使得能夠用傳輸消息的相同的RDMA操作來讀取或寫入散列值。以該方式,可盡可能高效地使用RDMA硬件,以最小化執行的操作數量。如該示例中所示,存儲器包括包含第一消息302的第一數據緩沖區,包含第二消息304的第二數據緩沖區,包含新的第三消息306的第三數據緩沖區、以及包含基于新的第三消息306生成的散列值308的第四數據緩沖區。在該示例中,散列值308存儲為與新的第三消息306鄰接,使得第三消息306和對應的散列值308能夠經由單次讀取操作從存儲器被獲取。重要的是,要注意,每一個消息可存儲在一個或多個數據緩沖區中。可以按例如圖3A中所示的方式來更新存儲器。處理例如圖3A中所示的數據結構(其可因為RDMA讀取或RDMA寫入操作而獲得)的示例方法將在下面參考圖:3B來更詳細地描述。在以下描述中,清楚地指定由RDMA設備執行的操作。在所有其它情況下,操作被描述為經由“網絡系統”被執行。換言之,網絡系統可經由硬件和/或軟件來實現這些操作。 在一個實施例中,支持這里公開的RDMA讀取操作和RDMA寫入操作的軟件在每一個網絡系統上配置。因此,當該軟件執行時,所公開的步驟可經由CPU(而不是RDMA設備)被執行。圖;3B是示出確保經由RDMA讀取或RDMA寫入操作獲得的消息為完整消息的示例性通常方法的處理流程圖。在320,第一網絡系統可從第一網絡系統的存儲器獲得消息,其中存儲器存儲消息和消息散列為使得消息散列鄰接消息,其中因為RDMA讀取操作或RDMA 寫入操作,存儲器中存儲的消息和消息散列已經從第二網絡系統接收。在322,第一網絡系統可計算所獲得消息的散列。在324,第一網絡系統還可以從第一網絡系統的存儲器獲得消息散列。在326,第一網絡系統可以比較所計算的消息散列與所獲得的消息散列,以確定所計算的散列是否等于所獲得的散列。然后在328,第一網絡系統可根據比較結果來處理所獲得的消息。參考圖;3B描述的處理可以應用于RDMA讀取操作或RDMA寫入操作的情況。確保在處理經由RDMA讀取獲得的消息之前已經寫入了完整的消息的方法將在下面參考圖4A到 B來更詳細地描述。執行實現了如圖3A中所示的格式以確保在處理消息之前已寫入了完整的消息的RDMA寫入的方法將在下面參考圖5A到B來更詳細地描述。如上所述,當網絡系統更新其本地存儲器時,網絡系統可生成正被存儲的消息的散列并且將該消息散列與消息以鄰接方式存儲。網絡系統可在同一操作,或者在兩個單獨的操作中存儲消息散列和消息。然后,消息和對應的散列可經由RDMA讀取操作來獲取。圖4A是示出經由RDMA讀取操作從存儲器進行讀取的示例性通常方法的處理流程圖。在402,第一網絡系統的第一 RDMA可將RDMA讀取發送到第二網絡系統的第二 RDMA,其中RDMA讀取請求第二網絡系統的存儲器中的下一個消息。然后在404,第一網絡系統的第一 RDMA可從第二網絡系統的第二 RDMA接收第二網絡系統的存儲器的塊的內容,其中內容包括消息和消息散列(消息散列鄰接于消息)。然后在406,第一 RDMA可將數據緩沖區的內容存儲到第一網絡系統的存儲器。在408,第一網絡系統可從第一網絡系統的存儲器獲得消息并且計算所獲得消息的散列。在410,第一網絡系統還可從第一網絡系統的存儲器獲得消息散列。消息和消息散列可在單次讀取操作中從第一網絡系統的存儲器獲取。然后在 412,第一網絡系統可比較所計算的消息散列與所獲得的消息散列,以確定所計算散列是否等于所獲得散列。然后在414,第一網絡系統可根據比較結果來處理所獲得的消息。更具體地,如果所計算散列等于所獲得散列,第一網絡系統可斷定已經從第二網絡系統的存儲器成功讀取了完整有效的消息。然后,第一網絡系統可處理所獲得的消息。處理可包括存儲消息和/ 或另外的處理,將在下面參考圖4B來更詳細地描述。然而,如果所計算的散列不等于所獲得的散列,消息(或消息散列)仍然在第一網絡系統的存儲器中被更新。因此,第一網絡系統可斷定,還沒有從第二網絡系統的存儲器成功地取回完整有效的消息。然后,第一網絡系統可重復步驟408-414,直到它確定已取回了有效完整的消息。圖4B是示出經由RDMA技術從存儲器進行讀取的示例方法的處理流程圖。在該示例中,假設第二網絡系統已經在先前更新了它的存儲器,使得消息和消息散列以鄰接方式存儲。消息可包括在指定條件出現時執行指定動作的請求。在420,用戶應用可啟動第一網絡系統的CPU(CPUl)以請求第一網絡系統的RDMA(RDMAl)讀取第二網絡系統的存儲器 (MEM2)中的下一個消息。然后在422,RDMA1可經由網絡向第二網絡系統的RDMA(RDMA2)發送RDMA讀取,以請求MEM2中的下一個消息的內容。在424,RDMA2可讀取MEM2的至少一個數據緩沖區的內容并且將內容發送到RDMA1,使得RDMAl能夠將內容存儲到第一網絡系統的存儲器(MEMl)。在426,CPU可等待從MEM2讀取消息緩沖區并且將其復制到MEMl完成的通知。然后在428,CPUl可檢查本地存儲器MEMl的內容。如果在430,確定MEMl為空, 處理可在似6重復。當確定MEMl不為空時,在432,CPUl可從MEMl讀取消息以及從MEMl 讀取對應的散列,計算消息的散列并且將所計算散列與已從MEMl讀取的散列比較。如果在 434確定所計算散列與從存儲器讀取的散列匹配,那么可在436處理消息。然而,如果所計算散列與從存儲器讀取的散列不匹配,那么第一網絡系統可在438斷定MEM2仍在被更新, 并且處理可在似6重復。圖5A是示出經由RDMA寫入操作寫入到存儲器的示例性通常方法的處理流程圖。 在502,第二網絡系統的第二 RDMA可從第一網絡系統的第一 RDMA接收塊和RDMA寫入,其中 RDMA寫入指示第一網絡系統的第一 RDMA請求將塊寫入到第二網絡系統的存儲器。塊可包括消息和消息散列(消息散列鄰接于消息)。在504,第二網絡系統的第二 RDMA可在第二網絡系統的存儲器的至少一個數據緩沖區中存儲包括消息和消息散列的塊,使得消息散列鄰接于消息。在506,第二網絡系統可從第二存儲器獲得消息并且計算所獲得消息的散列。 在508,第二網絡系統還可從第二網絡系統的存儲器獲得消息散列。從第二網絡系統的存儲器獲得消息和從第二網絡系統的存儲器獲得消息散列(如分別在步驟506和508中所述) 可在單次讀取操作中執行。在510,第二網絡系統可比較所計算的消息散列與所獲得消息散列,以確定所計算散列是否等于所獲得的散列。然后在512,第二網絡系統可根據比較結果處理所獲得的消息。更具體地,如果所計算散列等于所獲得散列,第二網絡系統可斷定,第一網絡系統已經成功地向第二網絡系統的存儲器寫入了完整有效的消息。然后,第二網絡系統可處理所獲得消息。然而,如果所計算散列不等于所獲得散列,RDMA寫入仍然在進行中。換言之,消息(或消息的散列)仍然正在第二網絡系統的存儲器中更新。因此,第二網絡系統可斷定,還沒有向第二網絡系統的存儲器成功地寫入完整有效的消息。然后,第二網絡系統可重復506-512,直到它確定已從其存儲器取回了有效完整的消息。執行RDMA寫入和隨后的消息處理的示例將在下面參考圖5B來更詳細地描述。圖5B是示出經由RDMA技術寫入到存儲器的示例方法的處理流程圖。在該示例中,消息包括當出現指定條件時第二網絡系統執行指定動作的請求。在520,CPUl生成請求并且計算請求的散列,其中請求要求第二網絡系統在出現指定條件(條件X)時執行指定動作。在522,CPUl可臨時地存儲請求和散列,使得它們以鄰接方式作為塊存儲。在524, RDMAl可經由網絡將RDMA寫入和包括請求和散列的塊發送到RDMA2。在526,RDMA2可將塊寫入到MEM2。在528,CPU2可從MEM2獲取請求并且計算請求的散列。然后在530,CPU2可
9比較所計算散列與已存儲在MEM2中的散列,以確定所計算散列是否等于先前存儲的散列。 如果在532確定所計算散列匹配于先前存儲的散列,在534,CPU2可處理請求以在條件X出現時執行指定動作。如果所計算散列不匹配于先前存儲的散列,處理可在5 重復。其它實施例一般地,所公開的技術可以在軟件和/或硬件上實現。例如,它們可在操作系統內核中,在單獨的用戶進程中,在綁定到網絡應用的庫程序包中,在專門構造的機器上,或者在網絡接口卡上實現。在具體實施例中,所公開的技術以軟件實現,例如操作系統或者操作系統上運行的應用。所公開實施例的軟件或軟件/硬件混合實現可在存儲器中存儲的計算機程序選擇性啟動或重配置的通用可編程機器上實現。該可編程機器可以是設計為處理網絡流量的網絡設備,例如路由器或交換機。這些網絡設備可具有多個網絡接口,例如包括幀中繼和ISDN接口。這些網絡設備的具體示例包括路由器和交換機。例如,可在從San Jose, California的Cisco Systems公司可得到的特定配置的路由器或服務器中實現各個實施例。用于這些機器中某一些機器的通常體系結構將從下面給出的描述呈現。在候選實施例中,所公開技術可在通用網絡主機上實現,例如個人計算機或工作站。此外,所公開實施例可至少部分地在用于網絡設備或通用計算設備的卡(例如接口卡)上實現。現在參考圖5,適于實現所公開實施例的網絡設備1560包括主中央處理器 (CPU) 1562、接口 1568、和總線1567(例如PCI總線)。當在適當軟件或固件的控制下作用時,CPU 1562可負責實現關聯于期望網絡設備的功能的特定功能。CPU 1562可在包括操作系統(例如Windows NT)和任何適當的應用軟件的軟件的控制下完成這些功能。CPU 1562可包括一個或多個處理器1563,例如來自Motorola處理器系列或MIPS 處理器系列的處理器。在候選實施例中,處理器1563可包括專門設計的硬件,用于控制網絡設備1560的操作。在具體實施例中,存儲器1561 (例如非易失性RAM和/或ROM)也形成CPU 1562的一部分。然而,存在存儲器可連接到系統的許多不同方式。存儲器的塊1561 可用于多種目的,例如獲取和/或存儲消息或其它數據、編程指令等。接口 1568通常提供為接口卡(有時候稱作為“線卡”)。通常,它們控制經由網絡發送和接收數據分組并且有時候支持與網絡設備1560 —起使用的其它外圍設備。一個或多個接口 1568可包括RDMA設備。在可被提供的接口中,有以太網接口、幀中繼接口、電纜接口、DSL接口、令牌環接口等。另外,可提供各種非常高速的接口,例如快速以太網接口、千兆以太網接口、ATM接口、HSSI接口、POS接口、FDDI接口、ASI接口、DHEI接口等。通常,這些接口可包括適合于與適當媒體通信的端口。在某些情況下,它們也可包括獨立的處理器,并且在某些情況下包括易失性RAM。獨立處理器可控制這些通信密集型的任務,例如分組交換、媒體控制和管理。通過提供用于通信密集型任務的單獨處理器,這些接口使得主微處理器1562能夠有效地執行例行的計算、網絡診斷、安全功能等。盡管圖5中示出的系統示出了一個具體的網絡設備,但它絕不是所公開的實施例可在其上實現的唯一網絡設備的體系結構。例如,常常使用具有處理通信以及路由計算的單個處理器的體系結構。此外,其它類型的接口和媒體也可與網絡設備一起使用。不管網絡設備的結構如何,它可使用配置為存儲數據、用于通用網絡操作的程序
10指令和/或涉及這里描述的技術的功能的其它信息的一個或多個存儲器或存儲模塊(例如存儲模塊1565)。程序指令例如可控制操作系統和/或一個或多個應用的操作。因為這些信息和程序指令可用于實現這里描述的系統/方法,所公開的實施例涉及包括用于執行這里描述的各種操作的程序指令、狀態信息等的機器可讀媒體。機器可讀媒體的示例包括但不限于磁性媒體,例如硬盤、軟盤、和磁帶;光學媒體,例如CD-ROM盤;磁光媒體,例如光磁軟盤;和專門配置為存儲和執行程序指令的硬件設備,例如只讀存儲器設備(ROM)和隨機訪問存儲器(RAM)。程序指令的示例包括例如由編譯器產生的機器碼,和包含可由計算機使用解釋器執行的高級代碼的文件。盡管這里示出和描述了說明性實施例和所公開實施例的應用,仍然處于所公開實施例的原理、范圍、和精神內的許多變化和修改是可能的,并且在熟讀了本申請之后,這些變化對于本領域技術人員來說將變得清楚。而且,所公開的實施例不必使用上述的步驟來實現。因此,本實施例應當被認為是說明性而非限制性的,并且所公開的實施例不限于這里給出的細節,而是可以在所附權利要求的范圍及其等同物內被修改。
權利要求
1.一種方法,包括由第二網絡系統的第二 RDMA從第一網絡系統的第一 RDMA接收RDMA寫入和塊,所述塊包括消息和所述消息的散列,所述消息的散列鄰接于所述消息,其中所述RDMA寫入指示所述第一網絡系統的第一 RDMA請求將所述塊寫入到所述第二網絡系統的存儲器;由所述第二網絡系統的第二 RDMA在所述第二網絡系統的存儲器的至少一個數據緩沖區中存儲包括所述消息和所述消息的散列的所述塊,使得所述消息的所述散列鄰接于所述消息;由所述第二網絡系統從所述第二網絡系統的存儲器獲得所述消息并且由所述第二網絡系統計算所獲得消息的散列;從所述第二網絡系統的存儲器獲得所述消息的散列;由所述第二網絡系統確定所計算的所述消息的散列是否等于所獲得的所述消息的散列;以及根據所述確定結果來處理所獲得的消息。
2.根據權利要求1所述的方法,其中當所計算的散列等于所獲得的散列時處理所獲得的消息。
3.根據權利要求2所述的方法,其中所述消息包括所述第二網絡系統在出現指定條件時執行指定動作的請求,所述方法還包括當出現所述指定條件時執行所述指定動作。
4.根據權利要求3所述的方法,其中所述消息還包括數據,并且其中所述指定的條件基于所包括的數據。
5.根據權利要求1所述的方法,其中當所計算散列不等于所獲得散列時,重復獲得消息、計算散列、獲得散列、以及確定的步驟。
6.根據權利要求1所述的方法,還包括由所述第一網絡系統生成所述消息;和由所述第一網絡系統計算所述消息的散列。
7.根據權利要求1所述的方法,其中從所述第二網絡系統的存儲器獲得所述消息和從所述第二網絡系統的存儲器獲得所述消息的散列在單次讀取操作中被執行。
8.一種方法,包括由第一網絡系統的第一 RDMA將RDMA讀取發送到第二網絡系統的第二 RDMA,所述RDMA 讀取請求所述第二網絡系統的存儲器中的下一個消息;由所述第一網絡系統的第一 RDMA從所述第二網絡系統的第二 RDMA接收所述第二網絡系統的存儲器的至少一個數據緩沖區的內容,所述內容包括消息和所述消息的散列,所述消息的散列鄰接于所述消息;由所述第一 RDMA將所述數據緩沖區的內容存儲到所述第一網絡系統的存儲器;從所述第一網絡系統的存儲器獲得所述消息并且由所述第一網絡系統計算所獲得消息的散列;從所述第一網絡系統的存儲器獲得所述消息的散列;由所述第一網絡系統確定所計算的所述消息的散列是否等于所獲得的所述消息的散列;以及根據所述確定結果來處理所獲得的消息。
9.根據權利要求8所述的方法,其中當所計算的散列等于所獲得的散列時處理所獲得的消息。
10.根據權利要求9所述的方法,其中所述消息包括在出現指定條件時執行指定動作的請求,所述方法還包括當出現所述指定條件時執行所述指定動作。
11.根據權利要求10所述的方法,其中所述消息還包括數據,并且其中所述指定的條件基于所述數據。
12.根據權利要求8所述的方法,其中當所計算散列不等于所獲得散列時,重復獲得消息、計算消息的散列、獲得消息的散列、以及確定的步驟。
13.根據權利要求8所述的方法,還包括由所述第二網絡系統的第二 RDMA從所述第一網絡系統的第一 RDMA接收所述RDMA讀取;由所述第二網絡系統的第二 RDMA讀取所述第二網絡系統的存儲器的至少一個數據緩沖區;和由所述第二網絡系統的第二 RDMA向所述第一網絡系統的所述第一 RDMA發送所述數據緩沖區的內容。
14.根據權利要求8所述的方法,還包括其中從所述第一網絡系統的存儲器獲得所述消息和從所述第一網絡系統的存儲器獲得所述消息的散列在單次讀取操作中被執行。
15.一種裝置,包括RDMA設備;和處理器和存儲器,所述處理器或所述存儲器中的至少一個適用于從所述存儲器獲得消息,其中所述存儲器存儲所述消息和所述消息的散列,使得所述消息的散列鄰接于所述消息,其中所述存儲器中存儲的所述消息和所述消息的散列是由于 RDMA讀取操作或RDMA寫入操作而被從另一個網絡系統接收的;計算所獲得消息的散列;從所述存儲器獲得所述消息的散列;確定所計算的所述消息的散列是否等于所獲得的所述消息的散列;以及根據所述確定的結果來處理所獲得的消息。
16.根據權利要求15所述的裝置,其中當所計算的散列等于所獲得的散列時處理所獲得的消息。
17.根據權利要求15所述的裝置,其中當所計算散列不等于所獲得散列時,重復獲得消息、計算消息的散列、獲得消息的散列、以及確定的步驟。
18.根據權利要求15所述的裝置,其中所述消息和所述消息的散列經由單次讀取操作從存儲器獲得。
19.根據權利要求15所述的裝置,其中所述消息包括當出現指定條件時執行指定動作的請求。
20.一種計算機可讀介質,其上存儲有計算機可讀指令,所述指令包括用于由第一網絡系統從所述第一網絡系統的存儲器獲得消息的指令,其中所述存儲器存儲所述消息和所述消息的散列,使得所述消息的散列鄰接于所述消息,其中所述存儲器中存儲的所述消息和所述消息的散列是由于RDMA讀取操作或RDMA寫入操作而被從第二網絡系統接收的;用于由所述第一網絡系統計算所獲得消息的散列的指令; 用于從所述第一網絡系統的存儲器獲得所述消息的散列的指令; 用于由所述第一網絡系統確定所計算的所述消息的散列是否等于所獲得的所述消息的散列的指令;以及用于根據所述確定結果來處理所獲得的消息的指令。
全文摘要
本發明涉及使用散列對經由RDMA寫入的消息的可靠接收。在一個實施例中,因為RDMA讀取操作或RDMA寫入操作,第一網絡系統從第二網絡系統獲得消息和與之鄰接的消息散列。第一網絡系統生成所獲得消息的計算出的散列并且將所計算的消息散列與所獲得的消息散列比較。第一網絡系統根據所計算散列是否等于所獲得散列來處理所獲得消息。
文檔編號H04L12/56GK102165739SQ200980138179
公開日2011年8月24日 申請日期2009年9月24日 優先權日2008年9月29日
發明者羅納德·卓伊爾 申請人:思科技術公司