專利名稱:啟用遠(yuǎn)程直接存儲器存取的網(wǎng)絡(luò)接口控制器切換和切回支持的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及主計(jì)算機(jī)和輸入/輸出(I/O)設(shè)備之間的通信協(xié)議。更具體地說,本發(fā)明提供一種方法,借助該方法,啟用了遠(yuǎn)程直接存儲器存取(RDMA)的網(wǎng)絡(luò)接口控制器(NIC)能夠支持由啟用了RDAM(RDAM-enabled)的主NIC(RNIC)和啟用了RDMA的備用NIC(RNIC)組成的冗余結(jié)構(gòu)。
背景技術(shù):
在因特網(wǎng)協(xié)議(IP)網(wǎng)絡(luò)中,軟件提供可被用于與輸入/輸出設(shè)備,通用計(jì)算機(jī)(主機(jī))和專用計(jì)算機(jī)通信的消息傳送機(jī)構(gòu)。該消息傳送機(jī)構(gòu)由傳送協(xié)議,高級協(xié)議和應(yīng)用編程接口組成。目前在IP網(wǎng)絡(luò)上使用的關(guān)鍵標(biāo)準(zhǔn)傳送協(xié)議是傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。TCP提供可靠的服務(wù),UDP提供不可靠的服務(wù)。未來,流控制傳輸協(xié)議(SCTP)也將被用于提供可靠服務(wù)。在設(shè)備或計(jì)算機(jī)上執(zhí)行的進(jìn)程通過高級協(xié)議,例如套接字、iSCSI和直接存取文件系統(tǒng)(DAFS)訪問IP網(wǎng)絡(luò)。不幸的是,TCP/IP軟件占用相當(dāng)數(shù)量的處理器和存儲器資源。在文獻(xiàn)(參見J.Kay,J.Pasquale,“Profiling andreducing processing overheads in TCP/IP”,IEEE/ACM Transactionson Networking,Vol 4,No.6,pp.817-828,1996年12月;和D.D.Clark,V.Jacobson,J.Romkey,H.Salwen,“An analysis of TCP processingoverhead”,IEEE Communications Magazine,volume27,Issue6,1999年6月,pp23-29)中已廣泛論及該問題。未來,由于幾個(gè)原因,網(wǎng)絡(luò)堆棧將繼續(xù)占用過多的資源,包括應(yīng)用對連網(wǎng)的越來越多的使用;網(wǎng)絡(luò)安全協(xié)議的使用;和底層架構(gòu)帶寬以高于微處理器和存儲器帶寬的速度不斷增大。為了解決該問題,該行業(yè)正在把網(wǎng)絡(luò)堆棧處理卸載(offload)給啟用了RDMA的NIC(RNIC)。
本行業(yè)中正在采取的卸載方法有兩種。第一種方法使用現(xiàn)有的TCP/IP網(wǎng)絡(luò)堆棧,而不增加任何另外的協(xié)議。這種方法能夠把TCP/IP推給硬件,但是不幸的是不能消除對接收方副本的需要。如同在上面的論文中所述,副本是對CPU利用率的最大組成因素之一。為了消除對副本的需要,本行業(yè)正在尋求第二種方法,所述第二種方法由在TCP和SCTP協(xié)議上增加成幀、直接數(shù)據(jù)布置(DDP)和遠(yuǎn)程直接存儲器存取(RDMA)組成。支持這兩種方法所需的啟用了RDMA的NIC(RNIC)類似,關(guān)鍵區(qū)別在于在第二種方法中,硬件必須支持另外的協(xié)議。
RNIC提供可由套接字、iSCSI和DAFS用于在節(jié)點(diǎn)之間通信的消息傳送機(jī)構(gòu)。在主計(jì)算機(jī)或設(shè)備上執(zhí)行的進(jìn)程通過在RNIC上公布發(fā)送/接收工作隊(duì)列的發(fā)送/接收消息,訪問IP網(wǎng)絡(luò)。這些進(jìn)程也被稱為“消費(fèi)者”。
發(fā)送/接收工作隊(duì)列(WQ)作為隊(duì)列對(QP)被分配給消費(fèi)者??赏ㄟ^幾種不同的傳送類型傳統(tǒng)的TCP、RDAM TCP、UDP或SCTP發(fā)送消息。通過RNIC發(fā)送和接收工作完成(WC)隊(duì)列,消費(fèi)者從完成隊(duì)列(CQ)取回這些消息的結(jié)果。源RNIC負(fù)責(zé)把出站消息分段,并把它們發(fā)送給目的地。目的地RNIC負(fù)責(zé)重新裝配入站消息,并把它們放入由目的地的消費(fèi)者指定的存儲空間中。這些消費(fèi)者使用RNIC動詞(verb)來訪問RNIC支持的功能。解釋動詞并直接訪問RNIC的軟件被稱為RNIC接口(RI)。
目前,主CPU中的軟件執(zhí)行多數(shù)傳送(例如TCP)和網(wǎng)絡(luò)層(例如IP)處理。目前,NIC一般執(zhí)行鏈路層(例如以太網(wǎng))處理,并且可能執(zhí)行適量的傳送或網(wǎng)絡(luò)層卸載(例如檢查和卸載)。目前,主機(jī)軟件把與TCP/IP連接相關(guān)的所有狀態(tài)信息保存在主機(jī)本地存儲器中。把所有狀態(tài)信息保持在主機(jī)本地存儲器中允許主機(jī)軟件支持主NIC和備用NIC之間的切換和切回。即,如果主NIC發(fā)生故障,那么主機(jī)軟件把所有連接轉(zhuǎn)移到備用NIC,并繼續(xù)通信處理。
啟用了RDMA的NIC提供高性能接口,用于與其它通用計(jì)算機(jī)和I/O設(shè)備通信。RNIC把傳送(例如TCP)和網(wǎng)絡(luò)(例如IP)層轉(zhuǎn)移到RNIC。通過把這些層轉(zhuǎn)移到RNIC,主機(jī)軟件不再能夠利用目前的機(jī)構(gòu)支持切換和切回。于是,需要一種簡單的機(jī)構(gòu)來允許RNIC支持可靠的傳送(例如TCP)連接的切換和切回,并且由于計(jì)劃或非計(jì)劃的RNIC停機(jī)的結(jié)果,允許通信繼續(xù)進(jìn)行。
發(fā)明內(nèi)容
因此,在第一方面,本發(fā)明提供一種在數(shù)據(jù)處理系統(tǒng)中的啟用了遠(yuǎn)程直接存儲器存取的主網(wǎng)絡(luò)接口控制器(RNIC)和備用RNIC之間執(zhí)行切換(switchover)的方法,包括產(chǎn)生用于主RNIC和備用RNIC的公共隊(duì)列對,以致主RNIC和備用RNIC共享所述公共隊(duì)列對;檢測切換事件;響應(yīng)切換事件的檢測,把隊(duì)列對的處理從主RNIC切換到備用RNIC。
最好,產(chǎn)生公共隊(duì)列對包括向主RNIC和備用RNIC分配隊(duì)列范圍,以致主RNIC和備用RNIC共享該隊(duì)列范圍內(nèi)的隊(duì)列。
最好,所述隊(duì)列范圍包括一系列隊(duì)列對和一系列完成隊(duì)列。
最好,產(chǎn)生公共隊(duì)列對包括把一系列存儲器轉(zhuǎn)換保護(hù)表?xiàng)l目分配給主RNIC和備用RNIC。
所述方法最好包括產(chǎn)生用于主RNIC和備用RNIC的公共完成隊(duì)列,以致主RNIC和備用RNIC共享所述公共完成隊(duì)列;如果檢測到切換事件,那么把公共完成隊(duì)列的操作切換到備用RNIC。
最好,主RNIC和備用RNIC通過架構(gòu)(fabric)和共享的系統(tǒng)存儲器之一,相互發(fā)送檢查點(diǎn)消息。
最好,所述架構(gòu)是局域網(wǎng)、廣域網(wǎng)、存儲映射I/O擴(kuò)展網(wǎng)絡(luò)和系統(tǒng)區(qū)域網(wǎng)之一。
最好,檢查點(diǎn)消息包括操作碼字段、長度字段和驗(yàn)證(validation)字段。
最好,操作碼把檢查點(diǎn)消息的類型識別成活動消息,更新工作發(fā)送隊(duì)列切換發(fā)送語境(context),更新提交(committed)發(fā)送隊(duì)列切換發(fā)送語境,更新工作發(fā)送隊(duì)列切換確認(rèn)語境,更新提交發(fā)送隊(duì)列切換確認(rèn)語境,更新工作接收隊(duì)列切換接收語境,更新提交接收隊(duì)列切換接收語境,更新工作接收隊(duì)列切換確認(rèn)語境,更新提交接收隊(duì)列切換確認(rèn)語境,更新工作完成隊(duì)列切換語境,和更新提交完成隊(duì)列切換語境之一。
最好,切換事件是在備用RNIC中在預(yù)定時(shí)間內(nèi)沒有收到來自主RNIC的檢查點(diǎn)消息。
最好,把隊(duì)列對的處理從主RNIC切換到備用RNIC包括把主RNIC的地址添加到備用RNIC的地址表中;使主RNIC對與主RNIC和備用RNIC耦接的交換機(jī)是不可訪問的;在交換機(jī)中,使主RNIC的地址可被識別成備用RNIC的地址。
最好,把隊(duì)列對的處理從主RNIC切換到備用RNIC包括修改用于完成隊(duì)列語境的主RNIC和備用RNIC標(biāo)識語境信息,以致備用RNIC被識別成主RNIC;修改隊(duì)列對語境的主RNIC和備用RNIC標(biāo)識語境信息,以致備用RNIC被識別成主RNIC。
該方法最好還包括保持主RNIC和備用RNIC內(nèi)的狀態(tài)信息,所述狀態(tài)信息識別隊(duì)列的切換狀態(tài)。
最好,保持狀態(tài)信息包括保持主RNIC和備用RNIC標(biāo)識語境數(shù)據(jù)結(jié)構(gòu),所述主RNIC和備用RNIC標(biāo)識語境數(shù)據(jù)結(jié)構(gòu)包括RNIC切換狀態(tài),主RNIC標(biāo)識符,主RNIC端口標(biāo)識符,備用RNIC標(biāo)識符和備用RNIC端口標(biāo)識符中的至少之一。
最好,保持狀態(tài)信息包括保持具有用于主RNIC和備用RNIC的每個(gè)公共完成隊(duì)列的條目的完成隊(duì)列語境表。
本發(fā)明最好提供一種在具有主RNIC和備用RNIC的數(shù)據(jù)處理系統(tǒng)中發(fā)送數(shù)據(jù)段(data segment)的方法,包括接收數(shù)據(jù)段;更新主RNIC中的工作發(fā)送隊(duì)列切換語境信息;把更新工作發(fā)送隊(duì)列切換語境檢查點(diǎn)消息發(fā)送給備用RNIC;從備用RNIC接收更新提交發(fā)送隊(duì)列切換語境檢查點(diǎn)消息;用更新提交發(fā)送隊(duì)列切換語境檢查點(diǎn)消息的內(nèi)容更新提交發(fā)送隊(duì)列切換語境的本地副本;和從發(fā)送隊(duì)列發(fā)送數(shù)據(jù)段。
最好,備用RNIC用更新工作發(fā)送隊(duì)列切換語境檢查點(diǎn)消息的內(nèi)容更新本地的工作發(fā)送隊(duì)列切換語境;并把工作發(fā)送隊(duì)列切換語境復(fù)制到提交發(fā)送隊(duì)列切換語境。
在第二方面,本發(fā)明提供一種計(jì)算機(jī)程序,它包括當(dāng)被裝入計(jì)算機(jī)系統(tǒng)并在計(jì)算機(jī)系統(tǒng)上執(zhí)行時(shí),使所述計(jì)算機(jī)執(zhí)行根據(jù)第一方面的方法的步驟的計(jì)算機(jī)程序代碼部件。第二方面的優(yōu)選特征包括執(zhí)行與第一方面的優(yōu)選特征的方法步驟對應(yīng)的步驟的程序代碼部件。
在第三方面,本發(fā)明提供一種在具有主RNIC和備用RNIC的數(shù)據(jù)處理系統(tǒng)中發(fā)送數(shù)據(jù)段的設(shè)備,包括接收數(shù)據(jù)段的裝置;更新主RNIC中的工作發(fā)送隊(duì)列切換語境信息的裝置;把更新工作發(fā)送隊(duì)列切換語境檢查點(diǎn)消息發(fā)送給備用RNIC的裝置;從備用RNIC接收更新提交發(fā)送隊(duì)列切換語境檢查點(diǎn)消息的裝置;用更新提交發(fā)送隊(duì)列切換語境檢查點(diǎn)消息的內(nèi)容更新提交發(fā)送隊(duì)列切換語境的本地副本的裝置;和從發(fā)送隊(duì)列發(fā)送數(shù)據(jù)段的裝置。
從而,本發(fā)明的優(yōu)選實(shí)施例提供一種支持RNIC切換和切回(switchback)的方法、計(jì)算機(jī)程序產(chǎn)品和分布式數(shù)據(jù)處理系統(tǒng);分布式數(shù)據(jù)處理系統(tǒng)包括端節(jié)點(diǎn)、交換機(jī)、路由器和互連這些組件的鏈路;端節(jié)點(diǎn)使用發(fā)送和接收隊(duì)列對來傳送和接收消息。端節(jié)點(diǎn)最好把消息分成多段,并通過鏈路傳送所述各段。交換機(jī)和路由器可互連端節(jié)點(diǎn),并把所述各段發(fā)送給恰當(dāng)?shù)亩斯?jié)點(diǎn)。在目的地處,端節(jié)點(diǎn)可把所述各段重新裝配(reassemble)成消息。
本發(fā)明的優(yōu)選實(shí)施例提供一種支持RNIC(啟用了RDMA的NIC)切換和切回的機(jī)構(gòu);當(dāng)在主RNIC上發(fā)生計(jì)劃或非計(jì)劃的停機(jī)時(shí),通過利用所提供的優(yōu)選機(jī)構(gòu),所有未完成的(outstanding)連接被切換到備用RNIC,備用RNIC繼續(xù)通信處理。另外,利用在本發(fā)明的優(yōu)選實(shí)施例中提供的機(jī)構(gòu),連接也可被切換回來。
下面參考附圖,舉例說明本發(fā)明的優(yōu)選實(shí)施例,其中圖1圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng);圖2是根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的主處理器節(jié)點(diǎn)的功能方框圖;圖3A圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的IP組卸載引擎;圖3B圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的交換機(jī);圖3C圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的路由器;圖4圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的工作請求的處理;圖5圖解說明根據(jù)本發(fā)明的其中使用TCP或SCTP傳送的優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng)的一部分;圖6圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的數(shù)據(jù)幀;圖7圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng)的一部分,以舉例說明例證的請求和確認(rèn)事務(wù);圖8圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,在分布式連網(wǎng)系統(tǒng)中使用的網(wǎng)絡(luò)尋址;圖9圖解說明本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,包含子網(wǎng)的分布式計(jì)算機(jī)系統(tǒng)的一部分;圖10圖解說明在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中使用的分層通信體系結(jié)構(gòu);圖11是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的對于主機(jī)軟件的RNIC接口的示意圖;圖12是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,由兩個(gè)RNIC保持的與切換和切回相關(guān)的例證連接狀態(tài)的示意圖;圖13A是概述根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,跨越兩個(gè)RNIC的連接的例證初始化進(jìn)程的流程圖;圖13B是概述根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,跨越兩個(gè)RNIC的連接的例證重新同步進(jìn)程的流程圖;圖13C是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,在主RNIC和備用RNIC之間使用的檢查點(diǎn)消息的例證示意圖;圖14是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的發(fā)送檢查點(diǎn)消息流程和進(jìn)程的例證示意圖;圖15是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的接收檢查點(diǎn)消息流程和進(jìn)程的例證示意圖;圖16是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的完成檢查點(diǎn)消息流程和進(jìn)程的例證示意圖;圖17是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的主RNIC到備用RNIC切換消息流程和進(jìn)程的例證示意圖;圖18是圖解說明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的備用QP激活消息流程和進(jìn)程的例證示意圖。
具體實(shí)施例方式
本發(fā)明的優(yōu)選實(shí)施例提供一種具有端節(jié)點(diǎn)、交換機(jī)、路由器和互連這些組件的鏈路的分布式計(jì)算系統(tǒng)。端節(jié)點(diǎn)可以是因特網(wǎng)協(xié)議組卸載引擎或基于傳統(tǒng)的主機(jī)軟件的因特網(wǎng)協(xié)議組。每個(gè)端節(jié)點(diǎn)使用發(fā)送和接收隊(duì)列對來傳送和接收消息。端節(jié)點(diǎn)把消息分割成幀,并通過鏈路傳送幀。交換機(jī)和路由器互連端節(jié)點(diǎn),并把幀發(fā)送給恰當(dāng)?shù)亩斯?jié)點(diǎn)。位于目的地的端節(jié)點(diǎn)把幀重新裝配成消息。
現(xiàn)在參考附圖,尤其參考圖1,圖1根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明了分布式計(jì)算機(jī)系統(tǒng)。圖1中表示的分布式計(jì)算機(jī)系統(tǒng)采取因特網(wǎng)協(xié)議網(wǎng)絡(luò)(IP網(wǎng)),例如IP網(wǎng)100的形成,并且只是用于舉例說明,下面描述的本發(fā)明的實(shí)施例可在眾多其它類型和結(jié)構(gòu)的計(jì)算機(jī)系統(tǒng)上實(shí)現(xiàn)。例如,實(shí)現(xiàn)本發(fā)明的優(yōu)選實(shí)施例的計(jì)算機(jī)系統(tǒng)可從具有一個(gè)處理器和幾個(gè)輸入/輸出(I/O)適配器的小型服務(wù)器到具有數(shù)百或數(shù)千個(gè)處理器,以及成千上萬個(gè)I/O適配器的大型并行超級系統(tǒng)。此外,可在由因特網(wǎng)或企業(yè)內(nèi)部網(wǎng)連接的遠(yuǎn)程計(jì)算機(jī)系統(tǒng)的基礎(chǔ)結(jié)構(gòu)中實(shí)現(xiàn)本發(fā)明的優(yōu)選實(shí)施例。
IP網(wǎng)100是互連分布式計(jì)算機(jī)系統(tǒng)內(nèi)的節(jié)點(diǎn)的高帶寬、低等待時(shí)間網(wǎng)絡(luò)。節(jié)點(diǎn)是連接到網(wǎng)絡(luò)的一個(gè)或多個(gè)鏈路上,并且形成網(wǎng)絡(luò)內(nèi)的消息的出發(fā)點(diǎn)和/或目的地的任意組件。在描述的例子中,IP網(wǎng)100包括呈主處理器節(jié)點(diǎn)102,主處理器節(jié)點(diǎn)104和獨(dú)立磁盤冗余陣列(RAID)子系統(tǒng)節(jié)點(diǎn)106的形式的節(jié)點(diǎn)。圖1中圖解說明的節(jié)點(diǎn)只是用于舉例說明的目的,因?yàn)镮P網(wǎng)100能夠連接任意數(shù)目和任意類型的獨(dú)立處理器節(jié)點(diǎn),存儲器節(jié)點(diǎn)和專用處理節(jié)點(diǎn)。任意節(jié)點(diǎn)都能夠起端節(jié)點(diǎn)的作用,這里端節(jié)點(diǎn)被定義為IP網(wǎng)100中產(chǎn)生或最終使用消息或幀的設(shè)備。
在本發(fā)明的一個(gè)實(shí)施例中,存在分布式計(jì)算機(jī)系統(tǒng)中的一個(gè)出錯(cuò)處理機(jī)構(gòu),其中出錯(cuò)處理機(jī)構(gòu)允許分布式計(jì)算系統(tǒng),例如IP網(wǎng)100中端節(jié)點(diǎn)之間的TCP或SCTP通信。
這里使用的消息是數(shù)據(jù)交換的應(yīng)用定義單位,它是合作進(jìn)程之間的通信的基本單元。幀是由因特網(wǎng)協(xié)議組報(bào)頭和/或報(bào)尾封裝的數(shù)據(jù)的一個(gè)單位。報(bào)頭一般提供引導(dǎo)幀通過IP網(wǎng)100的控制和路由信息。報(bào)尾一般包含確保不會傳送內(nèi)容受到破壞的幀的控制和循環(huán)冗余校驗(yàn)(CRC)數(shù)據(jù)。
在分布式計(jì)算機(jī)系統(tǒng)內(nèi),IP網(wǎng)100包含支持各種形式的通信,例如存儲,進(jìn)程間通信(IPC),文件存取和套接字的通信和管理基礎(chǔ)結(jié)構(gòu)。圖1中所示的IP網(wǎng)100包括交換通信架構(gòu)116,它允許許多設(shè)備在安全、遠(yuǎn)程管理的環(huán)境中,在高帶寬、低等待時(shí)間的情況下同時(shí)傳送數(shù)據(jù)。端節(jié)點(diǎn)能夠通過多個(gè)端口通信,并且能夠利用通過IP網(wǎng)架構(gòu)的多個(gè)路徑。圖1中所示的多個(gè)端口和通過IP網(wǎng)的多個(gè)路徑可被用于容錯(cuò)和增加帶寬數(shù)據(jù)傳送。通過控制臺110能夠訪問交換通信架構(gòu)116中的組件,以便進(jìn)行管理和維護(hù)。
圖1中的IP網(wǎng)100包括交換機(jī)112、交換機(jī)114和路由器117。交換機(jī)是一種把多個(gè)鏈路連接在一起,并通過利用2層目的地地址字段,允許幀的從一個(gè)鏈路到另一鏈路的路由的設(shè)備。當(dāng)以太網(wǎng)被用作鏈路時(shí),目的地字段被稱為媒體訪問控制(MAC)地址。路由器是一種根據(jù)3層目的地地址字段發(fā)送幀的設(shè)備。當(dāng)因特網(wǎng)協(xié)議(IP)被用作3層協(xié)議時(shí),目的地地址字段是IP地址。
在一個(gè)實(shí)施例中,鏈路是任意兩個(gè)網(wǎng)絡(luò)架構(gòu)部件,例如端節(jié)點(diǎn)、交換機(jī)或路由器之間的全雙工通道。例證的恰當(dāng)鏈路包括(但不限于)銅纜,光纜,和底板及印刷電路板上的印刷電路銅跡線。
對于可靠的服務(wù)類型(TCP和SCTP),諸如主處理器端節(jié)點(diǎn)和I/O適配器端節(jié)點(diǎn)之類的端節(jié)點(diǎn)產(chǎn)生請求幀并返回確認(rèn)幀。交換機(jī)和路由器把幀從來源傳遞到目的地。
在如圖1中所示的IP網(wǎng)100中,主處理器節(jié)點(diǎn)102、主處理器節(jié)點(diǎn)104和RAID子系統(tǒng)節(jié)點(diǎn)106包括與IP網(wǎng)100連接的至少一個(gè)IPSOE。在一個(gè)實(shí)施例中,每個(gè)IPSOE是對在IP網(wǎng)100上傳送的源或sync幀足夠詳細(xì)地實(shí)現(xiàn)IPSOI的端節(jié)點(diǎn)。主處理器節(jié)點(diǎn)102包含呈主IPSOE 118和IPSOE 120的形式的IPSOE。主處理器節(jié)點(diǎn)104包含IPSOE 122和IPSOE 124。主處理器節(jié)點(diǎn)102還包括通過總線系統(tǒng)134互連的中央處理器126-130和存儲器132。主處理器節(jié)點(diǎn)104類似地包括由總線系統(tǒng)144互連的中央處理器136-140和存儲器142。
IPSOE 118提供與交換機(jī)112的連接,而IPSOE 124提供與交換機(jī)114的連接,IPSOE 120和122提供與交換機(jī)112和114的連接。
在一個(gè)實(shí)施例中,用硬件或硬件和卸載微處理器的組合實(shí)現(xiàn)IP組卸載引擎。在這種實(shí)現(xiàn)中,IP組處理被轉(zhuǎn)移給IPSOE。這種實(shí)現(xiàn)還允許通過交換網(wǎng)絡(luò)的多個(gè)同時(shí)發(fā)生的通信,而不需要與傳遞協(xié)議相關(guān)的傳統(tǒng)開銷。在一個(gè)實(shí)施例中,圖1中的IPSOE和IP網(wǎng)100向分布式計(jì)算機(jī)系統(tǒng)的消費(fèi)者提供零處理器復(fù)制數(shù)據(jù)傳送,而不涉及操作系統(tǒng)內(nèi)核進(jìn)程,并采用硬件來提供可靠的容錯(cuò)通信。
如圖1中所示,路由器17與連接其它主機(jī)或其它路由器的廣域網(wǎng)(WAN)和/或局域網(wǎng)(LAN)耦接。
在該例子中,圖1中的RAID子系統(tǒng)106包括處理器168、存儲器170、IP組卸載引擎(IPSOE)172和多個(gè)冗余和/或多個(gè)條形存儲磁盤單元174。
IP網(wǎng)100處理關(guān)于存儲、處理器間通信、文件存取和套接字的數(shù)據(jù)通信。IP網(wǎng)100支持高帶寬、可縮放并且等待時(shí)間極低的通信。用戶客戶機(jī)能夠繞過操作系統(tǒng)內(nèi)核進(jìn)程,直接訪問允許高效的消息傳送協(xié)議的網(wǎng)絡(luò)通信組件,例如IPSOE。IP網(wǎng)100適合于當(dāng)前的計(jì)算模型,并且是用于新形式的存儲,群集和常規(guī)連網(wǎng)通信的積木式部件。此外,圖1中的IP網(wǎng)100允許存儲器節(jié)點(diǎn)在它們之間通信,或者與分布式計(jì)算機(jī)系統(tǒng)中的任意或者全部處理器節(jié)點(diǎn)通信。就連接在IP網(wǎng)100上的存儲器來說,存儲器節(jié)點(diǎn)具有和IP網(wǎng)100中的任意主處理器節(jié)點(diǎn)相同的通信能力。
在一個(gè)實(shí)施例中,圖1中所示的IP網(wǎng)100支持通道語義(semantics)和存儲器語義。通道語義有時(shí)被稱為發(fā)送/接收或推送通信操作。通信語義是在其中源設(shè)備推送數(shù)據(jù),目的地設(shè)備確定數(shù)據(jù)的最終目的地的傳統(tǒng)I/O通道中采用的那種通信。在通道語義中,從源進(jìn)程傳送的幀指定目的地進(jìn)程的通信端口,但是不指定該幀將被寫入目的地進(jìn)程的存儲空間中的何處。從而在通道語義中,目的地進(jìn)程預(yù)先分配放置傳送的數(shù)據(jù)的地方。
在存儲器語義中,源進(jìn)程直接讀取或?qū)懭脒h(yuǎn)程節(jié)點(diǎn)目的地進(jìn)程的虛擬地址空間。遠(yuǎn)程目的地進(jìn)程只需要傳遞用于數(shù)據(jù)的緩沖器的位置,并不需要卷入任何數(shù)據(jù)的傳送中。從而,在存儲器語義中,源進(jìn)程發(fā)送包含目的地進(jìn)程的目的地緩沖存儲器地址的數(shù)據(jù)幀。在存儲器語義中,目的地進(jìn)程預(yù)先準(zhǔn)許源進(jìn)程訪問其存儲器。
存儲、群集和常規(guī)連網(wǎng)通信一般都需要通道語義和存儲器語義。典型的存儲操作采用通道語義和存儲器語義的組合。在圖1中所示的分布式計(jì)算機(jī)系統(tǒng)的例證存儲操作中,主處理器節(jié)點(diǎn),例如主處理器節(jié)點(diǎn)102通過使用通道語義把磁盤寫命令發(fā)送給RAID子系統(tǒng)IPSOE172,啟動存儲操作。RAID子系統(tǒng)檢查該命令,并使用存儲器語義直接從主處理器節(jié)點(diǎn)的存儲空間讀取數(shù)據(jù)緩沖區(qū)。在讀取數(shù)據(jù)緩沖區(qū)之后,RAID子系統(tǒng)采用通道語義把I/O完成消息回送給主處理器節(jié)點(diǎn)。
在一個(gè)例證實(shí)施例中,圖1中所示的分布式計(jì)算機(jī)系統(tǒng)執(zhí)行操作,所述操作采用虛擬地址和虛擬存儲器保護(hù)機(jī)構(gòu)來確保對所有存儲器的正確并且恰當(dāng)?shù)脑L問。不要求在這樣的分布式計(jì)算機(jī)系統(tǒng)中運(yùn)行的應(yīng)用程序?qū)θ魏尾僮魇褂梦锢韺ぶ贰?br>
現(xiàn)在參見圖2,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例描述了主處理器節(jié)點(diǎn)的功能方框圖。主處理器節(jié)點(diǎn)200是主處理器節(jié)點(diǎn),例如圖1中的主處理器節(jié)點(diǎn)102的一個(gè)例子。
在本例中,圖2中所示的主處理器節(jié)點(diǎn)200包括一組消費(fèi)者202-208,它們是在主處理器節(jié)點(diǎn)200上執(zhí)行的進(jìn)程。主處理器節(jié)點(diǎn)200還包括IP組卸載引擎(IPSOE)201和IPSOE 212。IPSOE 210包含端口214和216,而IPSOE 212包含端口218和220。每個(gè)端口與一個(gè)鏈路連接。端口能夠與一個(gè)IP網(wǎng)子網(wǎng)或者多個(gè)IP網(wǎng)子網(wǎng),例如圖1中的IP網(wǎng)100連接。
消費(fèi)者202-208通過動詞(verbs)接口222和消息與數(shù)據(jù)服務(wù)224,把消息傳送給IP網(wǎng)。動詞接口實(shí)際上是IP組卸載引擎的功能的抽象描述。操作系統(tǒng)通過其編程接口可揭示一些或全部動詞功能?;旧希摻涌诙x主機(jī)的行為。另外,主處理器節(jié)點(diǎn)200包括消息與數(shù)據(jù)服務(wù)224,它是層次高于動詞層的高級接口,并被用于處理通過IPSOE 210和IPSOE 212接收的消息和數(shù)據(jù)。消息與數(shù)據(jù)服務(wù)224向消費(fèi)者202-208提供處理消息和其它數(shù)據(jù)的接口。
現(xiàn)在參見圖3A,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,描述了IP組卸載引擎。圖3A中所示的IP組卸載引擎300A包括用于向IPSOE端口312A-316A傳送消息的一組隊(duì)列對(QP)302A-310A。利用網(wǎng)絡(luò)層的服務(wù)質(zhì)量字段(QOSF),例如第六版IP規(guī)范中的通信類別字段318A-334A引導(dǎo)到IPSOE端口312A-316A的數(shù)據(jù)的緩存。每個(gè)網(wǎng)絡(luò)層服務(wù)質(zhì)量字段具有它自己的流控制。因特網(wǎng)工程任務(wù)組(IETF)標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議被用于配置與網(wǎng)絡(luò)連接的所有IP組卸載引擎端口的鏈路和網(wǎng)絡(luò)地址。兩種這樣的協(xié)議是地址解析協(xié)議(ARP)和動態(tài)主機(jī)配置協(xié)議。存儲器轉(zhuǎn)換和保護(hù)(MTP)338A是把虛擬地址轉(zhuǎn)換成物理地址,并確認(rèn)訪問權(quán)的機(jī)構(gòu)。直接存儲器存取(DMA)340A相對于隊(duì)列對302A-310A,利用存儲器350A提供直接存儲器存取操作。
單一的IP組卸載引擎,例如圖3A中所示的IPSOE 300A能夠支持成千上萬對隊(duì)列。每對隊(duì)列由一個(gè)發(fā)送工作隊(duì)列(SWQ)和接收工作隊(duì)列(RWQ)組成。發(fā)送工作隊(duì)列被用于發(fā)送通道和存儲器語義消息。接收工作隊(duì)列接收通道語義消息。消費(fèi)者調(diào)用操作系統(tǒng)專用編程接口(這里它被稱為“動詞”),以便把工作請求放置到工作隊(duì)列中。
圖3B根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,描述一個(gè)交換機(jī),例如交換機(jī)300B。交換機(jī)300B包括通過鏈路或網(wǎng)絡(luò)層服務(wù)質(zhì)量字段,例如第四版IP的服務(wù)類型字段(識別成QOSF 306B),與許多端口304B通信的分組中繼302B。一般,諸如交換機(jī)300B之類的交換機(jī)能夠把幀從一個(gè)端口發(fā)送到相同交換機(jī)上的任意其它端口。
類似地,圖3根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,描述一個(gè)路由器300C。路由器300C包括一個(gè)幀中繼,例如通過網(wǎng)絡(luò)層服務(wù)質(zhì)量字段,比如第四版IP的服務(wù)類型字段(識別成QOSF 306C),與許多端口304C通信的GRH分組中繼302C。類似于交換機(jī)300B,路由器300C一般能夠把幀從一個(gè)端口發(fā)送到相同路由器上的任意其它端口。
現(xiàn)在參見圖4,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明工作請求的處理。在圖4中,存在一個(gè)接收工作隊(duì)列400,一個(gè)發(fā)送工作隊(duì)列402和完成隊(duì)列404,以便處理往來于消費(fèi)者406的請求。來自消費(fèi)者406的這些請求最終被發(fā)送給硬件408。本例中,消費(fèi)者406產(chǎn)生工作請求410和412,并接收完成隊(duì)列414。如圖4中所示,排列到工作隊(duì)列中的工作請求被稱為工作隊(duì)列元素(WQE)。
發(fā)送工作隊(duì)列402包含描述要在IP網(wǎng)架構(gòu)上傳送的數(shù)據(jù)的工作隊(duì)列元素(WQE)422-428。接收工作隊(duì)列400包含描述把來自IP網(wǎng)架構(gòu)的輸入通道語義數(shù)據(jù)放入何處的工作隊(duì)列元素(WQE)416-420。一個(gè)工作隊(duì)列元素由IPSOE中的硬件408處理。
動詞還提供從完成隊(duì)列404取回完成的工作的機(jī)構(gòu)。如圖4中所示,完成隊(duì)列404包含完成隊(duì)列元素(CQE)430-436。完成隊(duì)列元素包含關(guān)于先前完成的工作隊(duì)列元素的信息。完成隊(duì)列404被用于產(chǎn)生關(guān)于多對隊(duì)列的單點(diǎn)的完成通知。完成隊(duì)列元素是完成隊(duì)列上的一個(gè)數(shù)據(jù)結(jié)構(gòu)。該元素描述一個(gè)完成的工作隊(duì)列元素。完成隊(duì)列元素包含足以確定隊(duì)列對和完成的專用工作隊(duì)列元素的信息。完成隊(duì)列語境是包含單個(gè)完成隊(duì)列的指針,長度和管理單個(gè)完成隊(duì)列所需的其它信息的信息。
支持圖4中所示的發(fā)送工作隊(duì)列402的例證工作請求如下。發(fā)送工作請求是把一組本地?cái)?shù)據(jù)段推送給遠(yuǎn)程節(jié)點(diǎn)的接收工作隊(duì)列元素引用的數(shù)據(jù)段的通道語義操作。例如,工作隊(duì)列元素428包含對數(shù)據(jù)段4 438,數(shù)據(jù)段5 440和數(shù)據(jù)段6 442的引用。每個(gè)發(fā)送工作請求的數(shù)據(jù)段包含部分虛擬鄰近的存儲區(qū)。用于引用本地?cái)?shù)據(jù)段的虛擬地址在產(chǎn)生本地隊(duì)列對的進(jìn)程的地址語境中。
遠(yuǎn)程直接存儲器存取(RDMA)讀取工作請求提供讀取遠(yuǎn)程節(jié)點(diǎn)上的虛擬鄰近的存儲空間的存儲器語義操作。存儲空間可以是一部分存儲區(qū)域,或者一部分存儲窗。存儲區(qū)引用由虛擬地址和長度定義的預(yù)先記錄的一組虛擬鄰近的存儲器地址。存儲窗引用已綁定到預(yù)先記錄的區(qū)域的一組虛擬鄰近的存儲器地址。
RDMA讀取工作請求讀取遠(yuǎn)程端節(jié)點(diǎn)上的虛擬鄰近的存儲空間,并把數(shù)據(jù)寫入虛擬鄰近的本地存儲空間。類似于發(fā)送工作請求,RDMA讀取工作隊(duì)列元素用于引用本地?cái)?shù)據(jù)段的虛擬地址在產(chǎn)生本地隊(duì)列對的進(jìn)程的地址語境中。遠(yuǎn)程虛擬地址在擁有RDMA讀取工作隊(duì)列元素把其作為目標(biāo)的遠(yuǎn)程隊(duì)列對的進(jìn)程的地址語境中。
RDMA寫入工作隊(duì)列元素提供對遠(yuǎn)程節(jié)點(diǎn)上的虛擬鄰近的存儲空間進(jìn)行寫操作的存儲器語義操作。例如,接收工作隊(duì)列400中的工作隊(duì)列元素416引用數(shù)據(jù)段1 444,數(shù)據(jù)段2 446和數(shù)據(jù)段3 448。RDMA寫入工作隊(duì)列元素包含本地虛擬鄰近的存儲空間的分散列表和其中寫入本地存儲空間的遠(yuǎn)程存儲空間的虛擬地址。RDMA FetchOp工作隊(duì)列元素提供對遠(yuǎn)程字進(jìn)行基本操作的存儲器語義操作。RDMAFetchOp工作隊(duì)列元素是組合的RDAM讀取、修改和RDMA寫入操作。RDMA FetchOp工作隊(duì)列元素能夠支持幾種讀取-修改-寫入操作,例如比較,如果相等則交換。RDMA FetchOp并不包括在當(dāng)前的RDMA over IP標(biāo)準(zhǔn)化努力中,但是這里描述了RDMA FetchOp,因?yàn)樵谝恍?shí)現(xiàn)中,它可被用作增值特征。
綁定(解開)遠(yuǎn)程存取密鑰(R_Key)工作隊(duì)列元素向IP組卸載引擎硬件提供通過使存儲窗與存儲區(qū)聯(lián)系(脫離聯(lián)系),修改(破壞)存儲窗的命令。R_Key是每個(gè)RDMA存取的一部分,被用于核實(shí)遠(yuǎn)程進(jìn)程已被允許訪問該緩沖區(qū)。
在一個(gè)實(shí)施例中,圖4中所示的接收工作隊(duì)列只支持一種工作隊(duì)列元素(它被稱為接收工作隊(duì)列元素)。接收工作隊(duì)列元素提供描述寫入輸入的發(fā)送消息的本地存儲空間的通道語義操作。接收工作隊(duì)列元素包括描述幾個(gè)虛擬鄰近的存儲空間的分散列表。輸入的發(fā)送消息被寫入這些存儲空間中。虛擬地址在產(chǎn)生本地隊(duì)列對的進(jìn)程的地址語境中。
對于處理器間通信來說,用戶模式軟件進(jìn)程通過隊(duì)列對直接從緩沖區(qū)存在于存儲器中的地方傳送數(shù)據(jù)。在一個(gè)實(shí)施例中,通過隊(duì)列對的傳送繞過了操作系統(tǒng),消耗很少的主機(jī)指令周期。隊(duì)列對允許零處理器-復(fù)制數(shù)據(jù)傳送,而不涉及任何操作系統(tǒng)內(nèi)核。零處理器-復(fù)制數(shù)據(jù)傳送提供高帶寬和低等待時(shí)間通信的有效支持。
當(dāng)產(chǎn)生一個(gè)隊(duì)列對時(shí),該隊(duì)列對被設(shè)置成提供造反類型的傳送服務(wù)。在一個(gè)實(shí)施例中,實(shí)現(xiàn)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng)支持三種傳送服務(wù)TCP,SCTP和UDP。
TCP和SCTP使一個(gè)本地隊(duì)列對與一個(gè)并且只與一個(gè)遠(yuǎn)程隊(duì)列對相聯(lián)系。TCP和SCTP需要一種進(jìn)程來為TCP和SCTP將通過IP網(wǎng)架構(gòu)與之通信的每個(gè)進(jìn)程產(chǎn)生一個(gè)隊(duì)列對。從而,如果N個(gè)主處理器節(jié)點(diǎn)中的每一個(gè)都包含P個(gè)進(jìn)程,并且每個(gè)節(jié)點(diǎn)上的所有P個(gè)進(jìn)程希望與所有其它節(jié)點(diǎn)上的所有進(jìn)程通信,那么每個(gè)主處理器節(jié)點(diǎn)需要p2×(N-1)個(gè)隊(duì)列對。此外,進(jìn)程可使一個(gè)隊(duì)列對與相同IPSOE上的另一隊(duì)列對相聯(lián)系。
圖5中圖解說明了采用TCP或SCTP在分布式進(jìn)程之間通信的分布式計(jì)算機(jī)系統(tǒng)的一部分。圖5中的分布式計(jì)算機(jī)系統(tǒng)500包括主處理器節(jié)點(diǎn)1,主處理器節(jié)點(diǎn)2和主處理器節(jié)點(diǎn)3。主處理器節(jié)點(diǎn)1包括進(jìn)程A 510。主處理器節(jié)點(diǎn)3包括進(jìn)程C 520和進(jìn)程D 530。主處理器節(jié)點(diǎn)2包括進(jìn)程E 540。
主處理器節(jié)點(diǎn)1包括隊(duì)列對4、6和7,每個(gè)隊(duì)列對具有一個(gè)發(fā)送工作隊(duì)列和一個(gè)接收工作隊(duì)列。主處理器節(jié)點(diǎn)2具有隊(duì)列對9,主處理器節(jié)點(diǎn)3具有隊(duì)列對2和5。分布式計(jì)算機(jī)系統(tǒng)500的TCP或SCTP使一個(gè)本地隊(duì)列對與一個(gè)并且只與一個(gè)遠(yuǎn)程隊(duì)列對相聯(lián)系。從而隊(duì)列對4被用于與隊(duì)列對2通信;隊(duì)列對7被用于與隊(duì)列對5通信;隊(duì)列對6被用于與隊(duì)列對9通信。
放置在TCP或SCTP中的一個(gè)發(fā)送隊(duì)列上的WQE使數(shù)據(jù)被寫入由相關(guān)隊(duì)列對的接收WQE引用的接收存儲空間中。RDMA操作作用于相關(guān)隊(duì)列對的地址空間。
在本發(fā)明的一個(gè)實(shí)施例中,由于硬件保持序列號并確認(rèn)所有幀傳送,因此使TCP或SCTP可靠。硬件和IP網(wǎng)驅(qū)動器軟件的組合重試任何失敗的通信。即使在存在位錯(cuò)誤,接收欠載運(yùn)行和網(wǎng)絡(luò)擁塞,隊(duì)列對的進(jìn)程客戶機(jī)仍能獲得可靠的通信。如果在IP網(wǎng)架構(gòu)中存在備用路徑,即使存在交換機(jī)、鏈路或IP組卸載引擎端口,也能夠保持可靠的通信。
另外,可采用確認(rèn)在IP網(wǎng)架構(gòu)內(nèi)可靠地傳送數(shù)據(jù)。確認(rèn)可以是(或者可以不是)進(jìn)程級確認(rèn),即證實(shí)接收進(jìn)程已使用數(shù)據(jù)的確認(rèn)。另一方面,確認(rèn)可以是只指示數(shù)據(jù)已到達(dá)其目的地的確認(rèn)。
用戶數(shù)據(jù)報(bào)協(xié)議是無連接的。管理應(yīng)用程序采用UDP來發(fā)現(xiàn)并把新的交換機(jī)、路由器和端節(jié)點(diǎn)結(jié)合到指定的分布式計(jì)算機(jī)系統(tǒng)中。UDP不提供TCP或SCTP的可靠性保證。因此,UDP在每個(gè)端節(jié)點(diǎn)保持較小狀態(tài)信息的情況下工作。
現(xiàn)在參見圖6,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例描述了數(shù)據(jù)幀。數(shù)據(jù)幀是通過IP網(wǎng)架構(gòu)發(fā)送的信息的單元。數(shù)據(jù)幀是一種端節(jié)點(diǎn)-端節(jié)點(diǎn)結(jié)構(gòu),從而由端節(jié)點(diǎn)產(chǎn)生和使用。對于以IPSOE為目的地的幀,數(shù)據(jù)幀既不由IP網(wǎng)架構(gòu)中的交換機(jī)和路由器產(chǎn)生,也不由它們使用。代替以IPSOE為目的地的數(shù)據(jù)幀,通過修改進(jìn)程中的鏈路報(bào)頭字段,交換機(jī)和路由器只是把請求幀或確認(rèn)幀移動到更接近于最終的目的地。當(dāng)幀越過子網(wǎng)邊界時(shí),路由器可修改該幀的網(wǎng)絡(luò)報(bào)頭。在通過子網(wǎng)時(shí),單一幀停留在單一服務(wù)級上。
消息數(shù)據(jù)600包含與圖4中所示的數(shù)據(jù)段類似的數(shù)據(jù)段1 602、數(shù)據(jù)段2 604和數(shù)據(jù)段3 606。在本例中,這些數(shù)據(jù)段形成幀608,幀608被放入數(shù)據(jù)幀612內(nèi)的幀有效負(fù)載610中。另外,數(shù)據(jù)幀612包含用于檢錯(cuò)的循環(huán)冗余校驗(yàn)(CRC)614。另外,路由報(bào)頭616和傳送報(bào)頭618存在于數(shù)據(jù)幀612中。路由報(bào)頭616被用于為數(shù)據(jù)幀612識別源端口和目的地端口。本例中的傳送報(bào)頭618為數(shù)據(jù)幀612規(guī)定序列號和源端口號及目的地端口號。當(dāng)建立通信時(shí),序列號被初始化,并且對于幀報(bào)頭、DDP/RDMA報(bào)頭、數(shù)據(jù)有效負(fù)載和CRC的每個(gè)字節(jié),序列號被加1。本例中的幀報(bào)頭620規(guī)定與該幀相關(guān)的目的地隊(duì)列對編號,和直接數(shù)據(jù)布置和/或遠(yuǎn)程直接存儲器存取(DDP/RDMA)報(bào)頭加上數(shù)據(jù)有效負(fù)載加入CRC的長度。DDP/RDMA報(bào)頭622規(guī)定數(shù)據(jù)有效負(fù)載的消息標(biāo)識符和布置信息。對于為消息一部分的所有幀來說,消息標(biāo)識符是不變的。例證的消息標(biāo)識符包括,例如發(fā)送、寫RDMA和讀RDMA。
在圖7中,描述了一部分的分布式計(jì)算機(jī)系統(tǒng),例如分布式計(jì)算機(jī)系統(tǒng)700,以便圖解說明例證的請求和確認(rèn)事務(wù)。圖7中的分布式計(jì)算機(jī)系統(tǒng)700包括運(yùn)行進(jìn)程A 716的主處理器節(jié)點(diǎn)702和運(yùn)行進(jìn)程B 718的主處理器節(jié)點(diǎn)704。主處理器節(jié)點(diǎn)702包括IPSOE 706。主處理器節(jié)點(diǎn)704包括IPSOE 708。圖7中的分布式計(jì)算機(jī)系統(tǒng)包括IP網(wǎng)架構(gòu)710,IP網(wǎng)架構(gòu)710包括交換機(jī)712和交換機(jī)714。IP網(wǎng)架構(gòu)包括耦接IPSOE 706和交換機(jī)712的鏈路;耦接交換機(jī)712和交換機(jī)714的鏈路;和耦接IPSOE 708和交換機(jī)714的鏈路。
在該例證事務(wù)中,主處理器節(jié)點(diǎn)702包括客戶機(jī)進(jìn)程A。主處理器節(jié)點(diǎn)704包括客戶機(jī)進(jìn)程B??蛻魴C(jī)進(jìn)程A通過包括發(fā)送隊(duì)列724和接收隊(duì)列726的隊(duì)列對23 720與主IPSOE交互作用??蛻魴C(jī)進(jìn)程B通過包括發(fā)送隊(duì)列728和接收隊(duì)列730的隊(duì)列對24 722與主IPSOE708交換作用。隊(duì)列對23和24是包括發(fā)送工作隊(duì)列和接收工作隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。
進(jìn)程A通過向隊(duì)列對23的發(fā)送隊(duì)列公布工作隊(duì)列元素,啟動消息請求。圖4中圖解說明了這樣的工作隊(duì)列元素??蛻魴C(jī)進(jìn)程A的消息請求由包含在發(fā)送工作隊(duì)列元素中的集中列表引用。集中列表中的每個(gè)數(shù)據(jù)段指向部分虛擬鄰近的本地存儲區(qū),所述本地存儲區(qū)包含一部分的消息,例如由圖4中的分別保持消息部分1、2和3的數(shù)據(jù)段1、2和3指示的一部分消息。
主IPSOE 706中的硬件讀取工作隊(duì)列元素,并把保存在虛擬鄰近的緩沖區(qū)中的消息分割成數(shù)據(jù)幀,例如圖6中圖解說明的數(shù)據(jù)幀。數(shù)據(jù)幀通過IP網(wǎng)架構(gòu)被發(fā)送,并且對于可靠的傳送服務(wù)來說,由最終的目的地端節(jié)點(diǎn)確認(rèn)。如果未被成功確認(rèn),那么源端節(jié)點(diǎn)重發(fā)該數(shù)據(jù)幀。數(shù)據(jù)幀由源端節(jié)點(diǎn)產(chǎn)生,并由目的地端節(jié)點(diǎn)使用。
參見圖8,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例描述了在分布式連網(wǎng)系統(tǒng)中使用的網(wǎng)絡(luò)尋址。主機(jī)名稱提供主機(jī)節(jié)點(diǎn),例如主處理器節(jié)點(diǎn)或I/O適配器節(jié)點(diǎn)的邏輯標(biāo)識。主機(jī)名稱識別消息的端節(jié)點(diǎn),以致消息被指定給存在于由主機(jī)名稱規(guī)定的端節(jié)點(diǎn)上的進(jìn)程。從而,每個(gè)節(jié)點(diǎn)存在一個(gè)主機(jī)名稱,但是一個(gè)節(jié)點(diǎn)可具有多個(gè)IPSOE。
單個(gè)鏈路層地址(例如以太網(wǎng)媒體訪問層地址)804被分配給端節(jié)點(diǎn)組件802的每個(gè)端口806。組件可以是IPSOE、交換機(jī)或路由器。所有IPSOE和路由器組件必須具有一個(gè)MAC地址。交換機(jī)上的媒體訪問點(diǎn)也被分配一個(gè)MAC地址。
一個(gè)網(wǎng)絡(luò)地址(例如,IP地址)812被分配給端節(jié)點(diǎn)組件802的每個(gè)端口806。組件可以是IPSOE、交換機(jī)或路由器。所有IPSOE和路由器組件必須具有一個(gè)MAC地址。交換機(jī)上的媒體訪問點(diǎn)也被分配一個(gè)MAC地址。
交換機(jī)810的每個(gè)端口不具有與之相聯(lián)系的鏈路層地址。但是,交換機(jī)810可具有媒體訪問端口814,媒體訪問端口814具有與之相聯(lián)系的鏈路層地址816和網(wǎng)絡(luò)層地址808。
圖9中圖解說明了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng)的一部分。分布式計(jì)算機(jī)系統(tǒng)900包括子網(wǎng)902和子網(wǎng)904。子網(wǎng)902包括端節(jié)點(diǎn),例如主處理器節(jié)點(diǎn)906、908和910。子網(wǎng)904包括端節(jié)點(diǎn),例如主處理器節(jié)點(diǎn)912和914。子網(wǎng)902包括交換機(jī)916和918。子網(wǎng)904包括交換機(jī)920和922。
路由器產(chǎn)生并連接子網(wǎng)。例如,子網(wǎng)902借助路由器924和926與子網(wǎng)904連接。在一個(gè)例證的實(shí)施例中,子網(wǎng)具有多達(dá)216個(gè)端節(jié)點(diǎn)、交換機(jī)和路由器。
子網(wǎng)被定義成作為單一單元管理的一組端節(jié)點(diǎn)和級聯(lián)交換機(jī)。一般來說,子網(wǎng)占據(jù)單一的地理或功能區(qū)。例如,一個(gè)房間中的單一計(jì)算機(jī)系統(tǒng)可被定義成一個(gè)子網(wǎng)。在一個(gè)實(shí)施例中,子網(wǎng)中的交換機(jī)能夠?qū)崿F(xiàn)消息的非??焖俚娜湎x洞或直通路由選擇。
子網(wǎng)內(nèi)的交換機(jī)檢查在子網(wǎng)內(nèi)唯一的目的地鏈路層地址(例如MAC地址),以允許交換機(jī)快速并且高效地發(fā)送輸入的消息幀。在一個(gè)實(shí)施例中,交換機(jī)是相當(dāng)簡單的電路,并且通常被實(shí)現(xiàn)成單一集成電路。子網(wǎng)可具有由級聯(lián)交換機(jī)形成的數(shù)百到數(shù)千個(gè)端節(jié)點(diǎn)。
如圖9中所示,為了擴(kuò)展到更大的系統(tǒng),利用路由器,例如路由器924和926連接子網(wǎng)。路由器解釋目的地網(wǎng)絡(luò)層地址(例如IP地址),并發(fā)送幀。
圖3B中圖解說明了交換機(jī)的一個(gè)例證實(shí)施例。交換機(jī)或路由器上的每個(gè)I/O路徑具有一個(gè)端口。一般來說,交換機(jī)能夠把幀從一個(gè)端口發(fā)送到相同交換機(jī)上的任意其它端口。在諸如子網(wǎng)902或子網(wǎng)904之類的子網(wǎng)內(nèi),從源端口到目的地端口的路徑由目的地主IPSOE端口的鏈路層地址(例如MAC地址)確定。在子網(wǎng)之間,路徑由目的地IPSOE端口的網(wǎng)絡(luò)層地址(IP地址),以及由路由器端口的鏈路層地址(例如MAC地址)確定,它將被用于到達(dá)目的地的子網(wǎng)。
在一個(gè)實(shí)施例中,不要求請求幀和請求幀的對應(yīng)的肯定確認(rèn)(ACK)幀使用的路徑是對稱的。在采用茫然路由選擇的一個(gè)實(shí)施例中,交換機(jī)根據(jù)鏈路層地址(例如MAC地址)選擇輸出端口。在一個(gè)實(shí)施例中,交換機(jī)對交換機(jī)中它的所有輸入端口使用一組路由選擇判斷標(biāo)準(zhǔn)。在一個(gè)例證實(shí)施例中,路由選擇判斷標(biāo)準(zhǔn)包含在一個(gè)路由選擇表中。在一個(gè)備選實(shí)施例中,交換機(jī)對每個(gè)輸入端口使用獨(dú)立的一組標(biāo)準(zhǔn)。
本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)事務(wù)一般由幾個(gè)硬件和軟件步驟組成??蛻魴C(jī)進(jìn)程數(shù)據(jù)傳送服務(wù)可以是用戶模式或內(nèi)核模式進(jìn)程??蛻魴C(jī)進(jìn)程通過一個(gè)或多個(gè)隊(duì)列對,例如圖3A、5和8中圖解說明的隊(duì)列對,訪問IP組卸載引擎硬件。客戶機(jī)進(jìn)程調(diào)用操作系統(tǒng)專用編程接口(這里它被稱為“動詞”(verbs))。實(shí)現(xiàn)動詞的軟件代碼向指定的隊(duì)列對工作隊(duì)列公布工作隊(duì)列元素。
存在公布工作隊(duì)列元素的許多種可能方法,并且存在許多可能的工作隊(duì)列元素格式,所述工作隊(duì)列元素格式允許各種成本/性能設(shè)計(jì)要點(diǎn),但是不影響互操作性。但是,用戶進(jìn)程必須按照良好定義的方式與動詞通信,跨越IP網(wǎng)架構(gòu)傳送的數(shù)據(jù)的格式和協(xié)議必須被充分規(guī)定,以允許設(shè)備在異類的廠商環(huán)境中互操作。
在一個(gè)實(shí)施例中,IPSOE硬件檢測工作隊(duì)列元素位置,并訪問工作隊(duì)列元素。在該實(shí)施例中,IPSOE硬件轉(zhuǎn)換并確認(rèn)工作隊(duì)列元素的虛擬地址,并訪問數(shù)據(jù)。
輸出消息被分成一個(gè)或多個(gè)數(shù)據(jù)幀。在一個(gè)實(shí)施例中,IPSOE硬件向每個(gè)幀添加一個(gè)DDP/RDMA報(bào)頭,幀報(bào)頭和CRC,傳送報(bào)頭和網(wǎng)絡(luò)報(bào)頭。傳送報(bào)頭包括序列號和其它傳送信息。網(wǎng)絡(luò)報(bào)頭包括路由信息,例如目的地IP地址和其它網(wǎng)絡(luò)路由信息。鏈路報(bào)頭包含目的地鏈路層地址(例如MAC地址)或其它本地路由信息。
如果采用TCP或SCTP,那么當(dāng)請求數(shù)據(jù)幀到達(dá)其目的地端節(jié)點(diǎn)時(shí),目的地端節(jié)點(diǎn)使用確認(rèn)數(shù)據(jù)幀使請求數(shù)據(jù)幀發(fā)送者知道請求數(shù)據(jù)幀在目的地被證實(shí)并被接受。確認(rèn)數(shù)據(jù)幀確認(rèn)一個(gè)或多個(gè)有效并且接受的請求數(shù)據(jù)幀。在接收任意確認(rèn)之前,請求者可具有多個(gè)要發(fā)的請求數(shù)據(jù)幀。在一個(gè)實(shí)施例中,當(dāng)產(chǎn)生隊(duì)列對時(shí),確定多個(gè)要發(fā)的消息,即請求數(shù)據(jù)幀的數(shù)目。
圖10中圖解說明了用于實(shí)現(xiàn)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分層體系結(jié)構(gòu)1000的一個(gè)實(shí)施例。圖10的分層體系結(jié)構(gòu)圖表示數(shù)據(jù)通信路徑的不同層,以及在各層之間傳送的數(shù)據(jù)和控制信息的組織。
IPSOE端節(jié)點(diǎn)協(xié)議層(例如由端節(jié)點(diǎn)1011采用)包括由消費(fèi)者1003定義的高級協(xié)議1002,傳送層1004,網(wǎng)絡(luò)層1006,鏈路層1008和物理層1010。交換器層(例如由交換機(jī)1013采用)包括鏈路層1008和物理層1010。路由器層(例如由路由器1015采用)包括網(wǎng)絡(luò)層1016,鏈路層1008和物理層1010。
分層體系結(jié)構(gòu)1000一般遵循典型的通信堆棧的概要,以便完成在消費(fèi)者1003和1005之間傳送數(shù)據(jù)的消費(fèi)者操作1012。例如就端節(jié)點(diǎn)1011的協(xié)議層來說,高級協(xié)議1002采用動詞在傳送層1004產(chǎn)生消息。傳送層1004把消息1014傳遞給網(wǎng)絡(luò)層1006。網(wǎng)絡(luò)層1006在網(wǎng)絡(luò)子網(wǎng)1016之間發(fā)送幀。鏈路層1008在網(wǎng)絡(luò)子網(wǎng)1018內(nèi)發(fā)送幀。物理層1000把位或位組發(fā)送給其它設(shè)備的物理層。各層都不知道上一層或下一層如何實(shí)現(xiàn)它們的功能。
消費(fèi)者1003和1005代表把其它層用于端節(jié)點(diǎn)之間的通信的應(yīng)用程序或進(jìn)程。傳送層1004提供端對端消息移動。在一個(gè)實(shí)施例中,傳送層提供如上所述的四種傳送服務(wù),它們是傳統(tǒng)的TCP、RDMA overTCP、SCTP和UDP。網(wǎng)絡(luò)層1006執(zhí)行通過一個(gè)子網(wǎng)或多個(gè)子網(wǎng)到目的地端節(jié)點(diǎn)的幀路由選擇。鏈路層1008執(zhí)行流控制1020,檢錯(cuò)和跨越鏈路的優(yōu)先化幀傳遞。
物理層1010執(zhí)行依賴于技術(shù)的位傳輸。通過鏈路1022、1024和1026,在物理層之間傳遞位或位組??捎糜∷㈦娐枫~跡線,銅纜,光纜,或者利用其它恰當(dāng)?shù)逆溌穼?shí)現(xiàn)鏈路。參見圖11,根據(jù)本發(fā)明的一個(gè)例證實(shí)施例描述了與主機(jī)軟件的RNIC接口。動詞消費(fèi)者1156通過動詞1152和動詞驅(qū)動器與程序庫1148訪問主RNIC 1100和備用RNIC 1104。動詞消費(fèi)者1156通過分別調(diào)用RNIC管理查詢動詞1124和1136,確定主NRIC 1100和備用RNIC 1104支持切換/切回(S/S)。RNIC管理查詢動詞返回RNIC權(quán)能,在本例證實(shí)施例中,RNIC權(quán)能包括一個(gè)指示RNIC支持切換/切回(S/S)的字段。動詞消費(fèi)者1156隨后使用RNIC管理修改動詞1124和1136把一批隊(duì)列對(QP),完成隊(duì)列(CQ)及存儲器轉(zhuǎn)換和保護(hù)表(TPT)條目分配給S/S和非S/S支持。作為成功完成RNIC修改動詞的結(jié)果,主RNIC 1100和備用RNIC 1104共享共同的QP、CQ和存儲器TPT范圍。
動詞消費(fèi)者1156利用產(chǎn)生CQ動詞產(chǎn)生一個(gè)CQ,產(chǎn)生CQ動詞選擇CQ是將支持S/S,例如CQ 1176和1180,還是不支持S/S,例如QP 1168和1188。如果動詞消費(fèi)者選擇S/S支持,那么產(chǎn)生CQ動詞包括識別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的額外修改量。RNIC標(biāo)識符可以是EUI-64位標(biāo)識符。端口標(biāo)識符可以是端口號。另一種備選方案可以是使用RNIC的MAC地址來識別RNIC和端口。如果動詞消費(fèi)者選擇S/S支持,那么RNIC和端口標(biāo)識符被放入CQ語境1110和1118。如果動詞消費(fèi)者不選擇S/S支持,那么RNIC和端口標(biāo)識符不被放入CQ語境1106和1122。
動詞消費(fèi)者1156利用寄存器存儲區(qū)動詞之一(例如寄存器存儲區(qū),寄存器共享存儲區(qū),寄存器物理存儲區(qū))記錄存儲區(qū),寄存器存儲區(qū)動詞選擇存儲區(qū)是將支持S/S,例如存儲區(qū)1128和1132,還是不支持S/S,例如存儲區(qū)1194和1196。如果動詞消費(fèi)者選擇S/S支持,那么寄存器存儲區(qū)動詞包括識別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的額外修改量。RNIC標(biāo)識符可以是EUI-64位標(biāo)識符。端口標(biāo)識符可以是端口號。另一種備選方案可以是使用RNIC的MAC地址來識別RNIC和端口。如果動詞消費(fèi)者選擇S/S支持,那么RNIC和端口標(biāo)識符可被放入存儲區(qū)的存儲器轉(zhuǎn)換和保護(hù)表(TPT)條目1128和1132中。如果動詞消費(fèi)者不選擇S/S支持,那么RNIC和端口標(biāo)識符不被放入存儲區(qū)的存儲器TPT條目1194和1196中。
動詞消費(fèi)者1156利用產(chǎn)生QP動詞產(chǎn)生一個(gè)QP,產(chǎn)生QP動詞選擇QP是將支持S/S,例如QP 1172和1184,還是不支持S/S,例如QP 1164和1192。如果動詞消費(fèi)者選擇S/S支持,那么產(chǎn)生QP動詞包括識別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的額外修改量。RNIC標(biāo)識符可以是EUI-64位標(biāo)識符。端口標(biāo)識符可以是端口號。另一種備選方案可以是使用RNIC的MAC地址來識別RNIC和端口。如果動詞消費(fèi)者選擇S/S支持,那么RNIC和端口標(biāo)識符被放入QP語境1112和1116。如果動詞消費(fèi)者不選擇S/S支持,那么RNIC和端口標(biāo)識符不被放入QP語境1108和1120。
當(dāng)例如在由于停機(jī)而發(fā)生的切換之后,S/S QP在不存在替代物的情況下工作時(shí),動詞消費(fèi)者1156使用修改QP動詞使S/S QP,例如QP 1172和1184停頓,并且重新向備用RNIC分配相同的QP號。修改QP動詞包括識別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的修改量。RNIC標(biāo)識符可以是EUI-64位標(biāo)識符。端口標(biāo)識符可以是端口號。另一種備選方案可以是使用RNIC的MAC地址來識別RNIC和端口。RNIC和端口標(biāo)識符被放入QP語境1112和1116。
當(dāng)例如在由于停機(jī)而發(fā)生的切換之后,S/S RNIC在不存在替代物的情況下工作時(shí),借助備用RNIC,動詞消費(fèi)者1156使用ResyncRegistration動詞記錄所有的存儲器TPT條目,例如1128。
在與在不存在替代物的情況下工作的指定S/S CQ相產(chǎn)的所有S/S QP已被停頓之后,動詞消費(fèi)者1156使用修改CQ動詞使S/S CQ,例如CQ 1176和1180停頓,并且重新向備用RNIC分配相同的CQ號。修改CQ動詞包括識別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的修改量。RNIC標(biāo)識符可以是EUI-64位標(biāo)識符。端口標(biāo)識符可以是端口號。另一種備選方案可以是使用RNIC的MAC地址來識別RNIC和端口。RNIC和端口標(biāo)識符被放入CQ語境1110和1118。
在S/S CQ已被停頓之后,使用修改CQ動詞使CQ處于激活狀態(tài)(例如使用就緒狀態(tài)),對于與CQ相關(guān)的每個(gè)S/S QP,使用修改QP動詞使QP處于激活狀態(tài)(例如發(fā)送就緒狀態(tài))。
參見圖12,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明與兩個(gè)RNIC保持的切換和切回相關(guān)的例證連接狀態(tài)的圖。在優(yōu)選實(shí)施例中,每個(gè)主RNIC、備用RNIC或單一RNIC保持圖12中所示的狀態(tài)信息。狀態(tài)信息可保持在例如RNIC內(nèi),RNIC可訪問的主機(jī)存儲單元中,這兩者的組合中等等。。圖12表示了狀態(tài)信息保持在RNIC內(nèi)的例證情況。
每個(gè)RNIC QP,例如QP 1172具有QP語境表(QPCT),例如QPCT 1200中的一個(gè)QP語境條目,例如QPCE0 1204,QPCE1 1208和QPCEN 1212。通過QP語境表寄存器,例如QPCT寄存器1244訪問QPCT 1200,QP語境表寄存器包含QPCT的地址,例如QPCT地址1248,和QPCT的長度,例如QPCT長度1252。QP語境表1200中的每個(gè)條目具有固定的大小,不過也可使用具有大小可變的QPCT條目的QPCT。QPCT中的每個(gè)條目包含與關(guān)于該條目索引的QP號相關(guān)的有關(guān)語境信息。例如,QPCE N 1212包含與QP號N相關(guān)的QP狀態(tài)信息。QP號N的狀態(tài)包括傳統(tǒng)的QP語境狀態(tài),例如傳統(tǒng)QP語境狀態(tài)1220,工作SQ切換/切回語境狀態(tài),例如工作SQ切換/切回語境1224,提交的SQ切換/切回語境狀態(tài),例如提交的SQ切換/切回語境1228,工作RQ切換/切回語境狀態(tài),例如工作RQ切換/切回語境1232,提交的RQ切換/切回語境狀態(tài),例如提交的RQ切換/切回語境1236,和主RNIC與備用RNIC標(biāo)識語境狀態(tài),例如主RNIC與備用RNIC標(biāo)識語境1240。
傳統(tǒng)的QP語境狀態(tài)1220包含公知的QP語境狀態(tài)信息,例如QP的狀態(tài),與QP相關(guān)的服務(wù)的類型,與QP相關(guān)的TCP源端口號和目的地端口號,與QP相關(guān)的IP源地址和目的地地址。
工作SQ切換/切回語境1224包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息
所有提交SQ切換/切回字段包含已由備用RNIC通過檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!疤峤坏漠?dāng)前發(fā)送WQE號”識別已被設(shè)置檢查點(diǎn),目前正在發(fā)送隊(duì)列中被處理的WQE。“當(dāng)前發(fā)送WQE中的提交字節(jié)偏移量”識別對于提交的當(dāng)前發(fā)送WQE要設(shè)置檢查點(diǎn)的下一字節(jié)。“下一發(fā)送TCP段的提交序列號”識別將用于當(dāng)前發(fā)送WQE中的提交字節(jié)偏移量的TCP序列號?!跋乱话l(fā)送TCP段的提交窗口值”識別從當(dāng)前發(fā)送WQE中的提交字節(jié)偏移量開始的,可用于要發(fā)送的下一TCP段的TCP窗口的大小?!疤峤坏漠?dāng)前接收Ack WQE號”識別已由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的,在發(fā)送隊(duì)列中被設(shè)置檢查點(diǎn)的最新WQE?!爱?dāng)前接收Ack WQE中的提交字節(jié)偏移量”識別對于提交的當(dāng)前接收ACK WQE,要由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)?!跋乱籖cv Ack TCP段的提交序列號”識別遠(yuǎn)程節(jié)點(diǎn)預(yù)期的,并且與當(dāng)前接收Ack WQE中的提交字節(jié)偏移量相聯(lián)系的下一TCP序列號?!跋乱籖cv Ack TCP段的提交窗口值”識別由從遠(yuǎn)程節(jié)點(diǎn)回送的最后的TCP窗口大小得到的,并且與當(dāng)前接收Ack WQE中的提交字節(jié)偏移量相聯(lián)系的發(fā)送窗口中的變化。
工作RQ切換/切回語境1232包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息。
所有工作RQ切換/切回字段包含還未由備用RNIC通過檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段。“工作的當(dāng)前接收WQE號”識別接收隊(duì)列中目前正被處理的WQE?!爱?dāng)前接收WQE中的工作字節(jié)偏移量”識別對于工作的當(dāng)前接收WQE要處理的下一字節(jié)?!跋乱唤邮誘CP段的工作序列號”識別對于當(dāng)前接收WQE中的工作字節(jié)偏移量預(yù)期的TCP序列號。“下一接收TCP段的工作窗口值”識別從當(dāng)前接收WQE中的工作字節(jié)偏移量開始的,可用于要接收的下一TCP段的TCP窗口的大小?!肮ぷ鞯漠?dāng)前發(fā)送Ack WQE號”識別接收隊(duì)列中關(guān)于其已向遠(yuǎn)程節(jié)點(diǎn)發(fā)送確認(rèn)的目前正被處理的WQE?!爱?dāng)前發(fā)送Ack WQE中的工作字節(jié)偏移量”識別對于工作的當(dāng)前發(fā)送ACK WQE,將向遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)?!跋乱话l(fā)送Ack TCP段的工作序列號”識別將被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的工作字節(jié)偏移量相聯(lián)系的下一TCP序列號?!跋乱话l(fā)送Ack TCP段的工作窗口值”識別要被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的工作字節(jié)偏移量相聯(lián)系的下一TCP窗口的大小。
提交RQ切換/切回語境1236包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息。
所有提交RQ切換/切回字段包含還未由備用RNIC通過檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!疤峤坏漠?dāng)前接收WQE號”識別已被設(shè)置檢查點(diǎn),目前在接收隊(duì)列中正被處理的最新WQE。“當(dāng)前接收WQE中的提交字節(jié)偏移量”識別對于提交的當(dāng)前接收WQE要處理的下一字節(jié)?!跋乱唤邮誘CP段的提交序列號”識別對于當(dāng)前接收WQE中的提交字節(jié)偏移量預(yù)期的TCP序列號?!跋乱唤邮誘CP段的提交窗口值”識別從當(dāng)前接收WQE中的提交字節(jié)偏移量開始的,可用于要接收的下一TCP段的TCP窗口的大小?!疤峤坏漠?dāng)前發(fā)送Ack WQE號”識別接收隊(duì)列中關(guān)于其已向遠(yuǎn)程節(jié)點(diǎn)發(fā)送確認(rèn)的已被設(shè)置檢查點(diǎn)的最新WQE?!爱?dāng)前發(fā)送Ack WQE中的提交字節(jié)偏移量”識別對于提交的當(dāng)前發(fā)送ACK WQE,將向遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)?!跋乱话l(fā)送Ack TCP段的提交序列號”識別將被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的提交字節(jié)偏移量相聯(lián)系的下一TCP序列號?!跋乱话l(fā)送Ack TCP段的提交窗口值”識別要被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的提交字節(jié)偏移量相聯(lián)系的下一TCP窗口的大小。
主RNIC和備用RNIC標(biāo)識語境1240包含下述信息。
當(dāng)產(chǎn)生QP時(shí),RNIC切換/切回(S/S)狀態(tài)作為產(chǎn)生QP動詞的輸入修改量被傳遞。如果RNIC S/S狀態(tài)為0,那么QP使S/S被禁用,只有主字段有效。如果RNIC S/S不為0,那么QP使S/S被啟用,主字段和備用字段都有效。
主RNIC標(biāo)識符被用于唯一地識別主RNIC。例如,RNIC標(biāo)識符可以是RNIC的EIU-64值。主RNIC端口標(biāo)識符被用于唯一地識別主RNIC上,QP與之相聯(lián)系的端口。例如,RNIC端口標(biāo)識符可以是端口號,或者M(jìn)AC和IP地址的組合。備用RNIC標(biāo)識符被用于唯一地識別備用RNIC。備用RNIC端口標(biāo)識符被用于唯一地識別備用RNIC上,QP與之相聯(lián)系的端口。
每個(gè)RNIC CQ,例如QP 1176具有CQ語境表(CQCT),例如CQCT 1252中的一個(gè)CQ語境條目,例如CQCE0 1256,CQCE11260和CQCEN 1264。通過CQ語境表寄存器,例如CQCT寄存器1284訪問CQCT,CQ語境表寄存器包含CQCT的地址,例如CQCT地址1288,和CQCT的長度,例如CQCT長度1292。QP語境表中的每個(gè)條目具有固定的大小,不過也可使用具有大小可變的CQCT條目的CQCT。CQCT中的每個(gè)條目包含與關(guān)于該條目索引的CQ號相關(guān)的有關(guān)語境信息。例如,CQCE N 1264包含與CQ號N相關(guān)的所有QP狀態(tài)。CQ號N的狀態(tài)包括傳統(tǒng)的CQ語境狀態(tài),例如傳統(tǒng)QP語境狀態(tài)1268,工作CQ切換/切回語境狀態(tài),例如工作CQ切換/切回語境1272,提交的CQ切換/切回語境狀態(tài),例如提交的CQ切換/切回語境1276,和主RNIC與備用RNIC標(biāo)識語境狀態(tài),例如主RNIC與備用RNIC標(biāo)識語境1280。
傳統(tǒng)的CQ語境狀態(tài)1268包含公知的CQ語境狀態(tài)信息,例如CQ的狀態(tài)和CQ中的條目的總數(shù)。
工作CQ切換/切回語境1272包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息
工作CQ切換/切回字段包含還未由備用RNIC通過檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!肮ぷ鞯漠?dāng)前完成CQE號”識別完成隊(duì)列中目前正被處理的CQE。
提交CQ切換/切回語境1272包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息
提交CQ切換/切回字段包含已由備用RNIC通過檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!肮ぷ鞯漠?dāng)前完成CQE號”識別已被設(shè)置檢查點(diǎn),并且目前在完成隊(duì)列中正被處理的CQE。
主RNIC和備用RNIC標(biāo)識語境1280包含下述信息。
當(dāng)產(chǎn)生QP時(shí),RNIC切換/切回(S/S)狀態(tài)作為產(chǎn)生QP動詞的輸入修改量被傳遞。如果RNIC S/S狀態(tài)為0,那么CQ使S/S被禁用,只有主字段有效。這種情況下,只有具有S/S被禁用的RNIC的QP才能與CQ相聯(lián)系。
如果RNIC S/S不為0,那么CQ使S/S被啟用,主字段和備用字段都有效。這種情況下,只有具有匹配的主RNIC和備用RNIC的QP才能夠與CQ相聯(lián)系。
主RNIC標(biāo)識符被用于唯一地識別主RNIC。例如,RNIC標(biāo)識符可以是RNIC的EIU-64值。主RNIC端口標(biāo)識符被用于唯一地識別主RNIC上,CQ與之相聯(lián)系的端口。例如,RNIC端口標(biāo)識符可以是端口號,或者M(jìn)AC和IP地址的組合。備用RNIC標(biāo)識符被用于唯一地識別備用RNIC。備用RNIC端口標(biāo)識符被用于唯一地識別備用RNIC上,CQ與之相聯(lián)系的端口。
參見圖13A,提供根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明跨越兩個(gè)RNIC的連接的例證初始化進(jìn)程的流程圖。如圖13A中所示,操作開始于RNIC的詢問,以確定它們是否支持切換/切回(步驟1302)。該步驟既詢問將被選為主RNIC的RNIC,又詢問將被選為備用RNIC的RNIC。對于支持S/S,并且主機(jī)打算將其配置成S/S RNIC的每個(gè)RNIC,主機(jī)發(fā)出修改RNIC動詞(步驟1304)。修改RNIC動詞選擇將關(guān)于S/S和非S/S配置的QP號的范圍,CQ號的范圍和存儲器轉(zhuǎn)換與保護(hù)表?xiàng)l目的范圍。
對于產(chǎn)生的每個(gè)CQ,主機(jī)發(fā)出產(chǎn)生CQ動詞(步驟1306)。產(chǎn)生CQ動詞規(guī)定與CQ相關(guān)的主RNIC,主RNIC端口,備用RNIC和備用RNIC端口。對于通過寄存器存儲區(qū)動詞之一記錄的每個(gè)存儲區(qū),主機(jī)規(guī)定與該存儲器相關(guān)的主RNIC,主RNIC端口,備用RNIC和備用RNIC端口(步驟1308)。
對于產(chǎn)生的每個(gè)QP,主機(jī)發(fā)出產(chǎn)生QP動詞(步驟1310)。產(chǎn)生QP動詞規(guī)定與QP相關(guān)的RNIC狀態(tài)(主或備用),主RNIC,主RNIC端口,備用RNIC和備用RNIC端口。
對于通過分配存儲窗動詞分配的每個(gè)存儲窗(步驟1312),主機(jī)規(guī)定與該存儲窗相關(guān)的主RNIC,主RNIC端口,備用RNIC和備用RNIC端口。從而,兩個(gè)RNIC,即主RNIC和備用RNIC之間的連接被初始化。
圖13B是根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,跨越兩個(gè)RNIC的連接的例證重新同步進(jìn)程的流程圖。重新同步進(jìn)程被用于把備用RNIC分配給主RNIC上已被配置成S/S QP的QP,所述主RNIC已被配置成支持S/S,但是正在沒有備用RNIC的情況下工作。
如圖13B中所示,操作開始于主RNIC的詢問,以確定將關(guān)于S/S和非S/S配置的QP號的范圍,CQ號的范圍,以及存儲器轉(zhuǎn)換和保護(hù)表?xiàng)l目的范圍(步驟1320)。備用RNIC也被詢問,以確定它是否支持切換/切回(也是步驟1320的一部分)。如果是,那么操作進(jìn)行到步驟1322;否則,操作被終止。
在步驟1322中,主機(jī)向備用RNIC發(fā)出修改RNIC動詞,并選擇將關(guān)于S/S和非S/S配置的QP號的范圍,CQ號的范圍,以及存儲器轉(zhuǎn)換和保護(hù)表?xiàng)l目的范圍(步驟1322)。對于將在備用RNIC上產(chǎn)生的每個(gè)CQ,主機(jī)發(fā)出產(chǎn)生CQ動詞(步驟1324)。產(chǎn)生CQ動詞規(guī)定與該CQ相聯(lián)系的主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口。
對于將在主RNIC和備用RNIC之間共享的每個(gè)存儲區(qū),主機(jī)使用寄存器共享存儲器動詞登記備用RNIC上的所有共享存儲區(qū)(步驟1326)。通過寄存器存儲區(qū)動詞之一進(jìn)行登記,主機(jī)規(guī)定與存儲區(qū)相關(guān)的主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口。
對于在備用RNIC上產(chǎn)生的每個(gè)QP,主機(jī)發(fā)出產(chǎn)生QP動詞(步驟1328)。產(chǎn)生QP動詞規(guī)定與該QP相關(guān)的RNIC狀態(tài)(備用),主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口。對于通過分配存儲窗動詞分配的每個(gè)存儲窗,主機(jī)規(guī)定與該存儲窗相關(guān)的主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口(步驟1330)。
對于將在主RNIC上重新同步的每個(gè)QP,主機(jī)發(fā)出修改QP動詞,使QP停頓并向該QP分配RNIC狀態(tài)(主要的);主RNIC和端口;和備用RNIC和端口(步驟1332)。對于將在主RNIC上重新同步的每個(gè)CQ,在使分配給該CQ的所有QP停頓之后,主機(jī)發(fā)出修改CQ動詞,使該CQ停頓并向該CQ分配RNIC狀態(tài)(主要的);主RNIC和端口;和備用RNIC和端口(步驟1334)。
對于將在主RNIC上重新同步的每個(gè)CQ,主機(jī)發(fā)出修改CQ動詞,使CQ恢復(fù)活動(步驟1336)。對于需要在主RNIC上重新同步的每個(gè)QP,主機(jī)發(fā)出修改QP動詞,使該QP恢復(fù)活動(步驟1338)。
參見圖13C,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明主RNIC和備用RNIC之間使用的例證檢查點(diǎn)消息的示意圖。根據(jù)圖11,主RNIC 1100和備用RNIC 1104使用檢查點(diǎn)消息1106傳遞RNIC和QP狀態(tài)。可直接通過互連主RNIC和備用RNIC的架構(gòu)傳遞檢查點(diǎn)消息。也可通過例如主RNIC和備用RNIC都可訪問的共享系統(tǒng)存儲區(qū),間接傳遞檢查點(diǎn)消息。
圖11表示通過互連主RNIC和備用RNIC的架構(gòu)直接發(fā)送檢查點(diǎn)消息的例證情況。所述架構(gòu)可以是局域網(wǎng),可通過一個(gè)或多個(gè)TCP連接發(fā)送所述消息。架構(gòu)也可是存儲變換的I/O擴(kuò)展網(wǎng)絡(luò),例如PCI、PCI-X或PCI-Express。最后,所述架構(gòu)可以是系統(tǒng)區(qū)域網(wǎng),例如InfiniBand。圖11表示架構(gòu)是局域網(wǎng)的例證情況。
圖13C表示所有檢查點(diǎn)消息,例如檢查點(diǎn)消息1340之間的公共字段。所有檢查點(diǎn)消息的第一字段是操作碼,例如OpCode 1344,它描述包括在該消息中的檢查點(diǎn)信息的類型。該消息的下一字段是長度,例如長度1348,它用字節(jié)描述消息長度。該消息的最后字段是公知的iSCSI,32位循環(huán)冗余校驗(yàn)(CRC32),例如CRC32 1352,被用于驗(yàn)證消息。每個(gè)消息定義在長度1348和CRC32 1352之間攜帶的字段。OpCode和長度字段的大小可以小于或大于所描述的OpCode和長度字段的大小。使用的CRC多項(xiàng)式可不同于圖解說明的那個(gè)CRC多項(xiàng)式。
下表定義檢查點(diǎn)進(jìn)程使用的消息類型,接下來的部分描述檢查點(diǎn)進(jìn)程,包括檢查點(diǎn)消息的內(nèi)容。每個(gè)OpCode和長度的值可不同于下表中所示的值,而不脫離本發(fā)明的精神。
參見圖14,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明兩個(gè)RNIC使用的例證發(fā)送檢查點(diǎn)消息流和進(jìn)程的示意圖。RNIC通過使用QP WQE處理算法,尋找與出站TCP段相聯(lián)系的QP語境。下面是用于對從QP語境1412的SQ 1408發(fā)送的出站TCP段設(shè)置檢查點(diǎn)的檢查點(diǎn)消息流。
假定SQ 1408具有準(zhǔn)備用于出站調(diào)度的TCP段。主RNIC 1404更新它的工作SQ S/S語境1224的本地副本的下述四個(gè)字段
11負(fù)型液晶(negative type liquid crystal),Merck,德國12手性化合物,Merck,德國13負(fù)型液晶,Merck,德國將組合物填充到擁有兩片玻璃基片的單元中,在玻璃基片的內(nèi)表面上涂覆有氧化銦錫。(在實(shí)施例5I中,采用聚酰亞胺處理導(dǎo)電的ITO層)。玻璃基片被20微米的隔離物分開。施加50-80伏特的電場(方波波形或正弦波波形)約1秒以驅(qū)動面板。采用60Hz的頻率使單元轉(zhuǎn)換到散射狀態(tài)。需要高于閾值頻率的頻率使單元轉(zhuǎn)換到光學(xué)透明狀<p>在本地QP語境中更新了上述四個(gè)字段之后,備用RNIC 1480把更新提交SQ S/S語境發(fā)送消息1424發(fā)送給主RNIC 1404。OpCode1454被設(shè)置成x0003,更新提交SQ S/S語境發(fā)送消息1424。長度被設(shè)置成x0004,即,更新提交SQ S/S語境發(fā)送消息的長度。該長度之后的五個(gè)字段被如下設(shè)置
主RNIC 1404接收更新提交SQ S/S語境發(fā)送消息1424,并驗(yàn)證該消息。如果提交SQ S/S語境發(fā)送消息1424有效,例如CRC32有效,那么主RNIC 1404用提交SQ S/S語境消息1424的內(nèi)容更新它的提交SQ S/S語境的本地副本。即,它更新其提交SQ S/S語境1228的下述四個(gè)字段
SQ 1408把TCP段放入出站調(diào)度器中,下一次發(fā)送來自SQ 1408的TCP段時(shí),調(diào)度器發(fā)送1400 TCP段。
如果更新提交SQ S/S語境發(fā)送消息1424無效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒有收到它,那么主RNIC 1404將重發(fā)更新提交SQ S/S語境發(fā)送消息1424,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1480收到重復(fù)的更新工作SQ S/S語境發(fā)送消息1416,那么它將重發(fā)在前的更新提交SQ S/S語境發(fā)送消息1424。此時(shí),出站發(fā)送已被設(shè)置檢查點(diǎn)。
現(xiàn)在,說明當(dāng)TCP ACK段被主RNIC 1404接收,并且與QP語境1412的SQ 1408相聯(lián)系時(shí),使用的檢查點(diǎn)消息。首先,在中速匹配緩沖區(qū)中接收輸入的TCP ACK段。如果TCP ACK段無效,那么丟棄它。如果TCP ACK段有效,那么主RNIC 1404更新它的工作SQS/S語境1224的本地副本的下述四個(gè)字段。
在本地QP語境中更新了上述四個(gè)字段之后,主RNIC 1404向備用RNIC 1480發(fā)送更新工作SQ S/S語境Ack消息1432。OpCode 1454被設(shè)置成x0004,即,更新工作SQ S/S語境Ack消息1432。長度被設(shè)置成x0004,即,更新工作SQ S/S語境Ack消息的長度。該長度之后的五個(gè)字段被如下設(shè)置
備用RNIC 1480接收更新工作SQ S/S語境Ack消息1432并驗(yàn)證該消息。如果工作SQ S/S語境消息1416有效,例如CRC32有效,那么備用RNIC 1480利用工作SQ S/S語境Ack消息1432的內(nèi)容更新它的工作SQ S/S語境1224的本地副本。備用RNIC 1480上工作SQ S/S語境1224的本地副本的更新將更新工作SQ S/S語境1224的下述四個(gè)字段
備用RNIC 1480隨后把它的工作SQ S/S語境1224的本地副本復(fù)制到它的提交SQ S/S語境1228的本地副本。在備用RNIC 1480上,提交SQ S/S語境1228的下述四個(gè)字段被更新
在本地QP語境中更新了上述四個(gè)字段之后,備用RNIC 1480向主RNIC 1404發(fā)送更新提交SQ S/S語境Ack消息1436。OpCode1454被設(shè)置成x0005,即,更新提交SQ S/S語境Ack消息1436。長度被設(shè)置成x0004,即,更新提交SQ S/S語境Ack消息的長度。該長度之后的五個(gè)字段被如下設(shè)置
主RNIC 1404接收更新提交SQ S/S語境Ack消息1436并驗(yàn)證該消息。如果提交SQ S/S語境Ack消息1436有效,例如CRC32有效,那么主RNIC 1404利用提交SQ S/S語境Ack消息1436的內(nèi)容更新它的提交SQ S/S語境的本地副本。即,它更新其工作SQ S/S語境的下述四個(gè)字段
如果更新提交SQ S/S語境Ack消息1436無效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒有收到它,那么主RNIC 1404將重發(fā)更新提交SQ S/S語境Ack消息1436,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1480收到重復(fù)的更新工作SQ S/S語境Ack消息1432,那么它將重發(fā)在前的更新提交SQ S/S語境Ack消息1436。此時(shí),輸入的Ack已被設(shè)置檢查點(diǎn)。
參見圖15,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明由兩個(gè)RNIC使用的例證接收檢查點(diǎn)消息流和進(jìn)程的示意圖。RNIC通過使用公知的TCP/IP五倍查尋算法,尋找與入站TCP段相聯(lián)系的QP語境。當(dāng)收到入站TCP段時(shí),使用TCP/IP五倍查尋來確定與入站TCP段相聯(lián)系的QP。
下面是當(dāng)入站TCP段以QP語境1512的RQ 1508為目標(biāo)時(shí),使用的例證檢查點(diǎn)消息流。在中速匹配緩沖區(qū)中接收入站TCP段。如果TCP段有效,那么它被放入最終的目的地;否則它被丟棄。
在TCP段被置入其最終目的地之后,主RNIC 1504更新它的工作RQ S/S語境1232的本地副本的下述四個(gè)字段
在本地QP語境中更新了上述四個(gè)字段之后,主RNIC 1504向備用RNIC 1580發(fā)送更新工作RQ S/S語境接收消息1516。OpCode15454被設(shè)置成x0006,即,更新工作RQ S/S語境接收消息1516。長度被設(shè)置成x0004,即,更新工作RQ S/S語境接收消息的長度。該長度之后的五個(gè)字段被如下設(shè)置
備用RNIC 1580接收更新工作RQ S/S語境接收消息1516,并驗(yàn)證該消息。如果更新工作RQ S/S語境接收消息1516有效,例如CRC321562有效,那么備用RNIC 1580用更新工作RQ S/S語境接收消息1516的內(nèi)容更新它的工作RQ S/S語境1232的本地副本。備用RNIC1580上的工作SQ S/S語境1232的本地副本的更新將更新工作SQ S/S語境1232的下述四個(gè)字段
備用RNIC 1580隨后把它的工作RQ S/S語境1232的本地副本復(fù)制到它的提交RQ S/S語境1236的本地副本。在備用RNIC 1580上,提交RQ S/S語境1236的下述四個(gè)字段被更新
在本地QP語境中更新了上述四個(gè)字段之后,備用RNIC 1580把更新提交SQ S/S語境接收消息1524發(fā)送給主RNIC 1504。OpCode1554被設(shè)置成x0007,即,更新提交RQ S/S語境接收消息1524。長度被設(shè)置成x0004,即,更新提交RQ S/S語境接收消息的長度。該長度之后的五個(gè)字段被如下設(shè)置
主RNIC 1504接收更新提交RQ S/S語境接收消息1524,并驗(yàn)證該消息。如果提交RQ S/S語境接收消息1424有效,例如CRC32有效,那么主RNIC 1404用提交RQ S/S語境接收消息1524的內(nèi)容更新它的提交RQ S/S語境1236的本地副本。即,它更新其提交RQ S/S語境1236的下述四個(gè)字段
如果更新提交RQ S/S語境接收消息1524無效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒有收到它,那么主RNIC 1504將重發(fā)更新提交RQ S/S語境接收消息1524,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1580收到重復(fù)的更新工作RQ S/S語境接收消息1516,那么它將重發(fā)在前的更新提交RQ S/S語境接收消息1524。此時(shí),入站發(fā)送已被設(shè)置檢查點(diǎn)。
下面說明當(dāng)TCP ACK段從主RNIC 1504發(fā)送,并且與QP語境1512的RQ 1508相聯(lián)系時(shí),使用的例證檢查點(diǎn)消息。主RNIC 1504更新它的工作RQ S/S語境1232的本地副本的下述四個(gè)字段。
在本地QP語境中更新了上述四個(gè)字段之后,主RNIC 1504向備用RNIC 1580發(fā)送更新工作RQ S/S語境Ack消息1532。OpCode 1554被設(shè)置成x0008,即,更新工作RQ S/S語境Ack消息1532。長度被設(shè)置成x0004,即,更新工作RQ S/S語境Ack消息的長度。該長度之后的五個(gè)字段被如下設(shè)置
備用RNIC 1580接收更新工作RQ S/S語境Ack消息1532并驗(yàn)證該消息。如果工作RQ S/S語境Ack消息1532有效,例如CRC32有效,那么備用RNIC 1580利用工作RQ S/S語境Ack消息1532的
所有工作SQ切換/切回字段包含還未由備用RNIC通過檢查點(diǎn)ACK設(shè)置檢查點(diǎn)(checkpointed)的信息。主RNIC和備用RNIC包含所有這些字段。“工作的當(dāng)前發(fā)送WQE號”識別發(fā)送隊(duì)列中目前正被處理的WQE。“當(dāng)前發(fā)送WQE中的工作字節(jié)偏移量”識別對于工作的當(dāng)前發(fā)送WQE要處理的下一字節(jié)?!跋乱话l(fā)送TCP段的工作序列號”識別將用于當(dāng)前發(fā)送WQE中的工作字節(jié)偏移量的TCP序列號?!跋乱话l(fā)送TCP段的工作窗口值”識別從當(dāng)前發(fā)送WQE中的工作字節(jié)偏移量開始的,可用于要發(fā)送的下一TCP段的TCP窗口的大小?!肮ぷ鞯漠?dāng)前接收Ack WQE號”識別已由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的,發(fā)送隊(duì)列中目前正被處理的WQE?!爱?dāng)前接收Ack WQE中的工作字節(jié)偏移量”識別對于工作的當(dāng)前接收ACK WQE,要由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)?!跋乱籖cv Ack TCP段的工作序列號”識別遠(yuǎn)程節(jié)點(diǎn)預(yù)期的,并且與當(dāng)前接收Ack WQE中的工作字節(jié)偏移量相聯(lián)系的下一TCP序列號?!跋乱籖cv Ack TCP段的工作窗口值”識別由從遠(yuǎn)程節(jié)點(diǎn)回送的最后的TCP窗口大小得到的,并且與當(dāng)前接收Ack WQE中的工作字節(jié)偏移量相聯(lián)系的發(fā)送窗口中的變化。
提交的SQ切換/切回語境1228包含當(dāng)產(chǎn)生QP時(shí),被設(shè)置為0的下述信息
如果更新提交RQ S/S語境Ack消息1536無效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒有收到它,那么主RNIC 1504將重發(fā)更新提交RQS/S語境Ack消息1536,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1580收到重復(fù)的更新工作RQ S/S語境Ack消息1532,那么它將重發(fā)在前的更新提交RQ S/S語境Ack消息1536。此時(shí),出站Ack已被設(shè)置檢查點(diǎn)。
參見圖16,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明由兩個(gè)RNIC使用的例證完成檢查點(diǎn)工作流和進(jìn)程的示意圖。RNIC通過利用公知的QP WQE處理算法尋找與已完成的工作隊(duì)列元素相聯(lián)系的CQ語境,并利用公知的CQ CQE處理算法產(chǎn)生CQE。
下面是用于由RNIC 1604對加入暴露給主機(jī)的CQ 1608中的完成隊(duì)列元素設(shè)置檢查點(diǎn)的檢查點(diǎn)消息流。假定CQ 1608具有準(zhǔn)備插入CQ 1608的CQE。CQ 1608把該CQE插入CQ 1608,并更新它的工作CQ S/S語境1272的本地副本的下述字段。
在本地CQ語境中更新了上述字段之后,主RNIC 1604把更新工作CQ S/S語境消息1616發(fā)送給備用RNIC 1680。OpCode 1654被設(shè)置成x000A,即,更新工作CQ S/S語境消息1616。長度被設(shè)置成x0004,即,更新工作CQ S/S語境消息的長度。該長度之后的兩個(gè)字段被如下設(shè)置
備用RNIC 1680接收更新工作CQ S/S語境消息1616,并驗(yàn)證該消息。如果更新工作CQ S/S語境消息1616有效,例如CRC32 1662有效,那么備用RNIC 1680用工作CQ S/S語境消息1516的內(nèi)容更新它的工作CQ S/S語境1272的本地副本。備用RNIC 1680上工作CQS/S語境1272的本地副本的更新會更新工作CQ S/S語境1272的下述字段
備用RNIC 1680隨后把它的工作CQ S/S語境1624的本地副本復(fù)制到它的提交CQ S/S語境1276的本地副本。提交CQ S/S語境1276的下述字段在備用RNIC 1680上被更新
在本地QP語境中更新了上述字段之后,備用RNIC 1680把更新提交CQ S/S語境消息1624發(fā)送給主RNIC 1604。OpCode 1654被設(shè)置成x000B,即,更新提交CQ S/S語境消息1624。長度被設(shè)置成x0004,即,更新提交CQ S/S語境消息的長度。該長度之后的兩個(gè)字段被如下設(shè)置
主RNIC 1604接收更新提交CQ S/S語境消息1624并驗(yàn)證該消息。如果提交CQ S/S語境消息1624有效,例如CRC32有效,那么主RNIC 1604用提交CQ S/S語境消息1624的內(nèi)容更新它的提交CQS/S語境1276的本地副本。即,它更新其的提交CQ S/S語境1276的下述字段
如果更新提交CQ S/S語境消息1624無效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒有收到它,那么主RNIC 1604將重發(fā)更新提交CQ S/S語境消息1624,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1680收到重復(fù)的更新工作CQ S/S語境消息1616,那么它將重發(fā)在前的更新提交CQ S/S語境消息1624。此時(shí),CQE已被設(shè)置檢查點(diǎn)。
參見圖17,圖17是根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說明由兩個(gè)RNIC使用的主RNIC到備用RNIC切換消息流和進(jìn)程的示意圖。主RNIC,例如主RNIC 1700,和備用RNIC,例如備用RNIC 1796每N個(gè)時(shí)間周期發(fā)出“I Am Alive”檢查點(diǎn)消息,例如“I Am AliVe”檢查點(diǎn)消息1704和1772,這里N是可通過詢問RNIC動詞詢問,并可通過修改RNIC動詞修改的可編程RNIC屬性。
下面是用于從主RNIC 1700切換到備用RNIC 1796的例證切換消息流。首先,備用RNIC 1796設(shè)置“I Am Alive”遞減計(jì)時(shí)器。如果在“I Am Alive”遞減計(jì)時(shí)器期滿之前,備用RNIC 1796收到“I AmAlive”消息1704,那么該計(jì)時(shí)器被重置?!癐 Am Alive”消息使OpCode1754被設(shè)置成x0000,即,“I Am Alive”消息1704和1750。長度被設(shè)置成x0003,即,“I Am Alive”消息的長度。該長度之后的三個(gè)字段被如下設(shè)置
對于多端口RNIC,“I Am Alive”消息可被實(shí)現(xiàn)成傳送長度字段之后的數(shù)目可變的字段,例如下述字段(這里N是RNIC支持的端口的最大數(shù)目)
如果在“I Am Alive”遞減計(jì)時(shí)器期滿之前,備用RNIC 1796沒有收到“I Am Alive”消息,那么它通過向主機(jī)發(fā)送切換請求異步事件1708,啟動切換。主機(jī)接收切換請求異步事件1708,并嘗試通過詢問RNIC 1712訪問主RNIC 1700。主RNIC 1700返回詢問RNIC結(jié)果1716。
如果詢問RNIC 1712成功,并且詢問RNIC結(jié)果1716反映主RNIC 1700是全功能的,并且處于無錯(cuò)狀態(tài),那么主機(jī)將A)通過交換機(jī)管理協(xié)議,請求使備用RNIC 1796不能為它所連接的交換機(jī)訪問;B)通過發(fā)出修改RNIC 1776動詞,把備用RNIC 1796的LAN地址(例如以太網(wǎng)MAC地址)加入主RNIC 1700 LAN地址表;C)通過網(wǎng)絡(luò)地址改變協(xié)議(例如無償ARP回答),請求另外的LAN地址(即備用RNIC 1796先前使用的地址)被識別成主RNIC1700的地址之一;D)使用主RNIC 1700上的修改CQ 1790來改變CQC 1712的狀態(tài);E)通過把CQC 1712主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),主RNIC 1700使CQC 1712處于主狀態(tài);F)使用主RNIC 1700上的修改QP 1788來改變QPC 1716的狀態(tài);G)通過把QPC 1716主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),主RNIC 1700使QPC 1716處于主RTS狀態(tài)。
對利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有CQ進(jìn)行步驟D和E。可對修改CQ 1790進(jìn)行優(yōu)化,所述修改CQ 1790包含發(fā)布成修改一系列CQ的修改CQ集動詞,而不是發(fā)布成單獨(dú)的修改CQ動詞的修改CQ 1790。
對利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有QP進(jìn)行步驟F和G??蓪π薷腝P 1788進(jìn)行優(yōu)化,所述修改QP 1788涉及發(fā)布修改一系列QP的修改QP集動詞,而不是發(fā)送多個(gè)單獨(dú)的修改QP動詞。
如果詢問RNIC 1712失敗(例如主RNIC 1700未能返回詢問RNIC結(jié)果1716),或者如果詢問RNIC 1712成功,但是詢問RNIC結(jié)果1716錯(cuò)誤,或者反映主RNIC 1700處于出錯(cuò)狀態(tài),那么主機(jī)將A)通過發(fā)出修改RNIC 1720,把主RNIC 1700的LAN地址(例如以太網(wǎng)MAC地址)加入備用RNIC 1796 LAN地址表;B)通過公知的交換機(jī)管理協(xié)議,請求使主RNIC 1700不能為它所連接的交換機(jī)訪問;C)通過公知的網(wǎng)絡(luò)地址改變協(xié)議(例如無償ARP回答),請求另外的LAN地址(即主RNIC 1700先前使用的地址)被識別成備用RNIC 1796的地址之一;D)使用備用RNIC 1796上的修改CQ 1782來改變CQC 1724的狀態(tài);E)通過把CQC 1724主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),備用RNIC 1796使CQC 1824處于主狀態(tài);F)使用備用RNIC 1796上的修改QP 1780來改變QPC 1720的狀態(tài);G)通過把QPC 1720主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),備用RNIC 1796使QPC1720處于主RTS狀態(tài)。
對利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有CQ進(jìn)行步驟D和E??蓪π薷腃Q 1782進(jìn)行優(yōu)化,所述修改CQ 1782涉及發(fā)布成修改一系列CQ的修改CQ集動詞,而不是發(fā)布多個(gè)單獨(dú)的修改CQ動詞。
對利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有QP進(jìn)行步驟F和G。可對修改QP 1780進(jìn)行優(yōu)化,所述修改QP 1780涉及發(fā)布修改一系列QP的修改QP集動詞,而不是發(fā)布單獨(dú)的修改QP動詞。
現(xiàn)在參見圖18,提供了根據(jù)本發(fā)明的優(yōu)選實(shí)施例,圖解說明由兩個(gè)RNIC使用的例證備用RNIC禁用消息流和進(jìn)程的示意圖。圖18中一開始,QPC 1816是主QPC,QPC 1820是備用QPC。圖18中一開始,CQC 1812是主CQC,CQC 1824是備用CQC。
下面是用于禁用不是全操作的備用RNIC 1896的例證備用RNIC禁用消息流。首先,主RNIC 1800設(shè)置“I Am Alive”遞減計(jì)時(shí)器。如果在“I Am Alive”遞減計(jì)時(shí)器期滿之前,主RNIC 1700收到“I AmAlive”消息1804,那么計(jì)時(shí)器被重置。“I Am Alive”消息使OpCode1854被設(shè)置成x0000,即,“I Am Alive”消息1804和1850。長度被設(shè)置成x0003,即,“I Am Alive”消息的長度。該長度之后的三個(gè)字段被如下設(shè)置
對于多端口RNIC,“I Am Alive”消息可被實(shí)現(xiàn)成傳送長度字段之后的數(shù)目可變的字段,例如下述字段(這里N是RNIC支持的端口的最大數(shù)目)
如果在“I Am Alive”遞減計(jì)時(shí)器期滿之前,主RNIC 1800沒有收到“I Am Alive”消息1804,那么它通過向主機(jī)發(fā)送禁用備用RNIC異步事件1808,開始禁用備用RNIC。主機(jī)接收禁用備用RNIC異步事件1808,并嘗試通過詢問RNIC 1812訪問備用RNIC 1896。備用RNIC1896返回詢問RNIC結(jié)果1816。
如果詢問RNIC 1812成功,并且詢問RNIC結(jié)果1816反映備用RNIC 1896是全功能的,并且處于無錯(cuò)狀態(tài),那么主機(jī)將A)通過發(fā)出修改RNIC 1820,把主RNIC 1800的LAN地址(例如以太網(wǎng)MAC地址)加入備用RNIC 1896 LAN地址表;B)通過公知的交換機(jī)管理協(xié)議,請求使主RNIC 1800不能被它所連接的交換機(jī)訪問;C)通過公知的網(wǎng)絡(luò)地址改變協(xié)議(例如無償ARP回答),請求另外的LAN地址(即主RNIC 1800先前使用的地址)被識別成備用RNIC 1896的地址之一;D)使用備用RNIC 1896上的修改CQ 1882來改變CQC 1824的狀態(tài);E)通過把CQC 1824主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),備用RNIC 1896使CQC 1824處于主狀態(tài);F)使用備用RNIC 1896上的修改QP 1880來改變QPC 1820的狀態(tài);G)通過把QPC 1820主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),備用RNIC 1896使QPC1820處于主RTS狀態(tài)。對利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有CQ進(jìn)行步驟D和E??蓪π薷腃Q 1882進(jìn)行優(yōu)化,所述修改CQ 1882涉及發(fā)布修改一系列CQ的修改CQ集動詞,而不是發(fā)布多個(gè)單獨(dú)的修改CQ動詞。
對利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有QP進(jìn)行步驟F和G??蓪π薷腝P 1880進(jìn)行優(yōu)化,所述修改QP 1880涉及發(fā)布修改一系列QP的修改QP集動詞,而不是發(fā)布多個(gè)單獨(dú)的修改QP動詞。
如果詢問RNIC 1812失敗(例如備用RNIC 1896未能返回詢問RNIC結(jié)果1816),或者如果詢問RNIC 1812成功,但是詢問RNIC結(jié)果1816錯(cuò)誤,或者反映備用RNIC 1896處于出錯(cuò)狀態(tài),那么主機(jī)將
A)通過公知的交換機(jī)管理協(xié)議,請求使備用RNIC 1896不能為它所連接的交換機(jī)訪問;B)通過發(fā)出修改RNIC 1876,把備用RNIC 1896的LAN地址(例如以太網(wǎng)MAC地址)加入主RNIC 1800 LAN地址表;C)通過公知的網(wǎng)絡(luò)地址改變協(xié)議(例如無償ARP回答),請求另外的LAN地址(即備用RNIC 1896先前使用的地址)被識別成主RNIC 1800的地址之一;D)使用主RNIC 1800上的修改CQ 1890來改變CQC 1812的狀態(tài);E)通過把CQC 1812主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),主RNIC 1800使CQC 1812處于主狀態(tài);F)使用主RNIC 1800上的修改QP 1888來改變QPC 1816的狀態(tài);G)通過把QPC 1816主RNIC和備用RNIC標(biāo)識語境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),主RNIC 1800使QPC 1816處于主RTS狀態(tài)。
對利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有CQ進(jìn)行步驟D和E??蓪π薷腃Q 1890進(jìn)行優(yōu)化,所述修改CQ 1890涉及發(fā)布成修改一系列CQ的修改CQ集動詞,而不是發(fā)布多個(gè)單獨(dú)的修改CQ動詞。
對利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有QP進(jìn)行步驟F和G。可對修改QP 1888進(jìn)行優(yōu)化,所述修改QP 1888涉及發(fā)布修改一系列QP的修改QP集動詞,而不是發(fā)布多個(gè)單獨(dú)的修改QP動詞。
從而,借助本發(fā)明的實(shí)施例,提供RNIC切換和切回支持。當(dāng)在主RNIC上發(fā)生計(jì)劃或非計(jì)劃的停機(jī)時(shí),通過利用在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中提供的機(jī)構(gòu),所有未完成的連接被轉(zhuǎn)換到備用RNIC,備用RNIC繼續(xù)通信處理。
重要的是注意雖然在全功能數(shù)據(jù)處理系統(tǒng)的語境中描述了本發(fā)明,不過本領(lǐng)域的普通技術(shù)人員會認(rèn)識到能夠以指令的計(jì)算機(jī)可讀介質(zhì)的形式分布本發(fā)明的優(yōu)選實(shí)施例的進(jìn)程,并且本發(fā)明同樣適用,與實(shí)際用于進(jìn)行所述分布的信號承載介質(zhì)的特定類型無關(guān)。計(jì)算機(jī)可讀介質(zhì)的例子包括可記錄型介質(zhì),例如軟盤、硬盤驅(qū)動器、RAM、CD-ROM、DVD-ROM,和傳輸型介質(zhì),例如數(shù)字和模擬通信鏈路、利用諸如射頻和光波傳輸之類傳輸形式的有線或無線通信鏈路。計(jì)算機(jī)可讀介質(zhì)可采取編碼格式的形式,所述編碼格式被解碼,以便實(shí)際用在特定的數(shù)據(jù)處理系統(tǒng)中。
出于舉例說明的目的,已給出了本發(fā)明的說明,所述說明不是窮盡的,也不打算把本發(fā)明局限于所公開的形式。對于本領(lǐng)域的普通技術(shù)人員來說,許多修改和變化是明顯的。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)中的啟用了遠(yuǎn)程直接存儲器存取的主網(wǎng)絡(luò)接口控制器(主RNIC)和備用RNIC之間執(zhí)行切換的方法,包括產(chǎn)生用于主RNIC和備用RNIC的公共隊(duì)列對,以致主RNIC和備用RNIC共享所述公共隊(duì)列對;檢測切換事件;和響應(yīng)切換事件的檢測,把隊(duì)列對的處理從主RNIC切換到備用RNIC。
2.按照權(quán)利要求1所述的方法,其中產(chǎn)生公共隊(duì)列對包括向主RNIC和備用RNIC分配隊(duì)列范圍,以致主RNIC和備用RNIC共享該隊(duì)列范圍內(nèi)的隊(duì)列。
3.按照權(quán)利要求1或2所述的方法,其中產(chǎn)生公共隊(duì)列對包括把一系列存儲器轉(zhuǎn)換保護(hù)表?xiàng)l目分配給主RNIC和備用RNIC。
4.按照前述任意權(quán)利要求所述的方法,還包括產(chǎn)生用于主RNIC和備用RNIC的公共完成隊(duì)列,以致主RNIC和備用RNIC共享所述公共完成隊(duì)列;和如果檢測到切換事件,則把公共完成隊(duì)列的操作切換到備用RNIC。
5.按照前述任意權(quán)利要求所述的方法,其中把隊(duì)列對的處理從主RNIC切換到備用RNIC包括把主RNIC的地址添加到備用RNIC的地址表中;使主RNIC對與主RNIC和備用RNIC耦接的交換機(jī)是不可訪問的;和在交換機(jī)中,使主RNIC的地址可被識別成備用RNIC的地址。
6.按照前述任意權(quán)利要求所述的方法,其中把隊(duì)列對的處理從主RNIC切換到備用RNIC包括修改用于完成隊(duì)列語境的主RNIC和備用RNIC標(biāo)識語境信息,以致備用RNIC被識別成主RNIC;和修改隊(duì)列對語境的主RNIC和備用RNIC標(biāo)識語境信息,以致備用RNIC被識別成主RNIC。
7.按照權(quán)利要求6所述的方法,其中保持狀態(tài)信息包括保持主RNIC和備用RNIC標(biāo)識語境數(shù)據(jù)結(jié)構(gòu),所述主RNIC和備用RNIC標(biāo)識語境數(shù)據(jù)結(jié)構(gòu)包括RNIC切換狀態(tài),主RNIC標(biāo)識符,主RNIC端口標(biāo)識符,備用RNIC標(biāo)識符和備用RNIC端口標(biāo)識符中的至少之一。
8.按照權(quán)利要求6或7所述的方法,其中保持狀態(tài)信息包括保持具有用于主RNIC和備用RNIC的每個(gè)公共完成隊(duì)列的條目的完成隊(duì)列語境表。
9.一種計(jì)算機(jī)程序,它包括當(dāng)被裝入計(jì)算機(jī)系統(tǒng)并在計(jì)算機(jī)系統(tǒng)上執(zhí)行時(shí),使所述計(jì)算機(jī)執(zhí)行按照任意前述權(quán)利要求所述的方法的步驟的計(jì)算機(jī)程序代碼部件。
10.一種在具有主RNIC和備用RNIC的數(shù)據(jù)處理系統(tǒng)中發(fā)送數(shù)據(jù)段的設(shè)備,包括接收數(shù)據(jù)段的裝置;更新主RNIC中的工作發(fā)送隊(duì)列切換語境信息的裝置;把更新工作發(fā)送隊(duì)列切換語境檢查點(diǎn)消息發(fā)送給備用RNIC的裝置;從備用RNIC接收更新提交發(fā)送隊(duì)列切換語境檢查點(diǎn)消息的裝置;用更新提交發(fā)送隊(duì)列切換語境檢查點(diǎn)消息的內(nèi)容更新提交發(fā)送隊(duì)列切換語境的本地副本的裝置;和從發(fā)送隊(duì)列發(fā)送數(shù)據(jù)段的裝置。
全文摘要
提供一種支持RNIC(啟用了RDAM的NIC)切換和切回的方法、計(jì)算機(jī)程序產(chǎn)品和分布式數(shù)據(jù)處理系統(tǒng)。當(dāng)在主RNIC上發(fā)生計(jì)劃或非計(jì)劃的停機(jī)時(shí),通過利用本發(fā)明中提供的機(jī)構(gòu),所有未完成的連接被切換到備用RNIC,備用RNIC繼續(xù)通信處理。另外,利用本發(fā)明中提供的機(jī)構(gòu),連接也可被切換回來。
文檔編號H04L29/06GK1679003SQ03820988
公開日2005年10月5日 申請日期2003年8月5日 優(yōu)先權(quán)日2002年9月5日
發(fā)明者威廉·托德·伯伊德, 道格拉斯·約瑟夫, 邁克爾·安托尼·考, 雷納多·約翰·雷西奧 申請人:國際商業(yè)機(jī)器公司