国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      啟用遠(yuǎn)程直接存儲(chǔ)器存取的網(wǎng)絡(luò)接口控制器切換和切回支持的制作方法

      文檔序號(hào):7867695閱讀:315來(lái)源:國(guó)知局
      專利名稱:?jiǎn)⒂眠h(yuǎn)程直接存儲(chǔ)器存取的網(wǎng)絡(luò)接口控制器切換和切回支持的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及主計(jì)算機(jī)和輸入/輸出(I/O)設(shè)備之間的通信協(xié)議。更具體地說(shuō),本發(fā)明提供一種方法,借助該方法,啟用了遠(yuǎn)程直接存儲(chǔ)器存取(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é)議,高級(jí)協(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ù)。未來(lái),流控制傳輸協(xié)議(SCTP)也將被用于提供可靠服務(wù)。在設(shè)備或計(jì)算機(jī)上執(zhí)行的進(jìn)程通過(guò)高級(jí)協(xié)議,例如套接字、iSCSI和直接存取文件系統(tǒng)(DAFS)訪問(wèn)IP網(wǎng)絡(luò)。不幸的是,TCP/IP軟件占用相當(dāng)數(shù)量的處理器和存儲(chǔ)器資源。在文獻(xiàn)(參見(jià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)中已廣泛論及該問(wèn)題。未來(lái),由于幾個(gè)原因,網(wǎng)絡(luò)堆棧將繼續(xù)占用過(guò)多的資源,包括應(yīng)用對(duì)連網(wǎng)的越來(lái)越多的使用;網(wǎng)絡(luò)安全協(xié)議的使用;和底層架構(gòu)帶寬以高于微處理器和存儲(chǔ)器帶寬的速度不斷增大。為了解決該問(wèn)題,該行業(yè)正在把網(wǎng)絡(luò)堆棧處理卸載(offload)給啟用了RDMA的NIC(RNIC)。
      本行業(yè)中正在采取的卸載方法有兩種。第一種方法使用現(xiàn)有的TCP/IP網(wǎng)絡(luò)堆棧,而不增加任何另外的協(xié)議。這種方法能夠把TCP/IP推給硬件,但是不幸的是不能消除對(duì)接收方副本的需要。如同在上面的論文中所述,副本是對(duì)CPU利用率的最大組成因素之一。為了消除對(duì)副本的需要,本行業(yè)正在尋求第二種方法,所述第二種方法由在TCP和SCTP協(xié)議上增加成幀、直接數(shù)據(jù)布置(DDP)和遠(yuǎn)程直接存儲(chǔ)器存取(RDMA)組成。支持這兩種方法所需的啟用了RDMA的NIC(RNIC)類似,關(guān)鍵區(qū)別在于在第二種方法中,硬件必須支持另外的協(xié)議。
      RNIC提供可由套接字、iSCSI和DAFS用于在節(jié)點(diǎn)之間通信的消息傳送機(jī)構(gòu)。在主計(jì)算機(jī)或設(shè)備上執(zhí)行的進(jìn)程通過(guò)在RNIC上公布發(fā)送/接收工作隊(duì)列的發(fā)送/接收消息,訪問(wèn)IP網(wǎng)絡(luò)。這些進(jìn)程也被稱為“消費(fèi)者”。
      發(fā)送/接收工作隊(duì)列(WQ)作為隊(duì)列對(duì)(QP)被分配給消費(fèi)者。可通過(guò)幾種不同的傳送類型傳統(tǒng)的TCP、RDAM TCP、UDP或SCTP發(fā)送消息。通過(guò)RNIC發(fā)送和接收工作完成(WC)隊(duì)列,消費(fèi)者從完成隊(duì)列(CQ)取回這些消息的結(jié)果。源RNIC負(fù)責(zé)把出站消息分段,并把它們發(fā)送給目的地。目的地RNIC負(fù)責(zé)重新裝配入站消息,并把它們放入由目的地的消費(fèi)者指定的存儲(chǔ)空間中。這些消費(fèi)者使用RNIC動(dòng)詞(verb)來(lái)訪問(wèn)RNIC支持的功能。解釋動(dòng)詞并直接訪問(wèn)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ī)本地存儲(chǔ)器中。把所有狀態(tài)信息保持在主機(jī)本地存儲(chǔ)器中允許主機(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。通過(guò)把這些層轉(zhuǎn)移到RNIC,主機(jī)軟件不再能夠利用目前的機(jī)構(gòu)支持切換和切回。于是,需要一種簡(jiǎn)單的機(jī)構(gòu)來(lái)允許RNIC支持可靠的傳送(例如TCP)連接的切換和切回,并且由于計(jì)劃或非計(jì)劃的RNIC停機(jī)的結(jié)果,允許通信繼續(xù)進(jìn)行。

      發(fā)明內(nèi)容
      因此,在第一方面,本發(fā)明提供一種在數(shù)據(jù)處理系統(tǒng)中的啟用了遠(yuǎn)程直接存儲(chǔ)器存取的主網(wǎng)絡(luò)接口控制器(RNIC)和備用RNIC之間執(zhí)行切換(switchover)的方法,包括產(chǎn)生用于主RNIC和備用RNIC的公共隊(duì)列對(duì),以致主RNIC和備用RNIC共享所述公共隊(duì)列對(duì);檢測(cè)切換事件;響應(yīng)切換事件的檢測(cè),把隊(duì)列對(duì)的處理從主RNIC切換到備用RNIC。
      最好,產(chǎn)生公共隊(duì)列對(duì)包括向主RNIC和備用RNIC分配隊(duì)列范圍,以致主RNIC和備用RNIC共享該隊(duì)列范圍內(nèi)的隊(duì)列。
      最好,所述隊(duì)列范圍包括一系列隊(duì)列對(duì)和一系列完成隊(duì)列。
      最好,產(chǎn)生公共隊(duì)列對(duì)包括把一系列存儲(chǔ)器轉(zhuǎn)換保護(hù)表?xiàng)l目分配給主RNIC和備用RNIC。
      所述方法最好包括產(chǎn)生用于主RNIC和備用RNIC的公共完成隊(duì)列,以致主RNIC和備用RNIC共享所述公共完成隊(duì)列;如果檢測(cè)到切換事件,那么把公共完成隊(duì)列的操作切換到備用RNIC。
      最好,主RNIC和備用RNIC通過(guò)架構(gòu)(fabric)和共享的系統(tǒng)存儲(chǔ)器之一,相互發(fā)送檢查點(diǎn)消息。
      最好,所述架構(gòu)是局域網(wǎng)、廣域網(wǎng)、存儲(chǔ)映射I/O擴(kuò)展網(wǎng)絡(luò)和系統(tǒng)區(qū)域網(wǎng)之一。
      最好,檢查點(diǎn)消息包括操作碼字段、長(zhǎng)度字段和驗(yàn)證(validation)字段。
      最好,操作碼把檢查點(diǎn)消息的類型識(shí)別成活動(dòng)消息,更新工作發(fā)送隊(duì)列切換發(fā)送語(yǔ)境(context),更新提交(committed)發(fā)送隊(duì)列切換發(fā)送語(yǔ)境,更新工作發(fā)送隊(duì)列切換確認(rèn)語(yǔ)境,更新提交發(fā)送隊(duì)列切換確認(rèn)語(yǔ)境,更新工作接收隊(duì)列切換接收語(yǔ)境,更新提交接收隊(duì)列切換接收語(yǔ)境,更新工作接收隊(duì)列切換確認(rèn)語(yǔ)境,更新提交接收隊(duì)列切換確認(rèn)語(yǔ)境,更新工作完成隊(duì)列切換語(yǔ)境,和更新提交完成隊(duì)列切換語(yǔ)境之一。
      最好,切換事件是在備用RNIC中在預(yù)定時(shí)間內(nèi)沒(méi)有收到來(lái)自主RNIC的檢查點(diǎn)消息。
      最好,把隊(duì)列對(duì)的處理從主RNIC切換到備用RNIC包括把主RNIC的地址添加到備用RNIC的地址表中;使主RNIC對(duì)與主RNIC和備用RNIC耦接的交換機(jī)是不可訪問(wèn)的;在交換機(jī)中,使主RNIC的地址可被識(shí)別成備用RNIC的地址。
      最好,把隊(duì)列對(duì)的處理從主RNIC切換到備用RNIC包括修改用于完成隊(duì)列語(yǔ)境的主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境信息,以致備用RNIC被識(shí)別成主RNIC;修改隊(duì)列對(duì)語(yǔ)境的主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境信息,以致備用RNIC被識(shí)別成主RNIC。
      該方法最好還包括保持主RNIC和備用RNIC內(nèi)的狀態(tài)信息,所述狀態(tài)信息識(shí)別隊(duì)列的切換狀態(tài)。
      最好,保持狀態(tài)信息包括保持主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境數(shù)據(jù)結(jié)構(gòu),所述主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境數(shù)據(jù)結(jié)構(gòu)包括RNIC切換狀態(tài),主RNIC標(biāo)識(shí)符,主RNIC端口標(biāo)識(shí)符,備用RNIC標(biāo)識(shí)符和備用RNIC端口標(biāo)識(shí)符中的至少之一。
      最好,保持狀態(tài)信息包括保持具有用于主RNIC和備用RNIC的每個(gè)公共完成隊(duì)列的條目的完成隊(duì)列語(yǔ)境表。
      本發(fā)明最好提供一種在具有主RNIC和備用RNIC的數(shù)據(jù)處理系統(tǒng)中發(fā)送數(shù)據(jù)段(data segment)的方法,包括接收數(shù)據(jù)段;更新主RNIC中的工作發(fā)送隊(duì)列切換語(yǔ)境信息;把更新工作發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息發(fā)送給備用RNIC;從備用RNIC接收更新提交發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息;用更新提交發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息的內(nèi)容更新提交發(fā)送隊(duì)列切換語(yǔ)境的本地副本;和從發(fā)送隊(duì)列發(fā)送數(shù)據(jù)段。
      最好,備用RNIC用更新工作發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息的內(nèi)容更新本地的工作發(fā)送隊(duì)列切換語(yǔ)境;并把工作發(fā)送隊(duì)列切換語(yǔ)境復(fù)制到提交發(fā)送隊(duì)列切換語(yǔ)境。
      在第二方面,本發(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)選特征的方法步驟對(duì)應(yīng)的步驟的程序代碼部件。
      在第三方面,本發(fā)明提供一種在具有主RNIC和備用RNIC的數(shù)據(jù)處理系統(tǒng)中發(fā)送數(shù)據(jù)段的設(shè)備,包括接收數(shù)據(jù)段的裝置;更新主RNIC中的工作發(fā)送隊(duì)列切換語(yǔ)境信息的裝置;把更新工作發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息發(fā)送給備用RNIC的裝置;從備用RNIC接收更新提交發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息的裝置;用更新提交發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息的內(nèi)容更新提交發(fā)送隊(duì)列切換語(yǔ)境的本地副本的裝置;和從發(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ì)列對(duì)來(lái)傳送和接收消息。端節(jié)點(diǎn)最好把消息分成多段,并通過(guò)鏈路傳送所述各段。交換機(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í),通過(guò)利用所提供的優(yōu)選機(jī)構(gòu),所有未完成的(outstanding)連接被切換到備用RNIC,備用RNIC繼續(xù)通信處理。另外,利用在本發(fā)明的優(yōu)選實(shí)施例中提供的機(jī)構(gòu),連接也可被切換回來(lái)。


      下面參考附圖,舉例說(shuō)明本發(fā)明的優(yōu)選實(shí)施例,其中圖1圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng);圖2是根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的主處理器節(jié)點(diǎn)的功能方框圖;圖3A圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的IP組卸載引擎;圖3B圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的交換機(jī);圖3C圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的路由器;圖4圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的工作請(qǐng)求的處理;圖5圖解說(shuō)明根據(jù)本發(fā)明的其中使用TCP或SCTP傳送的優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng)的一部分;圖6圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的數(shù)據(jù)幀;圖7圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的分布式計(jì)算機(jī)系統(tǒng)的一部分,以舉例說(shuō)明例證的請(qǐng)求和確認(rèn)事務(wù);圖8圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,在分布式連網(wǎng)系統(tǒng)中使用的網(wǎng)絡(luò)尋址;圖9圖解說(shuō)明本發(fā)明的一個(gè)優(yōu)選實(shí)施例中,包含子網(wǎng)的分布式計(jì)算機(jī)系統(tǒng)的一部分;圖10圖解說(shuō)明在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中使用的分層通信體系結(jié)構(gòu);圖11是圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例的對(duì)于主機(jī)軟件的RNIC接口的示意圖;圖12是圖解說(shuō)明根據(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是圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,在主RNIC和備用RNIC之間使用的檢查點(diǎn)消息的例證示意圖;圖14是圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的發(fā)送檢查點(diǎn)消息流程和進(jìn)程的例證示意圖;圖15是圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的接收檢查點(diǎn)消息流程和進(jìn)程的例證示意圖;圖16是圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的完成檢查點(diǎn)消息流程和進(jìn)程的例證示意圖;圖17是圖解說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,兩個(gè)RNIC使用的主RNIC到備用RNIC切換消息流程和進(jìn)程的例證示意圖;圖18是圖解說(shuō)明根據(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ì)列對(duì)來(lái)傳送和接收消息。端節(jié)點(diǎn)把消息分割成幀,并通過(guò)鏈路傳送幀。交換機(jī)和路由器互連端節(jié)點(diǎn),并把幀發(fā)送給恰當(dāng)?shù)亩斯?jié)點(diǎn)。位于目的地的端節(jié)點(diǎn)把幀重新裝配成消息。
      現(xiàn)在參考附圖,尤其參考圖1,圖1根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明了分布式計(jì)算機(jī)系統(tǒng)。圖1中表示的分布式計(jì)算機(jī)系統(tǒng)采取因特網(wǎng)協(xié)議網(wǎng)絡(luò)(IP網(wǎng)),例如IP網(wǎng)100的形成,并且只是用于舉例說(shuō)明,下面描述的本發(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è)處理器,以及成千上萬(wàn)個(gè)I/O適配器的大型并行超級(jí)系統(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ú)立磁盤(pán)冗余陣列(RAID)子系統(tǒng)節(jié)點(diǎn)106的形式的節(jié)點(diǎn)。圖1中圖解說(shuō)明的節(jié)點(diǎn)只是用于舉例說(shuō)明的目的,因?yàn)镮P網(wǎng)100能夠連接任意數(shù)目和任意類型的獨(dú)立處理器節(jié)點(diǎn),存儲(chǔ)器節(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)幀通過(guò)IP網(wǎng)100的控制和路由信息。報(bào)尾一般包含確保不會(huì)傳送內(nèi)容受到破壞的幀的控制和循環(huán)冗余校驗(yàn)(CRC)數(shù)據(jù)。
      在分布式計(jì)算機(jī)系統(tǒng)內(nèi),IP網(wǎng)100包含支持各種形式的通信,例如存儲(chǔ),進(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)能夠通過(guò)多個(gè)端口通信,并且能夠利用通過(guò)IP網(wǎng)架構(gòu)的多個(gè)路徑。圖1中所示的多個(gè)端口和通過(guò)IP網(wǎng)的多個(gè)路徑可被用于容錯(cuò)和增加帶寬數(shù)據(jù)傳送。通過(guò)控制臺(tái)110能夠訪問(wèn)交換通信架構(gòu)116中的組件,以便進(jìn)行管理和維護(hù)。
      圖1中的IP網(wǎng)100包括交換機(jī)112、交換機(jī)114和路由器117。交換機(jī)是一種把多個(gè)鏈路連接在一起,并通過(guò)利用2層目的地地址字段,允許幀的從一個(gè)鏈路到另一鏈路的路由的設(shè)備。當(dāng)以太網(wǎng)被用作鏈路時(shí),目的地字段被稱為媒體訪問(wèn)控制(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)鏈路包括(但不限于)銅纜,光纜,和底板及印刷電路板上的印刷電路銅跡線。
      對(duì)于可靠的服務(wù)類型(TCP和SCTP),諸如主處理器端節(jié)點(diǎn)和I/O適配器端節(jié)點(diǎn)之類的端節(jié)點(diǎn)產(chǎn)生請(qǐng)求幀并返回確認(rèn)幀。交換機(jī)和路由器把幀從來(lái)源傳遞到目的地。
      在如圖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是對(duì)在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還包括通過(guò)總線系統(tǒng)134互連的中央處理器126-130和存儲(chǔ)器132。主處理器節(jié)點(diǎn)104類似地包括由總線系統(tǒng)144互連的中央處理器136-140和存儲(chǔ)器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)還允許通過(guò)交換網(wǎng)絡(luò)的多個(gè)同時(shí)發(fā)生的通信,而不需要與傳遞協(xié)議相關(guān)的傳統(tǒng)開(kāi)銷。在一個(gè)實(shí)施例中,圖1中的IPSOE和IP網(wǎng)100向分布式計(jì)算機(jī)系統(tǒng)的消費(fèi)者提供零處理器復(fù)制數(shù)據(jù)傳送,而不涉及操作系統(tǒng)內(nèi)核進(jìn)程,并采用硬件來(lái)提供可靠的容錯(cuò)通信。
      如圖1中所示,路由器17與連接其它主機(jī)或其它路由器的廣域網(wǎng)(WAN)和/或局域網(wǎng)(LAN)耦接。
      在該例子中,圖1中的RAID子系統(tǒng)106包括處理器168、存儲(chǔ)器170、IP組卸載引擎(IPSOE)172和多個(gè)冗余和/或多個(gè)條形存儲(chǔ)磁盤(pán)單元174。
      IP網(wǎng)100處理關(guān)于存儲(chǔ)、處理器間通信、文件存取和套接字的數(shù)據(jù)通信。IP網(wǎng)100支持高帶寬、可縮放并且等待時(shí)間極低的通信。用戶客戶機(jī)能夠繞過(guò)操作系統(tǒng)內(nèi)核進(jìn)程,直接訪問(wèn)允許高效的消息傳送協(xié)議的網(wǎng)絡(luò)通信組件,例如IPSOE。IP網(wǎng)100適合于當(dāng)前的計(jì)算模型,并且是用于新形式的存儲(chǔ),群集和常規(guī)連網(wǎng)通信的積木式部件。此外,圖1中的IP網(wǎng)100允許存儲(chǔ)器節(jié)點(diǎn)在它們之間通信,或者與分布式計(jì)算機(jī)系統(tǒng)中的任意或者全部處理器節(jié)點(diǎn)通信。就連接在IP網(wǎng)100上的存儲(chǔ)器來(lái)說(shuō),存儲(chǔ)器節(jié)點(diǎn)具有和IP網(wǎng)100中的任意主處理器節(jié)點(diǎn)相同的通信能力。
      在一個(gè)實(shí)施例中,圖1中所示的IP網(wǎng)100支持通道語(yǔ)義(semantics)和存儲(chǔ)器語(yǔ)義。通道語(yǔ)義有時(shí)被稱為發(fā)送/接收或推送通信操作。通信語(yǔ)義是在其中源設(shè)備推送數(shù)據(jù),目的地設(shè)備確定數(shù)據(jù)的最終目的地的傳統(tǒng)I/O通道中采用的那種通信。在通道語(yǔ)義中,從源進(jìn)程傳送的幀指定目的地進(jìn)程的通信端口,但是不指定該幀將被寫(xiě)入目的地進(jìn)程的存儲(chǔ)空間中的何處。從而在通道語(yǔ)義中,目的地進(jìn)程預(yù)先分配放置傳送的數(shù)據(jù)的地方。
      在存儲(chǔ)器語(yǔ)義中,源進(jìn)程直接讀取或?qū)懭脒h(yuǎn)程節(jié)點(diǎn)目的地進(jìn)程的虛擬地址空間。遠(yuǎn)程目的地進(jìn)程只需要傳遞用于數(shù)據(jù)的緩沖器的位置,并不需要卷入任何數(shù)據(jù)的傳送中。從而,在存儲(chǔ)器語(yǔ)義中,源進(jìn)程發(fā)送包含目的地進(jìn)程的目的地緩沖存儲(chǔ)器地址的數(shù)據(jù)幀。在存儲(chǔ)器語(yǔ)義中,目的地進(jìn)程預(yù)先準(zhǔn)許源進(jìn)程訪問(wèn)其存儲(chǔ)器。
      存儲(chǔ)、群集和常規(guī)連網(wǎng)通信一般都需要通道語(yǔ)義和存儲(chǔ)器語(yǔ)義。典型的存儲(chǔ)操作采用通道語(yǔ)義和存儲(chǔ)器語(yǔ)義的組合。在圖1中所示的分布式計(jì)算機(jī)系統(tǒng)的例證存儲(chǔ)操作中,主處理器節(jié)點(diǎn),例如主處理器節(jié)點(diǎn)102通過(guò)使用通道語(yǔ)義把磁盤(pán)寫(xiě)命令發(fā)送給RAID子系統(tǒng)IPSOE172,啟動(dòng)存儲(chǔ)操作。RAID子系統(tǒng)檢查該命令,并使用存儲(chǔ)器語(yǔ)義直接從主處理器節(jié)點(diǎn)的存儲(chǔ)空間讀取數(shù)據(jù)緩沖區(qū)。在讀取數(shù)據(jù)緩沖區(qū)之后,RAID子系統(tǒng)采用通道語(yǔ)義把I/O完成消息回送給主處理器節(jié)點(diǎn)。
      在一個(gè)例證實(shí)施例中,圖1中所示的分布式計(jì)算機(jī)系統(tǒng)執(zhí)行操作,所述操作采用虛擬地址和虛擬存儲(chǔ)器保護(hù)機(jī)構(gòu)來(lái)確保對(duì)所有存儲(chǔ)器的正確并且恰當(dāng)?shù)脑L問(wèn)。不要求在這樣的分布式計(jì)算機(jī)系統(tǒng)中運(yùn)行的應(yīng)用程序?qū)θ魏尾僮魇褂梦锢韺ぶ贰?br> 現(xiàn)在參見(jià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通過(guò)動(dòng)詞(verbs)接口222和消息與數(shù)據(jù)服務(wù)224,把消息傳送給IP網(wǎng)。動(dòng)詞接口實(shí)際上是IP組卸載引擎的功能的抽象描述。操作系統(tǒng)通過(guò)其編程接口可揭示一些或全部動(dòng)詞功能。基本上,該接口定義主機(jī)的行為。另外,主處理器節(jié)點(diǎn)200包括消息與數(shù)據(jù)服務(wù)224,它是層次高于動(dòng)詞層的高級(jí)接口,并被用于處理通過(guò)IPSOE 210和IPSOE 212接收的消息和數(shù)據(jù)。消息與數(shù)據(jù)服務(wù)224向消費(fèi)者202-208提供處理消息和其它數(shù)據(jù)的接口。
      現(xiàn)在參見(jiàn)圖3A,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,描述了IP組卸載引擎。圖3A中所示的IP組卸載引擎300A包括用于向IPSOE端口312A-316A傳送消息的一組隊(duì)列對(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)和動(dòng)態(tài)主機(jī)配置協(xié)議。存儲(chǔ)器轉(zhuǎn)換和保護(hù)(MTP)338A是把虛擬地址轉(zhuǎn)換成物理地址,并確認(rèn)訪問(wèn)權(quán)的機(jī)構(gòu)。直接存儲(chǔ)器存取(DMA)340A相對(duì)于隊(duì)列對(duì)302A-310A,利用存儲(chǔ)器350A提供直接存儲(chǔ)器存取操作。
      單一的IP組卸載引擎,例如圖3A中所示的IPSOE 300A能夠支持成千上萬(wàn)對(duì)隊(duì)列。每對(duì)隊(duì)列由一個(gè)發(fā)送工作隊(duì)列(SWQ)和接收工作隊(duì)列(RWQ)組成。發(fā)送工作隊(duì)列被用于發(fā)送通道和存儲(chǔ)器語(yǔ)義消息。接收工作隊(duì)列接收通道語(yǔ)義消息。消費(fèi)者調(diào)用操作系統(tǒng)專用編程接口(這里它被稱為“動(dòng)詞”),以便把工作請(qǐng)求放置到工作隊(duì)列中。
      圖3B根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,描述一個(gè)交換機(jī),例如交換機(jī)300B。交換機(jī)300B包括通過(guò)鏈路或網(wǎng)絡(luò)層服務(wù)質(zhì)量字段,例如第四版IP的服務(wù)類型字段(識(shí)別成QOSF 306B),與許多端口304B通信的分組中繼302B。一般,諸如交換機(jī)300B之類的交換機(jī)能夠把幀從一個(gè)端口發(fā)送到相同交換機(jī)上的任意其它端口。
      類似地,圖3根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,描述一個(gè)路由器300C。路由器300C包括一個(gè)幀中繼,例如通過(guò)網(wǎng)絡(luò)層服務(wù)質(zhì)量字段,比如第四版IP的服務(wù)類型字段(識(shí)別成QOSF 306C),與許多端口304C通信的GRH分組中繼302C。類似于交換機(jī)300B,路由器300C一般能夠把幀從一個(gè)端口發(fā)送到相同路由器上的任意其它端口。
      現(xiàn)在參見(jiàn)圖4,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明工作請(qǐng)求的處理。在圖4中,存在一個(gè)接收工作隊(duì)列400,一個(gè)發(fā)送工作隊(duì)列402和完成隊(duì)列404,以便處理往來(lái)于消費(fèi)者406的請(qǐng)求。來(lái)自消費(fèi)者406的這些請(qǐng)求最終被發(fā)送給硬件408。本例中,消費(fèi)者406產(chǎn)生工作請(qǐng)求410和412,并接收完成隊(duì)列414。如圖4中所示,排列到工作隊(duì)列中的工作請(qǐng)求被稱為工作隊(duì)列元素(WQE)。
      發(fā)送工作隊(duì)列402包含描述要在IP網(wǎng)架構(gòu)上傳送的數(shù)據(jù)的工作隊(duì)列元素(WQE)422-428。接收工作隊(duì)列400包含描述把來(lái)自IP網(wǎng)架構(gòu)的輸入通道語(yǔ)義數(shù)據(jù)放入何處的工作隊(duì)列元素(WQE)416-420。一個(gè)工作隊(duì)列元素由IPSOE中的硬件408處理。
      動(dòng)詞還提供從完成隊(duì)列404取回完成的工作的機(jī)構(gòu)。如圖4中所示,完成隊(duì)列404包含完成隊(duì)列元素(CQE)430-436。完成隊(duì)列元素包含關(guān)于先前完成的工作隊(duì)列元素的信息。完成隊(duì)列404被用于產(chǎn)生關(guān)于多對(duì)隊(duì)列的單點(diǎn)的完成通知。完成隊(duì)列元素是完成隊(duì)列上的一個(gè)數(shù)據(jù)結(jié)構(gòu)。該元素描述一個(gè)完成的工作隊(duì)列元素。完成隊(duì)列元素包含足以確定隊(duì)列對(duì)和完成的專用工作隊(duì)列元素的信息。完成隊(duì)列語(yǔ)境是包含單個(gè)完成隊(duì)列的指針,長(zhǎng)度和管理單個(gè)完成隊(duì)列所需的其它信息的信息。
      支持圖4中所示的發(fā)送工作隊(duì)列402的例證工作請(qǐng)求如下。發(fā)送工作請(qǐng)求是把一組本地?cái)?shù)據(jù)段推送給遠(yuǎn)程節(jié)點(diǎn)的接收工作隊(duì)列元素引用的數(shù)據(jù)段的通道語(yǔ)義操作。例如,工作隊(duì)列元素428包含對(duì)數(shù)據(jù)段4 438,數(shù)據(jù)段5 440和數(shù)據(jù)段6 442的引用。每個(gè)發(fā)送工作請(qǐng)求的數(shù)據(jù)段包含部分虛擬鄰近的存儲(chǔ)區(qū)。用于引用本地?cái)?shù)據(jù)段的虛擬地址在產(chǎn)生本地隊(duì)列對(duì)的進(jìn)程的地址語(yǔ)境中。
      遠(yuǎn)程直接存儲(chǔ)器存取(RDMA)讀取工作請(qǐng)求提供讀取遠(yuǎn)程節(jié)點(diǎn)上的虛擬鄰近的存儲(chǔ)空間的存儲(chǔ)器語(yǔ)義操作。存儲(chǔ)空間可以是一部分存儲(chǔ)區(qū)域,或者一部分存儲(chǔ)窗。存儲(chǔ)區(qū)引用由虛擬地址和長(zhǎng)度定義的預(yù)先記錄的一組虛擬鄰近的存儲(chǔ)器地址。存儲(chǔ)窗引用已綁定到預(yù)先記錄的區(qū)域的一組虛擬鄰近的存儲(chǔ)器地址。
      RDMA讀取工作請(qǐng)求讀取遠(yuǎn)程端節(jié)點(diǎn)上的虛擬鄰近的存儲(chǔ)空間,并把數(shù)據(jù)寫(xiě)入虛擬鄰近的本地存儲(chǔ)空間。類似于發(fā)送工作請(qǐng)求,RDMA讀取工作隊(duì)列元素用于引用本地?cái)?shù)據(jù)段的虛擬地址在產(chǎn)生本地隊(duì)列對(duì)的進(jìn)程的地址語(yǔ)境中。遠(yuǎn)程虛擬地址在擁有RDMA讀取工作隊(duì)列元素把其作為目標(biāo)的遠(yuǎn)程隊(duì)列對(duì)的進(jìn)程的地址語(yǔ)境中。
      RDMA寫(xiě)入工作隊(duì)列元素提供對(duì)遠(yuǎn)程節(jié)點(diǎn)上的虛擬鄰近的存儲(chǔ)空間進(jìn)行寫(xiě)操作的存儲(chǔ)器語(yǔ)義操作。例如,接收工作隊(duì)列400中的工作隊(duì)列元素416引用數(shù)據(jù)段1 444,數(shù)據(jù)段2 446和數(shù)據(jù)段3 448。RDMA寫(xiě)入工作隊(duì)列元素包含本地虛擬鄰近的存儲(chǔ)空間的分散列表和其中寫(xiě)入本地存儲(chǔ)空間的遠(yuǎn)程存儲(chǔ)空間的虛擬地址。RDMA FetchOp工作隊(duì)列元素提供對(duì)遠(yuǎn)程字進(jìn)行基本操作的存儲(chǔ)器語(yǔ)義操作。RDMAFetchOp工作隊(duì)列元素是組合的RDAM讀取、修改和RDMA寫(xiě)入操作。RDMA FetchOp工作隊(duì)列元素能夠支持幾種讀取-修改-寫(xiě)入操作,例如比較,如果相等則交換。RDMA FetchOp并不包括在當(dāng)前的RDMA over IP標(biāo)準(zhǔn)化努力中,但是這里描述了RDMA FetchOp,因?yàn)樵谝恍?shí)現(xiàn)中,它可被用作增值特征。
      綁定(解開(kāi))遠(yuǎn)程存取密鑰(R_Key)工作隊(duì)列元素向IP組卸載引擎硬件提供通過(guò)使存儲(chǔ)窗與存儲(chǔ)區(qū)聯(lián)系(脫離聯(lián)系),修改(破壞)存儲(chǔ)窗的命令。R_Key是每個(gè)RDMA存取的一部分,被用于核實(shí)遠(yuǎn)程進(jìn)程已被允許訪問(wèn)該緩沖區(qū)。
      在一個(gè)實(shí)施例中,圖4中所示的接收工作隊(duì)列只支持一種工作隊(duì)列元素(它被稱為接收工作隊(duì)列元素)。接收工作隊(duì)列元素提供描述寫(xiě)入輸入的發(fā)送消息的本地存儲(chǔ)空間的通道語(yǔ)義操作。接收工作隊(duì)列元素包括描述幾個(gè)虛擬鄰近的存儲(chǔ)空間的分散列表。輸入的發(fā)送消息被寫(xiě)入這些存儲(chǔ)空間中。虛擬地址在產(chǎn)生本地隊(duì)列對(duì)的進(jìn)程的地址語(yǔ)境中。
      對(duì)于處理器間通信來(lái)說(shuō),用戶模式軟件進(jìn)程通過(guò)隊(duì)列對(duì)直接從緩沖區(qū)存在于存儲(chǔ)器中的地方傳送數(shù)據(jù)。在一個(gè)實(shí)施例中,通過(guò)隊(duì)列對(duì)的傳送繞過(guò)了操作系統(tǒng),消耗很少的主機(jī)指令周期。隊(duì)列對(duì)允許零處理器-復(fù)制數(shù)據(jù)傳送,而不涉及任何操作系統(tǒng)內(nèi)核。零處理器-復(fù)制數(shù)據(jù)傳送提供高帶寬和低等待時(shí)間通信的有效支持。
      當(dāng)產(chǎn)生一個(gè)隊(duì)列對(duì)時(shí),該隊(duì)列對(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ì)列對(duì)與一個(gè)并且只與一個(gè)遠(yuǎn)程隊(duì)列對(duì)相聯(lián)系。TCP和SCTP需要一種進(jìn)程來(lái)為T(mén)CP和SCTP將通過(guò)IP網(wǎng)架構(gòu)與之通信的每個(gè)進(jìn)程產(chǎn)生一個(gè)隊(duì)列對(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ì)列對(duì)。此外,進(jìn)程可使一個(gè)隊(duì)列對(duì)與相同IPSOE上的另一隊(duì)列對(duì)相聯(lián)系。
      圖5中圖解說(shuō)明了采用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ì)列對(duì)4、6和7,每個(gè)隊(duì)列對(duì)具有一個(gè)發(fā)送工作隊(duì)列和一個(gè)接收工作隊(duì)列。主處理器節(jié)點(diǎn)2具有隊(duì)列對(duì)9,主處理器節(jié)點(diǎn)3具有隊(duì)列對(duì)2和5。分布式計(jì)算機(jī)系統(tǒng)500的TCP或SCTP使一個(gè)本地隊(duì)列對(duì)與一個(gè)并且只與一個(gè)遠(yuǎn)程隊(duì)列對(duì)相聯(lián)系。從而隊(duì)列對(duì)4被用于與隊(duì)列對(duì)2通信;隊(duì)列對(duì)7被用于與隊(duì)列對(duì)5通信;隊(duì)列對(duì)6被用于與隊(duì)列對(duì)9通信。
      放置在TCP或SCTP中的一個(gè)發(fā)送隊(duì)列上的WQE使數(shù)據(jù)被寫(xiě)入由相關(guān)隊(duì)列對(duì)的接收WQE引用的接收存儲(chǔ)空間中。RDMA操作作用于相關(guān)隊(duì)列對(duì)的地址空間。
      在本發(fā)明的一個(gè)實(shí)施例中,由于硬件保持序列號(hào)并確認(rèn)所有幀傳送,因此使TCP或SCTP可靠。硬件和IP網(wǎng)驅(qū)動(dòng)器軟件的組合重試任何失敗的通信。即使在存在位錯(cuò)誤,接收欠載運(yùn)行和網(wǎng)絡(luò)擁塞,隊(duì)列對(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)程級(jí)確認(rèn),即證實(shí)接收進(jìn)程已使用數(shù)據(jù)的確認(rèn)。另一方面,確認(rèn)可以是只指示數(shù)據(jù)已到達(dá)其目的地的確認(rèn)。
      用戶數(shù)據(jù)報(bào)協(xié)議是無(wú)連接的。管理應(yīng)用程序采用UDP來(lái)發(fā)現(xiàn)并把新的交換機(jī)、路由器和端節(jié)點(diǎn)結(jié)合到指定的分布式計(jì)算機(jī)系統(tǒng)中。UDP不提供TCP或SCTP的可靠性保證。因此,UDP在每個(gè)端節(jié)點(diǎn)保持較小狀態(tài)信息的情況下工作。
      現(xiàn)在參見(jiàn)圖6,根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例描述了數(shù)據(jù)幀。數(shù)據(jù)幀是通過(guò)IP網(wǎng)架構(gòu)發(fā)送的信息的單元。數(shù)據(jù)幀是一種端節(jié)點(diǎn)-端節(jié)點(diǎn)結(jié)構(gòu),從而由端節(jié)點(diǎn)產(chǎn)生和使用。對(duì)于以IPSOE為目的地的幀,數(shù)據(jù)幀既不由IP網(wǎng)架構(gòu)中的交換機(jī)和路由器產(chǎn)生,也不由它們使用。代替以IPSOE為目的地的數(shù)據(jù)幀,通過(guò)修改進(jìn)程中的鏈路報(bào)頭字段,交換機(jī)和路由器只是把請(qǐng)求幀或確認(rèn)幀移動(dòng)到更接近于最終的目的地。當(dāng)幀越過(guò)子網(wǎng)邊界時(shí),路由器可修改該幀的網(wǎng)絡(luò)報(bào)頭。在通過(guò)子網(wǎng)時(shí),單一幀停留在單一服務(wù)級(jí)上。
      消息數(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識(shí)別源端口和目的地端口。本例中的傳送報(bào)頭618為數(shù)據(jù)幀612規(guī)定序列號(hào)和源端口號(hào)及目的地端口號(hào)。當(dāng)建立通信時(shí),序列號(hào)被初始化,并且對(duì)于幀報(bào)頭、DDP/RDMA報(bào)頭、數(shù)據(jù)有效負(fù)載和CRC的每個(gè)字節(jié),序列號(hào)被加1。本例中的幀報(bào)頭620規(guī)定與該幀相關(guān)的目的地隊(duì)列對(duì)編號(hào),和直接數(shù)據(jù)布置和/或遠(yuǎn)程直接存儲(chǔ)器存取(DDP/RDMA)報(bào)頭加上數(shù)據(jù)有效負(fù)載加入CRC的長(zhǎng)度。DDP/RDMA報(bào)頭622規(guī)定數(shù)據(jù)有效負(fù)載的消息標(biāo)識(shí)符和布置信息。對(duì)于為消息一部分的所有幀來(lái)說(shuō),消息標(biāo)識(shí)符是不變的。例證的消息標(biāo)識(shí)符包括,例如發(fā)送、寫(xiě)RDMA和讀RDMA。
      在圖7中,描述了一部分的分布式計(jì)算機(jī)系統(tǒng),例如分布式計(jì)算機(jī)系統(tǒng)700,以便圖解說(shuō)明例證的請(qǐng)求和確認(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通過(guò)包括發(fā)送隊(duì)列724和接收隊(duì)列726的隊(duì)列對(duì)23 720與主IPSOE交互作用??蛻魴C(jī)進(jìn)程B通過(guò)包括發(fā)送隊(duì)列728和接收隊(duì)列730的隊(duì)列對(duì)24 722與主IPSOE708交換作用。隊(duì)列對(duì)23和24是包括發(fā)送工作隊(duì)列和接收工作隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。
      進(jìn)程A通過(guò)向隊(duì)列對(duì)23的發(fā)送隊(duì)列公布工作隊(duì)列元素,啟動(dòng)消息請(qǐng)求。圖4中圖解說(shuō)明了這樣的工作隊(duì)列元素??蛻魴C(jī)進(jìn)程A的消息請(qǐng)求由包含在發(fā)送工作隊(duì)列元素中的集中列表引用。集中列表中的每個(gè)數(shù)據(jù)段指向部分虛擬鄰近的本地存儲(chǔ)區(qū),所述本地存儲(chǔ)區(qū)包含一部分的消息,例如由圖4中的分別保持消息部分1、2和3的數(shù)據(jù)段1、2和3指示的一部分消息。
      主IPSOE 706中的硬件讀取工作隊(duì)列元素,并把保存在虛擬鄰近的緩沖區(qū)中的消息分割成數(shù)據(jù)幀,例如圖6中圖解說(shuō)明的數(shù)據(jù)幀。數(shù)據(jù)幀通過(guò)IP網(wǎng)架構(gòu)被發(fā)送,并且對(duì)于可靠的傳送服務(wù)來(lái)說(shuō),由最終的目的地端節(jié)點(diǎn)確認(rèn)。如果未被成功確認(rèn),那么源端節(jié)點(diǎn)重發(fā)該數(shù)據(jù)幀。數(shù)據(jù)幀由源端節(jié)點(diǎn)產(chǎn)生,并由目的地端節(jié)點(diǎn)使用。
      參見(jià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)識(shí)。主機(jī)名稱識(shí)別消息的端節(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)媒體訪問(wèn)層地址)804被分配給端節(jié)點(diǎn)組件802的每個(gè)端口806。組件可以是IPSOE、交換機(jī)或路由器。所有IPSOE和路由器組件必須具有一個(gè)MAC地址。交換機(jī)上的媒體訪問(wèn)點(diǎn)也被分配一個(gè)MAC地址。
      一個(gè)網(wǎng)絡(luò)地址(例如,IP地址)812被分配給端節(jié)點(diǎn)組件802的每個(gè)端口806。組件可以是IPSOE、交換機(jī)或路由器。所有IPSOE和路由器組件必須具有一個(gè)MAC地址。交換機(jī)上的媒體訪問(wèn)點(diǎn)也被分配一個(gè)MAC地址。
      交換機(jī)810的每個(gè)端口不具有與之相聯(lián)系的鏈路層地址。但是,交換機(jī)810可具有媒體訪問(wèn)端口814,媒體訪問(wèn)端口814具有與之相聯(lián)系的鏈路層地址816和網(wǎng)絡(luò)層地址808。
      圖9中圖解說(shuō)明了根據(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)和級(jí)聯(lián)交換機(jī)。一般來(lái)說(shuō),子網(wǎng)占據(jù)單一的地理或功能區(qū)。例如,一個(gè)房間中的單一計(jì)算機(jī)系統(tǒng)可被定義成一個(gè)子網(wǎng)。在一個(gè)實(shí)施例中,子網(wǎng)中的交換機(jī)能夠?qū)崿F(xiàn)消息的非常快速的蠕蟲(chóng)洞或直通路由選擇。
      子網(wǎng)內(nèi)的交換機(jī)檢查在子網(wǎng)內(nèi)唯一的目的地鏈路層地址(例如MAC地址),以允許交換機(jī)快速并且高效地發(fā)送輸入的消息幀。在一個(gè)實(shí)施例中,交換機(jī)是相當(dāng)簡(jiǎn)單的電路,并且通常被實(shí)現(xiàn)成單一集成電路。子網(wǎng)可具有由級(jí)聯(lián)交換機(jī)形成的數(shù)百到數(shù)千個(gè)端節(jié)點(diǎn)。
      如圖9中所示,為了擴(kuò)展到更大的系統(tǒng),利用路由器,例如路由器924和926連接子網(wǎng)。路由器解釋目的地網(wǎng)絡(luò)層地址(例如IP地址),并發(fā)送幀。
      圖3B中圖解說(shuō)明了交換機(jī)的一個(gè)例證實(shí)施例。交換機(jī)或路由器上的每個(gè)I/O路徑具有一個(gè)端口。一般來(lái)說(shuō),交換機(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í)施例中,不要求請(qǐng)求幀和請(qǐng)求幀的對(duì)應(yīng)的肯定確認(rèn)(ACK)幀使用的路徑是對(duì)稱的。在采用茫然路由選擇的一個(gè)實(shí)施例中,交換機(jī)根據(jù)鏈路層地址(例如MAC地址)選擇輸出端口。在一個(gè)實(shí)施例中,交換機(jī)對(duì)交換機(jī)中它的所有輸入端口使用一組路由選擇判斷標(biāo)準(zhǔn)。在一個(gè)例證實(shí)施例中,路由選擇判斷標(biāo)準(zhǔn)包含在一個(gè)路由選擇表中。在一個(gè)備選實(shí)施例中,交換機(jī)對(duì)每個(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)程通過(guò)一個(gè)或多個(gè)隊(duì)列對(duì),例如圖3A、5和8中圖解說(shuō)明的隊(duì)列對(duì),訪問(wèn)IP組卸載引擎硬件??蛻魴C(jī)進(jìn)程調(diào)用操作系統(tǒng)專用編程接口(這里它被稱為“動(dòng)詞”(verbs))。實(shí)現(xiàn)動(dòng)詞的軟件代碼向指定的隊(duì)列對(duì)工作隊(duì)列公布工作隊(duì)列元素。
      存在公布工作隊(duì)列元素的許多種可能方法,并且存在許多可能的工作隊(duì)列元素格式,所述工作隊(duì)列元素格式允許各種成本/性能設(shè)計(jì)要點(diǎn),但是不影響互操作性。但是,用戶進(jìn)程必須按照良好定義的方式與動(dòng)詞通信,跨越IP網(wǎng)架構(gòu)傳送的數(shù)據(jù)的格式和協(xié)議必須被充分規(guī)定,以允許設(shè)備在異類的廠商環(huán)境中互操作。
      在一個(gè)實(shí)施例中,IPSOE硬件檢測(cè)工作隊(duì)列元素位置,并訪問(wèn)工作隊(duì)列元素。在該實(shí)施例中,IPSOE硬件轉(zhuǎn)換并確認(rèn)工作隊(duì)列元素的虛擬地址,并訪問(wèn)數(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)頭包括序列號(hào)和其它傳送信息。網(wǎng)絡(luò)報(bào)頭包括路由信息,例如目的地IP地址和其它網(wǎng)絡(luò)路由信息。鏈路報(bào)頭包含目的地鏈路層地址(例如MAC地址)或其它本地路由信息。
      如果采用TCP或SCTP,那么當(dāng)請(qǐng)求數(shù)據(jù)幀到達(dá)其目的地端節(jié)點(diǎn)時(shí),目的地端節(jié)點(diǎn)使用確認(rèn)數(shù)據(jù)幀使請(qǐng)求數(shù)據(jù)幀發(fā)送者知道請(qǐng)求數(shù)據(jù)幀在目的地被證實(shí)并被接受。確認(rèn)數(shù)據(jù)幀確認(rèn)一個(gè)或多個(gè)有效并且接受的請(qǐng)求數(shù)據(jù)幀。在接收任意確認(rèn)之前,請(qǐng)求者可具有多個(gè)要發(fā)的請(qǐng)求數(shù)據(jù)幀。在一個(gè)實(shí)施例中,當(dāng)產(chǎn)生隊(duì)列對(duì)時(shí),確定多個(gè)要發(fā)的消息,即請(qǐng)求數(shù)據(jù)幀的數(shù)目。
      圖10中圖解說(shuō)明了用于實(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定義的高級(jí)協(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é)議層來(lái)說(shuō),高級(jí)協(xié)議1002采用動(dòng)詞在傳送層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提供端對(duì)端消息移動(dòng)。在一個(gè)實(shí)施例中,傳送層提供如上所述的四種傳送服務(wù),它們是傳統(tǒng)的TCP、RDMA overTCP、SCTP和UDP。網(wǎng)絡(luò)層1006執(zhí)行通過(guò)一個(gè)子網(wǎng)或多個(gè)子網(wǎng)到目的地端節(jié)點(diǎn)的幀路由選擇。鏈路層1008執(zhí)行流控制1020,檢錯(cuò)和跨越鏈路的優(yōu)先化幀傳遞。
      物理層1010執(zhí)行依賴于技術(shù)的位傳輸。通過(guò)鏈路1022、1024和1026,在物理層之間傳遞位或位組。可用印刷電路銅跡線,銅纜,光纜,或者利用其它恰當(dāng)?shù)逆溌穼?shí)現(xiàn)鏈路。參見(jiàn)圖11,根據(jù)本發(fā)明的一個(gè)例證實(shí)施例描述了與主機(jī)軟件的RNIC接口。動(dòng)詞消費(fèi)者1156通過(guò)動(dòng)詞1152和動(dòng)詞驅(qū)動(dòng)器與程序庫(kù)1148訪問(wèn)主RNIC 1100和備用RNIC 1104。動(dòng)詞消費(fèi)者1156通過(guò)分別調(diào)用RNIC管理查詢動(dòng)詞1124和1136,確定主NRIC 1100和備用RNIC 1104支持切換/切回(S/S)。RNIC管理查詢動(dòng)詞返回RNIC權(quán)能,在本例證實(shí)施例中,RNIC權(quán)能包括一個(gè)指示RNIC支持切換/切回(S/S)的字段。動(dòng)詞消費(fèi)者1156隨后使用RNIC管理修改動(dòng)詞1124和1136把一批隊(duì)列對(duì)(QP),完成隊(duì)列(CQ)及存儲(chǔ)器轉(zhuǎn)換和保護(hù)表(TPT)條目分配給S/S和非S/S支持。作為成功完成RNIC修改動(dòng)詞的結(jié)果,主RNIC 1100和備用RNIC 1104共享共同的QP、CQ和存儲(chǔ)器TPT范圍。
      動(dòng)詞消費(fèi)者1156利用產(chǎn)生CQ動(dòng)詞產(chǎn)生一個(gè)CQ,產(chǎn)生CQ動(dòng)詞選擇CQ是將支持S/S,例如CQ 1176和1180,還是不支持S/S,例如QP 1168和1188。如果動(dòng)詞消費(fèi)者選擇S/S支持,那么產(chǎn)生CQ動(dòng)詞包括識(shí)別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的額外修改量。RNIC標(biāo)識(shí)符可以是EUI-64位標(biāo)識(shí)符。端口標(biāo)識(shí)符可以是端口號(hào)。另一種備選方案可以是使用RNIC的MAC地址來(lái)識(shí)別RNIC和端口。如果動(dòng)詞消費(fèi)者選擇S/S支持,那么RNIC和端口標(biāo)識(shí)符被放入CQ語(yǔ)境1110和1118。如果動(dòng)詞消費(fèi)者不選擇S/S支持,那么RNIC和端口標(biāo)識(shí)符不被放入CQ語(yǔ)境1106和1122。
      動(dòng)詞消費(fèi)者1156利用寄存器存儲(chǔ)區(qū)動(dòng)詞之一(例如寄存器存儲(chǔ)區(qū),寄存器共享存儲(chǔ)區(qū),寄存器物理存儲(chǔ)區(qū))記錄存儲(chǔ)區(qū),寄存器存儲(chǔ)區(qū)動(dòng)詞選擇存儲(chǔ)區(qū)是將支持S/S,例如存儲(chǔ)區(qū)1128和1132,還是不支持S/S,例如存儲(chǔ)區(qū)1194和1196。如果動(dòng)詞消費(fèi)者選擇S/S支持,那么寄存器存儲(chǔ)區(qū)動(dòng)詞包括識(shí)別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的額外修改量。RNIC標(biāo)識(shí)符可以是EUI-64位標(biāo)識(shí)符。端口標(biāo)識(shí)符可以是端口號(hào)。另一種備選方案可以是使用RNIC的MAC地址來(lái)識(shí)別RNIC和端口。如果動(dòng)詞消費(fèi)者選擇S/S支持,那么RNIC和端口標(biāo)識(shí)符可被放入存儲(chǔ)區(qū)的存儲(chǔ)器轉(zhuǎn)換和保護(hù)表(TPT)條目1128和1132中。如果動(dòng)詞消費(fèi)者不選擇S/S支持,那么RNIC和端口標(biāo)識(shí)符不被放入存儲(chǔ)區(qū)的存儲(chǔ)器TPT條目1194和1196中。
      動(dòng)詞消費(fèi)者1156利用產(chǎn)生QP動(dòng)詞產(chǎn)生一個(gè)QP,產(chǎn)生QP動(dòng)詞選擇QP是將支持S/S,例如QP 1172和1184,還是不支持S/S,例如QP 1164和1192。如果動(dòng)詞消費(fèi)者選擇S/S支持,那么產(chǎn)生QP動(dòng)詞包括識(shí)別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的額外修改量。RNIC標(biāo)識(shí)符可以是EUI-64位標(biāo)識(shí)符。端口標(biāo)識(shí)符可以是端口號(hào)。另一種備選方案可以是使用RNIC的MAC地址來(lái)識(shí)別RNIC和端口。如果動(dòng)詞消費(fèi)者選擇S/S支持,那么RNIC和端口標(biāo)識(shí)符被放入QP語(yǔ)境1112和1116。如果動(dòng)詞消費(fèi)者不選擇S/S支持,那么RNIC和端口標(biāo)識(shí)符不被放入QP語(yǔ)境1108和1120。
      當(dāng)例如在由于停機(jī)而發(fā)生的切換之后,S/S QP在不存在替代物的情況下工作時(shí),動(dòng)詞消費(fèi)者1156使用修改QP動(dòng)詞使S/S QP,例如QP 1172和1184停頓,并且重新向備用RNIC分配相同的QP號(hào)。修改QP動(dòng)詞包括識(shí)別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的修改量。RNIC標(biāo)識(shí)符可以是EUI-64位標(biāo)識(shí)符。端口標(biāo)識(shí)符可以是端口號(hào)。另一種備選方案可以是使用RNIC的MAC地址來(lái)識(shí)別RNIC和端口。RNIC和端口標(biāo)識(shí)符被放入QP語(yǔ)境1112和1116。
      當(dāng)例如在由于停機(jī)而發(fā)生的切換之后,S/S RNIC在不存在替代物的情況下工作時(shí),借助備用RNIC,動(dòng)詞消費(fèi)者1156使用ResyncRegistration動(dòng)詞記錄所有的存儲(chǔ)器TPT條目,例如1128。
      在與在不存在替代物的情況下工作的指定S/S CQ相產(chǎn)的所有S/S QP已被停頓之后,動(dòng)詞消費(fèi)者1156使用修改CQ動(dòng)詞使S/S CQ,例如CQ 1176和1180停頓,并且重新向備用RNIC分配相同的CQ號(hào)。修改CQ動(dòng)詞包括識(shí)別主RNIC,主RNIC端口,備用RNIC和備用RNIC端口的修改量。RNIC標(biāo)識(shí)符可以是EUI-64位標(biāo)識(shí)符。端口標(biāo)識(shí)符可以是端口號(hào)。另一種備選方案可以是使用RNIC的MAC地址來(lái)識(shí)別RNIC和端口。RNIC和端口標(biāo)識(shí)符被放入CQ語(yǔ)境1110和1118。
      在S/S CQ已被停頓之后,使用修改CQ動(dòng)詞使CQ處于激活狀態(tài)(例如使用就緒狀態(tài)),對(duì)于與CQ相關(guān)的每個(gè)S/S QP,使用修改QP動(dòng)詞使QP處于激活狀態(tài)(例如發(fā)送就緒狀態(tài))。
      參見(jiàn)圖12,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明與兩個(gè)RNIC保持的切換和切回相關(guān)的例證連接狀態(tài)的圖。在優(yōu)選實(shí)施例中,每個(gè)主RNIC、備用RNIC或單一RNIC保持圖12中所示的狀態(tài)信息。狀態(tài)信息可保持在例如RNIC內(nèi),RNIC可訪問(wèn)的主機(jī)存儲(chǔ)單元中,這兩者的組合中等等。。圖12表示了狀態(tài)信息保持在RNIC內(nèi)的例證情況。
      每個(gè)RNIC QP,例如QP 1172具有QP語(yǔ)境表(QPCT),例如QPCT 1200中的一個(gè)QP語(yǔ)境條目,例如QPCE0 1204,QPCE1 1208和QPCEN 1212。通過(guò)QP語(yǔ)境表寄存器,例如QPCT寄存器1244訪問(wèn)QPCT 1200,QP語(yǔ)境表寄存器包含QPCT的地址,例如QPCT地址1248,和QPCT的長(zhǎng)度,例如QPCT長(zhǎng)度1252。QP語(yǔ)境表1200中的每個(gè)條目具有固定的大小,不過(guò)也可使用具有大小可變的QPCT條目的QPCT。QPCT中的每個(gè)條目包含與關(guān)于該條目索引的QP號(hào)相關(guān)的有關(guān)語(yǔ)境信息。例如,QPCE N 1212包含與QP號(hào)N相關(guān)的QP狀態(tài)信息。QP號(hào)N的狀態(tài)包括傳統(tǒng)的QP語(yǔ)境狀態(tài),例如傳統(tǒng)QP語(yǔ)境狀態(tài)1220,工作SQ切換/切回語(yǔ)境狀態(tài),例如工作SQ切換/切回語(yǔ)境1224,提交的SQ切換/切回語(yǔ)境狀態(tài),例如提交的SQ切換/切回語(yǔ)境1228,工作RQ切換/切回語(yǔ)境狀態(tài),例如工作RQ切換/切回語(yǔ)境1232,提交的RQ切換/切回語(yǔ)境狀態(tài),例如提交的RQ切換/切回語(yǔ)境1236,和主RNIC與備用RNIC標(biāo)識(shí)語(yǔ)境狀態(tài),例如主RNIC與備用RNIC標(biāo)識(shí)語(yǔ)境1240。
      傳統(tǒng)的QP語(yǔ)境狀態(tài)1220包含公知的QP語(yǔ)境狀態(tài)信息,例如QP的狀態(tài),與QP相關(guān)的服務(wù)的類型,與QP相關(guān)的TCP源端口號(hào)和目的地端口號(hào),與QP相關(guān)的IP源地址和目的地地址。
      工作SQ切換/切回語(yǔ)境1224包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息



      所有提交SQ切換/切回字段包含已由備用RNIC通過(guò)檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段。“提交的當(dāng)前發(fā)送WQE號(hào)”識(shí)別已被設(shè)置檢查點(diǎn),目前正在發(fā)送隊(duì)列中被處理的WQE?!爱?dāng)前發(fā)送WQE中的提交字節(jié)偏移量”識(shí)別對(duì)于提交的當(dāng)前發(fā)送WQE要設(shè)置檢查點(diǎn)的下一字節(jié)?!跋乱话l(fā)送TCP段的提交序列號(hào)”識(shí)別將用于當(dāng)前發(fā)送WQE中的提交字節(jié)偏移量的TCP序列號(hào)。“下一發(fā)送TCP段的提交窗口值”識(shí)別從當(dāng)前發(fā)送WQE中的提交字節(jié)偏移量開(kāi)始的,可用于要發(fā)送的下一TCP段的TCP窗口的大小?!疤峤坏漠?dāng)前接收Ack WQE號(hào)”識(shí)別已由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的,在發(fā)送隊(duì)列中被設(shè)置檢查點(diǎn)的最新WQE?!爱?dāng)前接收Ack WQE中的提交字節(jié)偏移量”識(shí)別對(duì)于提交的當(dāng)前接收ACK WQE,要由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)?!跋乱籖cv Ack TCP段的提交序列號(hào)”識(shí)別遠(yuǎn)程節(jié)點(diǎn)預(yù)期的,并且與當(dāng)前接收Ack WQE中的提交字節(jié)偏移量相聯(lián)系的下一TCP序列號(hào)?!跋乱籖cv Ack TCP段的提交窗口值”識(shí)別由從遠(yuǎn)程節(jié)點(diǎn)回送的最后的TCP窗口大小得到的,并且與當(dāng)前接收Ack WQE中的提交字節(jié)偏移量相聯(lián)系的發(fā)送窗口中的變化。
      工作RQ切換/切回語(yǔ)境1232包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息。

      所有工作RQ切換/切回字段包含還未由備用RNIC通過(guò)檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!肮ぷ鞯漠?dāng)前接收WQE號(hào)”識(shí)別接收隊(duì)列中目前正被處理的WQE。“當(dāng)前接收WQE中的工作字節(jié)偏移量”識(shí)別對(duì)于工作的當(dāng)前接收WQE要處理的下一字節(jié)。“下一接收TCP段的工作序列號(hào)”識(shí)別對(duì)于當(dāng)前接收WQE中的工作字節(jié)偏移量預(yù)期的TCP序列號(hào)。“下一接收TCP段的工作窗口值”識(shí)別從當(dāng)前接收WQE中的工作字節(jié)偏移量開(kāi)始的,可用于要接收的下一TCP段的TCP窗口的大小?!肮ぷ鞯漠?dāng)前發(fā)送Ack WQE號(hào)”識(shí)別接收隊(duì)列中關(guān)于其已向遠(yuǎn)程節(jié)點(diǎn)發(fā)送確認(rèn)的目前正被處理的WQE?!爱?dāng)前發(fā)送Ack WQE中的工作字節(jié)偏移量”識(shí)別對(duì)于工作的當(dāng)前發(fā)送ACK WQE,將向遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)?!跋乱话l(fā)送Ack TCP段的工作序列號(hào)”識(shí)別將被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的工作字節(jié)偏移量相聯(lián)系的下一TCP序列號(hào)?!跋乱话l(fā)送Ack TCP段的工作窗口值”識(shí)別要被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的工作字節(jié)偏移量相聯(lián)系的下一TCP窗口的大小。
      提交RQ切換/切回語(yǔ)境1236包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息。

      所有提交RQ切換/切回字段包含還未由備用RNIC通過(guò)檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!疤峤坏漠?dāng)前接收WQE號(hào)”識(shí)別已被設(shè)置檢查點(diǎn),目前在接收隊(duì)列中正被處理的最新WQE。“當(dāng)前接收WQE中的提交字節(jié)偏移量”識(shí)別對(duì)于提交的當(dāng)前接收WQE要處理的下一字節(jié)。“下一接收TCP段的提交序列號(hào)”識(shí)別對(duì)于當(dāng)前接收WQE中的提交字節(jié)偏移量預(yù)期的TCP序列號(hào)?!跋乱唤邮誘CP段的提交窗口值”識(shí)別從當(dāng)前接收WQE中的提交字節(jié)偏移量開(kāi)始的,可用于要接收的下一TCP段的TCP窗口的大小?!疤峤坏漠?dāng)前發(fā)送Ack WQE號(hào)”識(shí)別接收隊(duì)列中關(guān)于其已向遠(yuǎn)程節(jié)點(diǎn)發(fā)送確認(rèn)的已被設(shè)置檢查點(diǎn)的最新WQE?!爱?dāng)前發(fā)送Ack WQE中的提交字節(jié)偏移量”識(shí)別對(duì)于提交的當(dāng)前發(fā)送ACK WQE,將向遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)。“下一發(fā)送Ack TCP段的提交序列號(hào)”識(shí)別將被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的提交字節(jié)偏移量相聯(lián)系的下一TCP序列號(hào)?!跋乱话l(fā)送Ack TCP段的提交窗口值”識(shí)別要被發(fā)送給遠(yuǎn)程節(jié)點(diǎn),并且與當(dāng)前發(fā)送Ack WQE中的提交字節(jié)偏移量相聯(lián)系的下一TCP窗口的大小。
      主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境1240包含下述信息。

      當(dāng)產(chǎn)生QP時(shí),RNIC切換/切回(S/S)狀態(tài)作為產(chǎn)生QP動(dòng)詞的輸入修改量被傳遞。如果RNIC S/S狀態(tài)為0,那么QP使S/S被禁用,只有主字段有效。如果RNIC S/S不為0,那么QP使S/S被啟用,主字段和備用字段都有效。
      主RNIC標(biāo)識(shí)符被用于唯一地識(shí)別主RNIC。例如,RNIC標(biāo)識(shí)符可以是RNIC的EIU-64值。主RNIC端口標(biāo)識(shí)符被用于唯一地識(shí)別主RNIC上,QP與之相聯(lián)系的端口。例如,RNIC端口標(biāo)識(shí)符可以是端口號(hào),或者M(jìn)AC和IP地址的組合。備用RNIC標(biāo)識(shí)符被用于唯一地識(shí)別備用RNIC。備用RNIC端口標(biāo)識(shí)符被用于唯一地識(shí)別備用RNIC上,QP與之相聯(lián)系的端口。
      每個(gè)RNIC CQ,例如QP 1176具有CQ語(yǔ)境表(CQCT),例如CQCT 1252中的一個(gè)CQ語(yǔ)境條目,例如CQCE0 1256,CQCE11260和CQCEN 1264。通過(guò)CQ語(yǔ)境表寄存器,例如CQCT寄存器1284訪問(wèn)CQCT,CQ語(yǔ)境表寄存器包含CQCT的地址,例如CQCT地址1288,和CQCT的長(zhǎng)度,例如CQCT長(zhǎng)度1292。QP語(yǔ)境表中的每個(gè)條目具有固定的大小,不過(guò)也可使用具有大小可變的CQCT條目的CQCT。CQCT中的每個(gè)條目包含與關(guān)于該條目索引的CQ號(hào)相關(guān)的有關(guān)語(yǔ)境信息。例如,CQCE N 1264包含與CQ號(hào)N相關(guān)的所有QP狀態(tài)。CQ號(hào)N的狀態(tài)包括傳統(tǒng)的CQ語(yǔ)境狀態(tài),例如傳統(tǒng)QP語(yǔ)境狀態(tài)1268,工作CQ切換/切回語(yǔ)境狀態(tài),例如工作CQ切換/切回語(yǔ)境1272,提交的CQ切換/切回語(yǔ)境狀態(tài),例如提交的CQ切換/切回語(yǔ)境1276,和主RNIC與備用RNIC標(biāo)識(shí)語(yǔ)境狀態(tài),例如主RNIC與備用RNIC標(biāo)識(shí)語(yǔ)境1280。
      傳統(tǒng)的CQ語(yǔ)境狀態(tài)1268包含公知的CQ語(yǔ)境狀態(tài)信息,例如CQ的狀態(tài)和CQ中的條目的總數(shù)。
      工作CQ切換/切回語(yǔ)境1272包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息

      工作CQ切換/切回字段包含還未由備用RNIC通過(guò)檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!肮ぷ鞯漠?dāng)前完成CQE號(hào)”識(shí)別完成隊(duì)列中目前正被處理的CQE。
      提交CQ切換/切回語(yǔ)境1272包含當(dāng)產(chǎn)生QP時(shí)被設(shè)置為0的下述信息

      提交CQ切換/切回字段包含已由備用RNIC通過(guò)檢查點(diǎn)ACK設(shè)置檢查點(diǎn)的信息。主RNIC和備用RNIC包含所有這些字段?!肮ぷ鞯漠?dāng)前完成CQE號(hào)”識(shí)別已被設(shè)置檢查點(diǎn),并且目前在完成隊(duì)列中正被處理的CQE。
      主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境1280包含下述信息。

      當(dāng)產(chǎn)生QP時(shí),RNIC切換/切回(S/S)狀態(tài)作為產(chǎn)生QP動(dòng)詞的輸入修改量被傳遞。如果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)識(shí)符被用于唯一地識(shí)別主RNIC。例如,RNIC標(biāo)識(shí)符可以是RNIC的EIU-64值。主RNIC端口標(biāo)識(shí)符被用于唯一地識(shí)別主RNIC上,CQ與之相聯(lián)系的端口。例如,RNIC端口標(biāo)識(shí)符可以是端口號(hào),或者M(jìn)AC和IP地址的組合。備用RNIC標(biāo)識(shí)符被用于唯一地識(shí)別備用RNIC。備用RNIC端口標(biāo)識(shí)符被用于唯一地識(shí)別備用RNIC上,CQ與之相聯(lián)系的端口。
      參見(jiàn)圖13A,提供根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明跨越兩個(gè)RNIC的連接的例證初始化進(jìn)程的流程圖。如圖13A中所示,操作開(kāi)始于RNIC的詢問(wèn),以確定它們是否支持切換/切回(步驟1302)。該步驟既詢問(wèn)將被選為主RNIC的RNIC,又詢問(wèn)將被選為備用RNIC的RNIC。對(duì)于支持S/S,并且主機(jī)打算將其配置成S/S RNIC的每個(gè)RNIC,主機(jī)發(fā)出修改RNIC動(dòng)詞(步驟1304)。修改RNIC動(dòng)詞選擇將關(guān)于S/S和非S/S配置的QP號(hào)的范圍,CQ號(hào)的范圍和存儲(chǔ)器轉(zhuǎn)換與保護(hù)表?xiàng)l目的范圍。
      對(duì)于產(chǎn)生的每個(gè)CQ,主機(jī)發(fā)出產(chǎn)生CQ動(dòng)詞(步驟1306)。產(chǎn)生CQ動(dòng)詞規(guī)定與CQ相關(guān)的主RNIC,主RNIC端口,備用RNIC和備用RNIC端口。對(duì)于通過(guò)寄存器存儲(chǔ)區(qū)動(dòng)詞之一記錄的每個(gè)存儲(chǔ)區(qū),主機(jī)規(guī)定與該存儲(chǔ)器相關(guān)的主RNIC,主RNIC端口,備用RNIC和備用RNIC端口(步驟1308)。
      對(duì)于產(chǎn)生的每個(gè)QP,主機(jī)發(fā)出產(chǎn)生QP動(dòng)詞(步驟1310)。產(chǎn)生QP動(dòng)詞規(guī)定與QP相關(guān)的RNIC狀態(tài)(主或備用),主RNIC,主RNIC端口,備用RNIC和備用RNIC端口。
      對(duì)于通過(guò)分配存儲(chǔ)窗動(dòng)詞分配的每個(gè)存儲(chǔ)窗(步驟1312),主機(jī)規(guī)定與該存儲(chǔ)窗相關(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,但是正在沒(méi)有備用RNIC的情況下工作。
      如圖13B中所示,操作開(kāi)始于主RNIC的詢問(wèn),以確定將關(guān)于S/S和非S/S配置的QP號(hào)的范圍,CQ號(hào)的范圍,以及存儲(chǔ)器轉(zhuǎn)換和保護(hù)表?xiàng)l目的范圍(步驟1320)。備用RNIC也被詢問(wèn),以確定它是否支持切換/切回(也是步驟1320的一部分)。如果是,那么操作進(jìn)行到步驟1322;否則,操作被終止。
      在步驟1322中,主機(jī)向備用RNIC發(fā)出修改RNIC動(dòng)詞,并選擇將關(guān)于S/S和非S/S配置的QP號(hào)的范圍,CQ號(hào)的范圍,以及存儲(chǔ)器轉(zhuǎn)換和保護(hù)表?xiàng)l目的范圍(步驟1322)。對(duì)于將在備用RNIC上產(chǎn)生的每個(gè)CQ,主機(jī)發(fā)出產(chǎn)生CQ動(dòng)詞(步驟1324)。產(chǎn)生CQ動(dòng)詞規(guī)定與該CQ相聯(lián)系的主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口。
      對(duì)于將在主RNIC和備用RNIC之間共享的每個(gè)存儲(chǔ)區(qū),主機(jī)使用寄存器共享存儲(chǔ)器動(dòng)詞登記備用RNIC上的所有共享存儲(chǔ)區(qū)(步驟1326)。通過(guò)寄存器存儲(chǔ)區(qū)動(dòng)詞之一進(jìn)行登記,主機(jī)規(guī)定與存儲(chǔ)區(qū)相關(guān)的主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口。
      對(duì)于在備用RNIC上產(chǎn)生的每個(gè)QP,主機(jī)發(fā)出產(chǎn)生QP動(dòng)詞(步驟1328)。產(chǎn)生QP動(dòng)詞規(guī)定與該QP相關(guān)的RNIC狀態(tài)(備用),主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口。對(duì)于通過(guò)分配存儲(chǔ)窗動(dòng)詞分配的每個(gè)存儲(chǔ)窗,主機(jī)規(guī)定與該存儲(chǔ)窗相關(guān)的主RNIC,主RNIC端口,備用RNIC,和備用RNIC端口(步驟1330)。
      對(duì)于將在主RNIC上重新同步的每個(gè)QP,主機(jī)發(fā)出修改QP動(dòng)詞,使QP停頓并向該QP分配RNIC狀態(tài)(主要的);主RNIC和端口;和備用RNIC和端口(步驟1332)。對(duì)于將在主RNIC上重新同步的每個(gè)CQ,在使分配給該CQ的所有QP停頓之后,主機(jī)發(fā)出修改CQ動(dòng)詞,使該CQ停頓并向該CQ分配RNIC狀態(tài)(主要的);主RNIC和端口;和備用RNIC和端口(步驟1334)。
      對(duì)于將在主RNIC上重新同步的每個(gè)CQ,主機(jī)發(fā)出修改CQ動(dòng)詞,使CQ恢復(fù)活動(dòng)(步驟1336)。對(duì)于需要在主RNIC上重新同步的每個(gè)QP,主機(jī)發(fā)出修改QP動(dòng)詞,使該QP恢復(fù)活動(dòng)(步驟1338)。
      參見(jiàn)圖13C,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明主RNIC和備用RNIC之間使用的例證檢查點(diǎn)消息的示意圖。根據(jù)圖11,主RNIC 1100和備用RNIC 1104使用檢查點(diǎn)消息1106傳遞RNIC和QP狀態(tài)??芍苯油ㄟ^(guò)互連主RNIC和備用RNIC的架構(gòu)傳遞檢查點(diǎn)消息。也可通過(guò)例如主RNIC和備用RNIC都可訪問(wèn)的共享系統(tǒng)存儲(chǔ)區(qū),間接傳遞檢查點(diǎn)消息。
      圖11表示通過(guò)互連主RNIC和備用RNIC的架構(gòu)直接發(fā)送檢查點(diǎn)消息的例證情況。所述架構(gòu)可以是局域網(wǎng),可通過(guò)一個(gè)或多個(gè)TCP連接發(fā)送所述消息。架構(gòu)也可是存儲(chǔ)變換的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)信息的類型。該消息的下一字段是長(zhǎng)度,例如長(zhǎng)度1348,它用字節(jié)描述消息長(zhǎng)度。該消息的最后字段是公知的iSCSI,32位循環(huán)冗余校驗(yàn)(CRC32),例如CRC32 1352,被用于驗(yàn)證消息。每個(gè)消息定義在長(zhǎng)度1348和CRC32 1352之間攜帶的字段。OpCode和長(zhǎng)度字段的大小可以小于或大于所描述的OpCode和長(zhǎng)度字段的大小。使用的CRC多項(xiàng)式可不同于圖解說(shuō)明的那個(gè)CRC多項(xiàng)式。
      下表定義檢查點(diǎn)進(jìn)程使用的消息類型,接下來(lái)的部分描述檢查點(diǎn)進(jìn)程,包括檢查點(diǎn)消息的內(nèi)容。每個(gè)OpCode和長(zhǎng)度的值可不同于下表中所示的值,而不脫離本發(fā)明的精神。

      參見(jiàn)圖14,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明兩個(gè)RNIC使用的例證發(fā)送檢查點(diǎn)消息流和進(jìn)程的示意圖。RNIC通過(guò)使用QP WQE處理算法,尋找與出站TCP段相聯(lián)系的QP語(yǔ)境。下面是用于對(duì)從QP語(yǔ)境1412的SQ 1408發(fā)送的出站TCP段設(shè)置檢查點(diǎn)的檢查點(diǎn)消息流。
      假定SQ 1408具有準(zhǔn)備用于出站調(diào)度的TCP段。主RNIC 1404更新它的工作SQ S/S語(yǔ)境1224的本地副本的下述四個(gè)字段


      11負(fù)型液晶(negative type liquid crystal),Merck,德國(guó)12手性化合物,Merck,德國(guó)13負(fù)型液晶,Merck,德國(guó)將組合物填充到擁有兩片玻璃基片的單元中,在玻璃基片的內(nèi)表面上涂覆有氧化銦錫。(在實(shí)施例5I中,采用聚酰亞胺處理導(dǎo)電的ITO層)。玻璃基片被20微米的隔離物分開(kāi)。施加50-80伏特的電場(chǎng)(方波波形或正弦波波形)約1秒以驅(qū)動(dòng)面板。采用60Hz的頻率使單元轉(zhuǎn)換到散射狀態(tài)。需要高于閾值頻率的頻率使單元轉(zhuǎn)換到光學(xué)透明狀<p>在本地QP語(yǔ)境中更新了上述四個(gè)字段之后,備用RNIC 1480把更新提交SQ S/S語(yǔ)境發(fā)送消息1424發(fā)送給主RNIC 1404。OpCode1454被設(shè)置成x0003,更新提交SQ S/S語(yǔ)境發(fā)送消息1424。長(zhǎng)度被設(shè)置成x0004,即,更新提交SQ S/S語(yǔ)境發(fā)送消息的長(zhǎng)度。該長(zhǎng)度之后的五個(gè)字段被如下設(shè)置

      主RNIC 1404接收更新提交SQ S/S語(yǔ)境發(fā)送消息1424,并驗(yàn)證該消息。如果提交SQ S/S語(yǔ)境發(fā)送消息1424有效,例如CRC32有效,那么主RNIC 1404用提交SQ S/S語(yǔ)境消息1424的內(nèi)容更新它的提交SQ S/S語(yǔ)境的本地副本。即,它更新其提交SQ S/S語(yǔ)境1228的下述四個(gè)字段

      SQ 1408把TCP段放入出站調(diào)度器中,下一次發(fā)送來(lái)自SQ 1408的TCP段時(shí),調(diào)度器發(fā)送1400 TCP段。
      如果更新提交SQ S/S語(yǔ)境發(fā)送消息1424無(wú)效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒(méi)有收到它,那么主RNIC 1404將重發(fā)更新提交SQ S/S語(yǔ)境發(fā)送消息1424,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1480收到重復(fù)的更新工作SQ S/S語(yǔ)境發(fā)送消息1416,那么它將重發(fā)在前的更新提交SQ S/S語(yǔ)境發(fā)送消息1424。此時(shí),出站發(fā)送已被設(shè)置檢查點(diǎn)。
      現(xiàn)在,說(shuō)明當(dāng)TCP ACK段被主RNIC 1404接收,并且與QP語(yǔ)境1412的SQ 1408相聯(lián)系時(shí),使用的檢查點(diǎn)消息。首先,在中速匹配緩沖區(qū)中接收輸入的TCP ACK段。如果TCP ACK段無(wú)效,那么丟棄它。如果TCP ACK段有效,那么主RNIC 1404更新它的工作SQS/S語(yǔ)境1224的本地副本的下述四個(gè)字段。

      在本地QP語(yǔ)境中更新了上述四個(gè)字段之后,主RNIC 1404向備用RNIC 1480發(fā)送更新工作SQ S/S語(yǔ)境Ack消息1432。OpCode 1454被設(shè)置成x0004,即,更新工作SQ S/S語(yǔ)境Ack消息1432。長(zhǎng)度被設(shè)置成x0004,即,更新工作SQ S/S語(yǔ)境Ack消息的長(zhǎng)度。該長(zhǎng)度之后的五個(gè)字段被如下設(shè)置

      備用RNIC 1480接收更新工作SQ S/S語(yǔ)境Ack消息1432并驗(yàn)證該消息。如果工作SQ S/S語(yǔ)境消息1416有效,例如CRC32有效,那么備用RNIC 1480利用工作SQ S/S語(yǔ)境Ack消息1432的內(nèi)容更新它的工作SQ S/S語(yǔ)境1224的本地副本。備用RNIC 1480上工作SQ S/S語(yǔ)境1224的本地副本的更新將更新工作SQ S/S語(yǔ)境1224的下述四個(gè)字段

      備用RNIC 1480隨后把它的工作SQ S/S語(yǔ)境1224的本地副本復(fù)制到它的提交SQ S/S語(yǔ)境1228的本地副本。在備用RNIC 1480上,提交SQ S/S語(yǔ)境1228的下述四個(gè)字段被更新

      在本地QP語(yǔ)境中更新了上述四個(gè)字段之后,備用RNIC 1480向主RNIC 1404發(fā)送更新提交SQ S/S語(yǔ)境Ack消息1436。OpCode1454被設(shè)置成x0005,即,更新提交SQ S/S語(yǔ)境Ack消息1436。長(zhǎng)度被設(shè)置成x0004,即,更新提交SQ S/S語(yǔ)境Ack消息的長(zhǎng)度。該長(zhǎng)度之后的五個(gè)字段被如下設(shè)置

      主RNIC 1404接收更新提交SQ S/S語(yǔ)境Ack消息1436并驗(yàn)證該消息。如果提交SQ S/S語(yǔ)境Ack消息1436有效,例如CRC32有效,那么主RNIC 1404利用提交SQ S/S語(yǔ)境Ack消息1436的內(nèi)容更新它的提交SQ S/S語(yǔ)境的本地副本。即,它更新其工作SQ S/S語(yǔ)境的下述四個(gè)字段

      如果更新提交SQ S/S語(yǔ)境Ack消息1436無(wú)效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒(méi)有收到它,那么主RNIC 1404將重發(fā)更新提交SQ S/S語(yǔ)境Ack消息1436,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1480收到重復(fù)的更新工作SQ S/S語(yǔ)境Ack消息1432,那么它將重發(fā)在前的更新提交SQ S/S語(yǔ)境Ack消息1436。此時(shí),輸入的Ack已被設(shè)置檢查點(diǎn)。
      參見(jiàn)圖15,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明由兩個(gè)RNIC使用的例證接收檢查點(diǎn)消息流和進(jìn)程的示意圖。RNIC通過(guò)使用公知的TCP/IP五倍查尋算法,尋找與入站TCP段相聯(lián)系的QP語(yǔ)境。當(dāng)收到入站TCP段時(shí),使用TCP/IP五倍查尋來(lái)確定與入站TCP段相聯(lián)系的QP。
      下面是當(dāng)入站TCP段以QP語(yǔ)境1512的RQ 1508為目標(biāo)時(shí),使用的例證檢查點(diǎn)消息流。在中速匹配緩沖區(qū)中接收入站TCP段。如果TCP段有效,那么它被放入最終的目的地;否則它被丟棄。
      在TCP段被置入其最終目的地之后,主RNIC 1504更新它的工作RQ S/S語(yǔ)境1232的本地副本的下述四個(gè)字段

      在本地QP語(yǔ)境中更新了上述四個(gè)字段之后,主RNIC 1504向備用RNIC 1580發(fā)送更新工作RQ S/S語(yǔ)境接收消息1516。OpCode15454被設(shè)置成x0006,即,更新工作RQ S/S語(yǔ)境接收消息1516。長(zhǎng)度被設(shè)置成x0004,即,更新工作RQ S/S語(yǔ)境接收消息的長(zhǎng)度。該長(zhǎng)度之后的五個(gè)字段被如下設(shè)置

      備用RNIC 1580接收更新工作RQ S/S語(yǔ)境接收消息1516,并驗(yàn)證該消息。如果更新工作RQ S/S語(yǔ)境接收消息1516有效,例如CRC321562有效,那么備用RNIC 1580用更新工作RQ S/S語(yǔ)境接收消息1516的內(nèi)容更新它的工作RQ S/S語(yǔ)境1232的本地副本。備用RNIC1580上的工作SQ S/S語(yǔ)境1232的本地副本的更新將更新工作SQ S/S語(yǔ)境1232的下述四個(gè)字段

      備用RNIC 1580隨后把它的工作RQ S/S語(yǔ)境1232的本地副本復(fù)制到它的提交RQ S/S語(yǔ)境1236的本地副本。在備用RNIC 1580上,提交RQ S/S語(yǔ)境1236的下述四個(gè)字段被更新

      在本地QP語(yǔ)境中更新了上述四個(gè)字段之后,備用RNIC 1580把更新提交SQ S/S語(yǔ)境接收消息1524發(fā)送給主RNIC 1504。OpCode1554被設(shè)置成x0007,即,更新提交RQ S/S語(yǔ)境接收消息1524。長(zhǎng)度被設(shè)置成x0004,即,更新提交RQ S/S語(yǔ)境接收消息的長(zhǎng)度。該長(zhǎng)度之后的五個(gè)字段被如下設(shè)置

      主RNIC 1504接收更新提交RQ S/S語(yǔ)境接收消息1524,并驗(yàn)證該消息。如果提交RQ S/S語(yǔ)境接收消息1424有效,例如CRC32有效,那么主RNIC 1404用提交RQ S/S語(yǔ)境接收消息1524的內(nèi)容更新它的提交RQ S/S語(yǔ)境1236的本地副本。即,它更新其提交RQ S/S語(yǔ)境1236的下述四個(gè)字段


      如果更新提交RQ S/S語(yǔ)境接收消息1524無(wú)效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒(méi)有收到它,那么主RNIC 1504將重發(fā)更新提交RQ S/S語(yǔ)境接收消息1524,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1580收到重復(fù)的更新工作RQ S/S語(yǔ)境接收消息1516,那么它將重發(fā)在前的更新提交RQ S/S語(yǔ)境接收消息1524。此時(shí),入站發(fā)送已被設(shè)置檢查點(diǎn)。
      下面說(shuō)明當(dāng)TCP ACK段從主RNIC 1504發(fā)送,并且與QP語(yǔ)境1512的RQ 1508相聯(lián)系時(shí),使用的例證檢查點(diǎn)消息。主RNIC 1504更新它的工作RQ S/S語(yǔ)境1232的本地副本的下述四個(gè)字段。

      在本地QP語(yǔ)境中更新了上述四個(gè)字段之后,主RNIC 1504向備用RNIC 1580發(fā)送更新工作RQ S/S語(yǔ)境Ack消息1532。OpCode 1554被設(shè)置成x0008,即,更新工作RQ S/S語(yǔ)境Ack消息1532。長(zhǎng)度被設(shè)置成x0004,即,更新工作RQ S/S語(yǔ)境Ack消息的長(zhǎng)度。該長(zhǎng)度之后的五個(gè)字段被如下設(shè)置

      備用RNIC 1580接收更新工作RQ S/S語(yǔ)境Ack消息1532并驗(yàn)證該消息。如果工作RQ S/S語(yǔ)境Ack消息1532有效,例如CRC32有效,那么備用RNIC 1580利用工作RQ S/S語(yǔ)境Ack消息1532的

      所有工作SQ切換/切回字段包含還未由備用RNIC通過(guò)檢查點(diǎn)ACK設(shè)置檢查點(diǎn)(checkpointed)的信息。主RNIC和備用RNIC包含所有這些字段。“工作的當(dāng)前發(fā)送WQE號(hào)”識(shí)別發(fā)送隊(duì)列中目前正被處理的WQE?!爱?dāng)前發(fā)送WQE中的工作字節(jié)偏移量”識(shí)別對(duì)于工作的當(dāng)前發(fā)送WQE要處理的下一字節(jié)?!跋乱话l(fā)送TCP段的工作序列號(hào)”識(shí)別將用于當(dāng)前發(fā)送WQE中的工作字節(jié)偏移量的TCP序列號(hào)?!跋乱话l(fā)送TCP段的工作窗口值”識(shí)別從當(dāng)前發(fā)送WQE中的工作字節(jié)偏移量開(kāi)始的,可用于要發(fā)送的下一TCP段的TCP窗口的大小。“工作的當(dāng)前接收Ack WQE號(hào)”識(shí)別已由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的,發(fā)送隊(duì)列中目前正被處理的WQE?!爱?dāng)前接收Ack WQE中的工作字節(jié)偏移量”識(shí)別對(duì)于工作的當(dāng)前接收ACK WQE,要由遠(yuǎn)程節(jié)點(diǎn)確認(rèn)的下一字節(jié)?!跋乱籖cv Ack TCP段的工作序列號(hào)”識(shí)別遠(yuǎn)程節(jié)點(diǎn)預(yù)期的,并且與當(dāng)前接收Ack WQE中的工作字節(jié)偏移量相聯(lián)系的下一TCP序列號(hào)?!跋乱籖cv Ack TCP段的工作窗口值”識(shí)別由從遠(yuǎn)程節(jié)點(diǎn)回送的最后的TCP窗口大小得到的,并且與當(dāng)前接收Ack WQE中的工作字節(jié)偏移量相聯(lián)系的發(fā)送窗口中的變化。
      提交的SQ切換/切回語(yǔ)境1228包含當(dāng)產(chǎn)生QP時(shí),被設(shè)置為0的下述信息


      如果更新提交RQ S/S語(yǔ)境Ack消息1536無(wú)效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒(méi)有收到它,那么主RNIC 1504將重發(fā)更新提交RQS/S語(yǔ)境Ack消息1536,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1580收到重復(fù)的更新工作RQ S/S語(yǔ)境Ack消息1532,那么它將重發(fā)在前的更新提交RQ S/S語(yǔ)境Ack消息1536。此時(shí),出站Ack已被設(shè)置檢查點(diǎn)。
      參見(jiàn)圖16,提供了根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明由兩個(gè)RNIC使用的例證完成檢查點(diǎn)工作流和進(jìn)程的示意圖。RNIC通過(guò)利用公知的QP WQE處理算法尋找與已完成的工作隊(duì)列元素相聯(lián)系的CQ語(yǔ)境,并利用公知的CQ CQE處理算法產(chǎn)生CQE。
      下面是用于由RNIC 1604對(duì)加入暴露給主機(jī)的CQ 1608中的完成隊(duì)列元素設(shè)置檢查點(diǎn)的檢查點(diǎn)消息流。假定CQ 1608具有準(zhǔn)備插入CQ 1608的CQE。CQ 1608把該CQE插入CQ 1608,并更新它的工作CQ S/S語(yǔ)境1272的本地副本的下述字段。

      在本地CQ語(yǔ)境中更新了上述字段之后,主RNIC 1604把更新工作CQ S/S語(yǔ)境消息1616發(fā)送給備用RNIC 1680。OpCode 1654被設(shè)置成x000A,即,更新工作CQ S/S語(yǔ)境消息1616。長(zhǎng)度被設(shè)置成x0004,即,更新工作CQ S/S語(yǔ)境消息的長(zhǎng)度。該長(zhǎng)度之后的兩個(gè)字段被如下設(shè)置

      備用RNIC 1680接收更新工作CQ S/S語(yǔ)境消息1616,并驗(yàn)證該消息。如果更新工作CQ S/S語(yǔ)境消息1616有效,例如CRC32 1662有效,那么備用RNIC 1680用工作CQ S/S語(yǔ)境消息1516的內(nèi)容更新它的工作CQ S/S語(yǔ)境1272的本地副本。備用RNIC 1680上工作CQS/S語(yǔ)境1272的本地副本的更新會(huì)更新工作CQ S/S語(yǔ)境1272的下述字段

      備用RNIC 1680隨后把它的工作CQ S/S語(yǔ)境1624的本地副本復(fù)制到它的提交CQ S/S語(yǔ)境1276的本地副本。提交CQ S/S語(yǔ)境1276的下述字段在備用RNIC 1680上被更新

      在本地QP語(yǔ)境中更新了上述字段之后,備用RNIC 1680把更新提交CQ S/S語(yǔ)境消息1624發(fā)送給主RNIC 1604。OpCode 1654被設(shè)置成x000B,即,更新提交CQ S/S語(yǔ)境消息1624。長(zhǎng)度被設(shè)置成x0004,即,更新提交CQ S/S語(yǔ)境消息的長(zhǎng)度。該長(zhǎng)度之后的兩個(gè)字段被如下設(shè)置

      主RNIC 1604接收更新提交CQ S/S語(yǔ)境消息1624并驗(yàn)證該消息。如果提交CQ S/S語(yǔ)境消息1624有效,例如CRC32有效,那么主RNIC 1604用提交CQ S/S語(yǔ)境消息1624的內(nèi)容更新它的提交CQS/S語(yǔ)境1276的本地副本。即,它更新其的提交CQ S/S語(yǔ)境1276的下述字段

      如果更新提交CQ S/S語(yǔ)境消息1624無(wú)效,或者如果在檢查點(diǎn)超時(shí)窗口內(nèi)沒(méi)有收到它,那么主RNIC 1604將重發(fā)更新提交CQ S/S語(yǔ)境消息1624,直到達(dá)到檢查點(diǎn)重試次數(shù)規(guī)定的次數(shù)為止。如果備用RNIC 1680收到重復(fù)的更新工作CQ S/S語(yǔ)境消息1616,那么它將重發(fā)在前的更新提交CQ S/S語(yǔ)境消息1624。此時(shí),CQE已被設(shè)置檢查點(diǎn)。
      參見(jiàn)圖17,圖17是根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,圖解說(shuō)明由兩個(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是可通過(guò)詢問(wèn)RNIC動(dòng)詞詢問(wèn),并可通過(guò)修改RNIC動(dòng)詞修改的可編程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。長(zhǎng)度被設(shè)置成x0003,即,“I Am Alive”消息的長(zhǎng)度。該長(zhǎng)度之后的三個(gè)字段被如下設(shè)置

      對(duì)于多端口RNIC,“I Am Alive”消息可被實(shí)現(xiàn)成傳送長(zhǎng)度字段之后的數(shù)目可變的字段,例如下述字段(這里N是RNIC支持的端口的最大數(shù)目)

      如果在“I Am Alive”遞減計(jì)時(shí)器期滿之前,備用RNIC 1796沒(méi)有收到“I Am Alive”消息,那么它通過(guò)向主機(jī)發(fā)送切換請(qǐng)求異步事件1708,啟動(dòng)切換。主機(jī)接收切換請(qǐng)求異步事件1708,并嘗試通過(guò)詢問(wèn)RNIC 1712訪問(wèn)主RNIC 1700。主RNIC 1700返回詢問(wèn)RNIC結(jié)果1716。
      如果詢問(wèn)RNIC 1712成功,并且詢問(wèn)RNIC結(jié)果1716反映主RNIC 1700是全功能的,并且處于無(wú)錯(cuò)狀態(tài),那么主機(jī)將A)通過(guò)交換機(jī)管理協(xié)議,請(qǐng)求使備用RNIC 1796不能為它所連接的交換機(jī)訪問(wèn);B)通過(guò)發(fā)出修改RNIC 1776動(dòng)詞,把備用RNIC 1796的LAN地址(例如以太網(wǎng)MAC地址)加入主RNIC 1700 LAN地址表;C)通過(guò)網(wǎng)絡(luò)地址改變協(xié)議(例如無(wú)償ARP回答),請(qǐng)求另外的LAN地址(即備用RNIC 1796先前使用的地址)被識(shí)別成主RNIC1700的地址之一;D)使用主RNIC 1700上的修改CQ 1790來(lái)改變CQC 1712的狀態(tài);E)通過(guò)把CQC 1712主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),主RNIC 1700使CQC 1712處于主狀態(tài);F)使用主RNIC 1700上的修改QP 1788來(lái)改變QPC 1716的狀態(tài);G)通過(guò)把QPC 1716主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),主RNIC 1700使QPC 1716處于主RTS狀態(tài)。
      對(duì)利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有CQ進(jìn)行步驟D和E。可對(duì)修改CQ 1790進(jìn)行優(yōu)化,所述修改CQ 1790包含發(fā)布成修改一系列CQ的修改CQ集動(dòng)詞,而不是發(fā)布成單獨(dú)的修改CQ動(dòng)詞的修改CQ 1790。
      對(duì)利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有QP進(jìn)行步驟F和G。可對(duì)修改QP 1788進(jìn)行優(yōu)化,所述修改QP 1788涉及發(fā)布修改一系列QP的修改QP集動(dòng)詞,而不是發(fā)送多個(gè)單獨(dú)的修改QP動(dòng)詞。
      如果詢問(wèn)RNIC 1712失敗(例如主RNIC 1700未能返回詢問(wèn)RNIC結(jié)果1716),或者如果詢問(wèn)RNIC 1712成功,但是詢問(wèn)RNIC結(jié)果1716錯(cuò)誤,或者反映主RNIC 1700處于出錯(cuò)狀態(tài),那么主機(jī)將A)通過(guò)發(fā)出修改RNIC 1720,把主RNIC 1700的LAN地址(例如以太網(wǎng)MAC地址)加入備用RNIC 1796 LAN地址表;B)通過(guò)公知的交換機(jī)管理協(xié)議,請(qǐng)求使主RNIC 1700不能為它所連接的交換機(jī)訪問(wèn);C)通過(guò)公知的網(wǎng)絡(luò)地址改變協(xié)議(例如無(wú)償ARP回答),請(qǐng)求另外的LAN地址(即主RNIC 1700先前使用的地址)被識(shí)別成備用RNIC 1796的地址之一;D)使用備用RNIC 1796上的修改CQ 1782來(lái)改變CQC 1724的狀態(tài);E)通過(guò)把CQC 1724主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),備用RNIC 1796使CQC 1824處于主狀態(tài);F)使用備用RNIC 1796上的修改QP 1780來(lái)改變QPC 1720的狀態(tài);G)通過(guò)把QPC 1720主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),備用RNIC 1796使QPC1720處于主RTS狀態(tài)。
      對(duì)利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有CQ進(jìn)行步驟D和E??蓪?duì)修改CQ 1782進(jìn)行優(yōu)化,所述修改CQ 1782涉及發(fā)布成修改一系列CQ的修改CQ集動(dòng)詞,而不是發(fā)布多個(gè)單獨(dú)的修改CQ動(dòng)詞。
      對(duì)利用作為主RNIC 1700的主RNIC和作為備用RNIC 1796的備用RNIC建立的所有QP進(jìn)行步驟F和G??蓪?duì)修改QP 1780進(jìn)行優(yōu)化,所述修改QP 1780涉及發(fā)布修改一系列QP的修改QP集動(dòng)詞,而不是發(fā)布單獨(dú)的修改QP動(dòng)詞。
      現(xiàn)在參見(jiàn)圖18,提供了根據(jù)本發(fā)明的優(yōu)選實(shí)施例,圖解說(shuō)明由兩個(gè)RNIC使用的例證備用RNIC禁用消息流和進(jìn)程的示意圖。圖18中一開(kāi)始,QPC 1816是主QPC,QPC 1820是備用QPC。圖18中一開(kāi)始,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í)器被重置?!癐 Am Alive”消息使OpCode1854被設(shè)置成x0000,即,“I Am Alive”消息1804和1850。長(zhǎng)度被設(shè)置成x0003,即,“I Am Alive”消息的長(zhǎng)度。該長(zhǎng)度之后的三個(gè)字段被如下設(shè)置

      對(duì)于多端口RNIC,“I Am Alive”消息可被實(shí)現(xiàn)成傳送長(zhǎng)度字段之后的數(shù)目可變的字段,例如下述字段(這里N是RNIC支持的端口的最大數(shù)目)

      如果在“I Am Alive”遞減計(jì)時(shí)器期滿之前,主RNIC 1800沒(méi)有收到“I Am Alive”消息1804,那么它通過(guò)向主機(jī)發(fā)送禁用備用RNIC異步事件1808,開(kāi)始禁用備用RNIC。主機(jī)接收禁用備用RNIC異步事件1808,并嘗試通過(guò)詢問(wèn)RNIC 1812訪問(wèn)備用RNIC 1896。備用RNIC1896返回詢問(wèn)RNIC結(jié)果1816。
      如果詢問(wèn)RNIC 1812成功,并且詢問(wèn)RNIC結(jié)果1816反映備用RNIC 1896是全功能的,并且處于無(wú)錯(cuò)狀態(tài),那么主機(jī)將A)通過(guò)發(fā)出修改RNIC 1820,把主RNIC 1800的LAN地址(例如以太網(wǎng)MAC地址)加入備用RNIC 1896 LAN地址表;B)通過(guò)公知的交換機(jī)管理協(xié)議,請(qǐng)求使主RNIC 1800不能被它所連接的交換機(jī)訪問(wèn);C)通過(guò)公知的網(wǎng)絡(luò)地址改變協(xié)議(例如無(wú)償ARP回答),請(qǐng)求另外的LAN地址(即主RNIC 1800先前使用的地址)被識(shí)別成備用RNIC 1896的地址之一;D)使用備用RNIC 1896上的修改CQ 1882來(lái)改變CQC 1824的狀態(tài);E)通過(guò)把CQC 1824主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),備用RNIC 1896使CQC 1824處于主狀態(tài);F)使用備用RNIC 1896上的修改QP 1880來(lái)改變QPC 1820的狀態(tài);G)通過(guò)把QPC 1820主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),備用RNIC 1896使QPC1820處于主RTS狀態(tài)。對(duì)利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有CQ進(jìn)行步驟D和E??蓪?duì)修改CQ 1882進(jìn)行優(yōu)化,所述修改CQ 1882涉及發(fā)布修改一系列CQ的修改CQ集動(dòng)詞,而不是發(fā)布多個(gè)單獨(dú)的修改CQ動(dòng)詞。
      對(duì)利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有QP進(jìn)行步驟F和G??蓪?duì)修改QP 1880進(jìn)行優(yōu)化,所述修改QP 1880涉及發(fā)布修改一系列QP的修改QP集動(dòng)詞,而不是發(fā)布多個(gè)單獨(dú)的修改QP動(dòng)詞。
      如果詢問(wèn)RNIC 1812失敗(例如備用RNIC 1896未能返回詢問(wèn)RNIC結(jié)果1816),或者如果詢問(wèn)RNIC 1812成功,但是詢問(wèn)RNIC結(jié)果1816錯(cuò)誤,或者反映備用RNIC 1896處于出錯(cuò)狀態(tài),那么主機(jī)將
      A)通過(guò)公知的交換機(jī)管理協(xié)議,請(qǐng)求使備用RNIC 1896不能為它所連接的交換機(jī)訪問(wèn);B)通過(guò)發(fā)出修改RNIC 1876,把備用RNIC 1896的LAN地址(例如以太網(wǎng)MAC地址)加入主RNIC 1800 LAN地址表;C)通過(guò)公知的網(wǎng)絡(luò)地址改變協(xié)議(例如無(wú)償ARP回答),請(qǐng)求另外的LAN地址(即備用RNIC 1896先前使用的地址)被識(shí)別成主RNIC 1800的地址之一;D)使用主RNIC 1800上的修改CQ 1890來(lái)改變CQC 1812的狀態(tài);E)通過(guò)把CQC 1812主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用狀態(tài)改變成主狀態(tài),主RNIC 1800使CQC 1812處于主狀態(tài);F)使用主RNIC 1800上的修改QP 1888來(lái)改變QPC 1816的狀態(tài);G)通過(guò)把QPC 1816主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境中的RNIC狀態(tài)從備用RTS狀態(tài)改變成主RTS狀態(tài),主RNIC 1800使QPC 1816處于主RTS狀態(tài)。
      對(duì)利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有CQ進(jìn)行步驟D和E??蓪?duì)修改CQ 1890進(jìn)行優(yōu)化,所述修改CQ 1890涉及發(fā)布成修改一系列CQ的修改CQ集動(dòng)詞,而不是發(fā)布多個(gè)單獨(dú)的修改CQ動(dòng)詞。
      對(duì)利用作為主RNIC 1800的主RNIC和作為備用RNIC 1896的備用RNIC建立的所有QP進(jìn)行步驟F和G??蓪?duì)修改QP 1888進(jìn)行優(yōu)化,所述修改QP 1888涉及發(fā)布修改一系列QP的修改QP集動(dòng)詞,而不是發(fā)布多個(gè)單獨(dú)的修改QP動(dòng)詞。
      從而,借助本發(fā)明的實(shí)施例,提供RNIC切換和切回支持。當(dāng)在主RNIC上發(fā)生計(jì)劃或非計(jì)劃的停機(jī)時(shí),通過(guò)利用在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中提供的機(jī)構(gòu),所有未完成的連接被轉(zhuǎn)換到備用RNIC,備用RNIC繼續(xù)通信處理。
      重要的是注意雖然在全功能數(shù)據(jù)處理系統(tǒng)的語(yǔ)境中描述了本發(fā)明,不過(guò)本領(lǐng)域的普通技術(shù)人員會(huì)認(rèn)識(shí)到能夠以指令的計(jì)算機(jī)可讀介質(zhì)的形式分布本發(fā)明的優(yōu)選實(shí)施例的進(jìn)程,并且本發(fā)明同樣適用,與實(shí)際用于進(jìn)行所述分布的信號(hào)承載介質(zhì)的特定類型無(wú)關(guān)。計(jì)算機(jī)可讀介質(zhì)的例子包括可記錄型介質(zhì),例如軟盤(pán)、硬盤(pán)驅(qū)動(dòng)器、RAM、CD-ROM、DVD-ROM,和傳輸型介質(zhì),例如數(shù)字和模擬通信鏈路、利用諸如射頻和光波傳輸之類傳輸形式的有線或無(wú)線通信鏈路。計(jì)算機(jī)可讀介質(zhì)可采取編碼格式的形式,所述編碼格式被解碼,以便實(shí)際用在特定的數(shù)據(jù)處理系統(tǒng)中。
      出于舉例說(shuō)明的目的,已給出了本發(fā)明的說(shuō)明,所述說(shuō)明不是窮盡的,也不打算把本發(fā)明局限于所公開(kāi)的形式。對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),許多修改和變化是明顯的。
      權(quán)利要求
      1.一種在數(shù)據(jù)處理系統(tǒng)中的啟用了遠(yuǎn)程直接存儲(chǔ)器存取的主網(wǎng)絡(luò)接口控制器(主RNIC)和備用RNIC之間執(zhí)行切換的方法,包括產(chǎn)生用于主RNIC和備用RNIC的公共隊(duì)列對(duì),以致主RNIC和備用RNIC共享所述公共隊(duì)列對(duì);檢測(cè)切換事件;和響應(yīng)切換事件的檢測(cè),把隊(duì)列對(duì)的處理從主RNIC切換到備用RNIC。
      2.按照權(quán)利要求1所述的方法,其中產(chǎn)生公共隊(duì)列對(duì)包括向主RNIC和備用RNIC分配隊(duì)列范圍,以致主RNIC和備用RNIC共享該隊(duì)列范圍內(nèi)的隊(duì)列。
      3.按照權(quán)利要求1或2所述的方法,其中產(chǎn)生公共隊(duì)列對(duì)包括把一系列存儲(chǔ)器轉(zhuǎn)換保護(hù)表?xiàng)l目分配給主RNIC和備用RNIC。
      4.按照前述任意權(quán)利要求所述的方法,還包括產(chǎn)生用于主RNIC和備用RNIC的公共完成隊(duì)列,以致主RNIC和備用RNIC共享所述公共完成隊(duì)列;和如果檢測(cè)到切換事件,則把公共完成隊(duì)列的操作切換到備用RNIC。
      5.按照前述任意權(quán)利要求所述的方法,其中把隊(duì)列對(duì)的處理從主RNIC切換到備用RNIC包括把主RNIC的地址添加到備用RNIC的地址表中;使主RNIC對(duì)與主RNIC和備用RNIC耦接的交換機(jī)是不可訪問(wèn)的;和在交換機(jī)中,使主RNIC的地址可被識(shí)別成備用RNIC的地址。
      6.按照前述任意權(quán)利要求所述的方法,其中把隊(duì)列對(duì)的處理從主RNIC切換到備用RNIC包括修改用于完成隊(duì)列語(yǔ)境的主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境信息,以致備用RNIC被識(shí)別成主RNIC;和修改隊(duì)列對(duì)語(yǔ)境的主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境信息,以致備用RNIC被識(shí)別成主RNIC。
      7.按照權(quán)利要求6所述的方法,其中保持狀態(tài)信息包括保持主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境數(shù)據(jù)結(jié)構(gòu),所述主RNIC和備用RNIC標(biāo)識(shí)語(yǔ)境數(shù)據(jù)結(jié)構(gòu)包括RNIC切換狀態(tài),主RNIC標(biāo)識(shí)符,主RNIC端口標(biāo)識(shí)符,備用RNIC標(biāo)識(shí)符和備用RNIC端口標(biāo)識(shí)符中的至少之一。
      8.按照權(quán)利要求6或7所述的方法,其中保持狀態(tài)信息包括保持具有用于主RNIC和備用RNIC的每個(gè)公共完成隊(duì)列的條目的完成隊(duì)列語(yǔ)境表。
      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ì)列切換語(yǔ)境信息的裝置;把更新工作發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息發(fā)送給備用RNIC的裝置;從備用RNIC接收更新提交發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息的裝置;用更新提交發(fā)送隊(duì)列切換語(yǔ)境檢查點(diǎn)消息的內(nèi)容更新提交發(fā)送隊(duì)列切換語(yǔ)境的本地副本的裝置;和從發(fā)送隊(duì)列發(fā)送數(shù)據(jù)段的裝置。
      全文摘要
      提供一種支持RNIC(啟用了RDAM的NIC)切換和切回的方法、計(jì)算機(jī)程序產(chǎn)品和分布式數(shù)據(jù)處理系統(tǒng)。當(dāng)在主RNIC上發(fā)生計(jì)劃或非計(jì)劃的停機(jī)時(shí),通過(guò)利用本發(fā)明中提供的機(jī)構(gòu),所有未完成的連接被切換到備用RNIC,備用RNIC繼續(xù)通信處理。另外,利用本發(fā)明中提供的機(jī)構(gòu),連接也可被切換回來(lái)。
      文檔編號(hào)H04L29/06GK1679003SQ03820988
      公開(kāi)日2005年10月5日 申請(qǐng)日期2003年8月5日 優(yōu)先權(quán)日2002年9月5日
      發(fā)明者威廉·托德·伯伊德, 道格拉斯·約瑟夫, 邁克爾·安托尼·考, 雷納多·約翰·雷西奧 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1