為內(nèi)存,用于存放數(shù)據(jù)和程序,可以是一個(gè)或多個(gè)集成電路或內(nèi)存條。
[0048]應(yīng)用程序可以是處理器上運(yùn)行的應(yīng)用程序,例如:數(shù)據(jù)庫(kù)應(yīng)用程序、存儲(chǔ)應(yīng)用程序、商業(yè)分析應(yīng)用程序、高性能計(jì)算應(yīng)用程序等等。
[0049]請(qǐng)參閱圖3,圖3是本發(fā)明實(shí)施例提供的一種RDMA實(shí)現(xiàn)方法的流程示意圖,如圖3所示,包括以下步驟:
[0050]301、發(fā)送端向接收端發(fā)送攜帶有數(shù)據(jù)的寫請(qǐng)求。
[0051]上述寫請(qǐng)求可以是理解為發(fā)送端向接收端發(fā)送用于請(qǐng)求將所述數(shù)據(jù)寫入接收端的存儲(chǔ)器的請(qǐng)求消息。另外,上述寫請(qǐng)求可以包括寫命令和數(shù)據(jù)。
[0052]該步驟可以是發(fā)送端的應(yīng)用程序產(chǎn)生寫請(qǐng)求,應(yīng)用程序?qū)懻?qǐng)求提交給發(fā)送端的RNIC,RNIC再向接收端發(fā)送該寫請(qǐng)求。
[0053]302、接收端接收發(fā)送端發(fā)送的攜帶有數(shù)據(jù)的寫請(qǐng)求。
[0054]該步驟可以是接收端的RNIC接收發(fā)送端發(fā)送的寫請(qǐng)求。
[0055]303、接收端響應(yīng)所述寫請(qǐng)求,將所述數(shù)據(jù)寫入存儲(chǔ)器中。
[0056]接收端接收到上述寫請(qǐng)求后,就可以獲取上述數(shù)據(jù),從而可以將該數(shù)據(jù)寫入存儲(chǔ)器中。例如:接收端的RNIC通過(guò)直接內(nèi)存訪問(wèn)(Direct Memory Access,DMA)方法將數(shù)據(jù)寫入存儲(chǔ)器中。
[0057]304、接收端在所述數(shù)據(jù)寫入到所述存儲(chǔ)器后,向所述發(fā)送端發(fā)送攜帶有所述寫請(qǐng)求的請(qǐng)求完成狀態(tài)的響應(yīng)消息。
[0058]在數(shù)據(jù)寫入到存儲(chǔ)器中后,就可以向發(fā)送端返回上述響應(yīng)消息,以告訴發(fā)送端請(qǐng)求完成狀態(tài)。該步驟可以是接收端的RNIC向發(fā)送端發(fā)送上述響應(yīng)消息。另外,上述請(qǐng)求完成狀態(tài)可以包括寫入成功狀態(tài)或者寫入失敗狀態(tài)。
[0059]305、發(fā)送端接收所述接收端發(fā)送的攜帶有所述寫請(qǐng)求的請(qǐng)求完成狀態(tài)的響應(yīng)消息,其中,所述響應(yīng)消息是所述接收端在響應(yīng)所述寫請(qǐng)求將所述數(shù)據(jù)寫入到存儲(chǔ)器后發(fā)送的。
[0000]該步驟可以是發(fā)送端的RNIC接收上述響應(yīng)消息。另外,發(fā)送端的RNIC接收到上述響應(yīng)消息后,還可以將該響應(yīng)消息傳輸給應(yīng)用程序,以通知應(yīng)用程序接收端針對(duì)寫請(qǐng)求的請(qǐng)求完成狀態(tài)。
[0061 ] 另外,本實(shí)施例中,上述寫請(qǐng)求可以理解為RDMA WRITE命令。
[0062]本實(shí)施例中,通過(guò)上述步驟可以實(shí)現(xiàn)通過(guò)傳輸一個(gè)寫請(qǐng)求和一個(gè)響應(yīng)消息就可以完成數(shù)據(jù)寫入,從而相比現(xiàn)有技術(shù)傳輸寫請(qǐng)求和讀請(qǐng)求,可以降低時(shí)延和減少網(wǎng)絡(luò)帶寬消耗。
[0063]請(qǐng)參閱圖4,圖4是本發(fā)明實(shí)施例提供的另一種RDMA實(shí)現(xiàn)方法的流程示意圖,如圖4所示,包括以下步驟:
[0064]401、發(fā)送端向接收端發(fā)送攜帶有數(shù)據(jù)的寫請(qǐng)求。
[0065]402、接收端接收發(fā)送端發(fā)送的攜帶有數(shù)據(jù)的寫請(qǐng)求。
[0066]403、接收端響應(yīng)所述寫請(qǐng)求,將所述數(shù)據(jù)寫入存儲(chǔ)器中。
[0067]本實(shí)施例中,上述寫請(qǐng)求還可以攜帶有CRC值,其中,該CRC值是發(fā)送端對(duì)寫請(qǐng)求攜帶的數(shù)據(jù)進(jìn)行運(yùn)算得到的CRC值,這樣通過(guò)該CRC值可以校驗(yàn)寫請(qǐng)求的傳輸過(guò)程攜帶的數(shù)據(jù)是否損壞或者在接收端進(jìn)行寫操作時(shí)是否損壞等。該實(shí)現(xiàn)方式中,步驟403可以包括:
[0068]使用所述CRC值對(duì)所述數(shù)據(jù)進(jìn)行CRC校驗(yàn),當(dāng)校驗(yàn)通過(guò)時(shí)將所述數(shù)據(jù)寫入存儲(chǔ)器中。
[0069]該實(shí)施方式中,可以實(shí)現(xiàn)使用寫請(qǐng)求攜帶的CRC值對(duì)寫請(qǐng)求攜帶的數(shù)據(jù)進(jìn)行CRC校驗(yàn),以校驗(yàn)接收端獲取的數(shù)據(jù)是否與發(fā)送端發(fā)送的數(shù)據(jù)一致,若校驗(yàn)通過(guò)則將所述數(shù)據(jù)寫入存儲(chǔ)器中,以防止向存儲(chǔ)器中寫入錯(cuò)誤的數(shù)據(jù)。即發(fā)送端發(fā)送的寫請(qǐng)求攜帶有CRC值可以使接收端在接收到所述寫請(qǐng)求時(shí),使用所述CRC值對(duì)所述數(shù)據(jù)進(jìn)行CRC校驗(yàn),當(dāng)校驗(yàn)通過(guò)時(shí)將所述數(shù)據(jù)寫入存儲(chǔ)器中。
[0070]另外,該實(shí)施方式中,當(dāng)數(shù)據(jù)寫入存儲(chǔ)器中后,可以直接向發(fā)送端發(fā)送響應(yīng)消息,因?yàn)閷懭氩僮魍际强煽?,這樣可以不執(zhí)行步驟404和405,直接向發(fā)送端發(fā)送響應(yīng)消息。
[0071]另外,該實(shí)施方式的實(shí)現(xiàn)過(guò)程還可以參考圖5,如圖5所示,包括以下步驟:
[0072]4501、發(fā)送端的應(yīng)用程序產(chǎn)生寫請(qǐng)求并把寫請(qǐng)求提交給發(fā)送端的RNIC。
[0073]4502、發(fā)送端的RNIC把寫請(qǐng)求傳送到接收端RNIC。
[0074]4503、接收端的RNIC接收到寫請(qǐng)求后,進(jìn)行CRC校驗(yàn),校驗(yàn)通過(guò)后,按照請(qǐng)求執(zhí)行寫入操作,把數(shù)據(jù)通過(guò)DMA方法寫入接收端存儲(chǔ)器。
[0075]4504、接收端的RNIC完成把數(shù)據(jù)寫入接收端存儲(chǔ)器后,向發(fā)送端RNIC發(fā)送響應(yīng)消息,其中該響應(yīng)消息攜帶請(qǐng)求完成狀態(tài),這里請(qǐng)求完成狀態(tài)包括寫入成功狀態(tài)或者寫入失敗狀態(tài)。
[0076]4505、發(fā)送端的RNIC通知發(fā)送端的應(yīng)用程序?qū)懲瓿?,該寫完成的通知消息攜帶請(qǐng)求完成狀態(tài)。
[0077]404、接收端在所述數(shù)據(jù)寫入到所述存儲(chǔ)器后,在所述數(shù)據(jù)被寫入的存儲(chǔ)位置中執(zhí)行讀取操作,以獲取讀取內(nèi)容。
[0078]由于步驟403將上述數(shù)據(jù)寫存儲(chǔ)器中,這樣接收端知道該數(shù)據(jù)寫入的存儲(chǔ)位置,從而步驟404可以是在數(shù)據(jù)寫入后,在數(shù)據(jù)被寫入的存儲(chǔ)位置中執(zhí)行讀取操作,以獲取讀取內(nèi)容。
[0079]該步驟中可以是接收端的RNIC從在數(shù)據(jù)被寫入的存儲(chǔ)位置中執(zhí)行讀取操作,以獲取讀取內(nèi)容。
[0080]405、判斷所述讀取內(nèi)容是否為所述數(shù)據(jù),若是,則執(zhí)行步驟406,若否,則執(zhí)行步驟407。
[0081]該步驟可以是將讀取內(nèi)容與寫請(qǐng)求攜帶的數(shù)據(jù)直接進(jìn)行比較,以判斷所述讀取內(nèi)容是否為所述數(shù)據(jù)。或者該步驟可以對(duì)讀取內(nèi)容進(jìn)行校驗(yàn),校驗(yàn)讀取內(nèi)容是為寫請(qǐng)求攜帶的數(shù)據(jù)。
[0082]本實(shí)施例中,上述寫請(qǐng)求還可以攜帶有CRC值,其中,該CRC值是發(fā)送端對(duì)寫請(qǐng)求攜帶的數(shù)據(jù)進(jìn)行運(yùn)算得到的CRC值,這樣通過(guò)該CRC值可以校驗(yàn)寫請(qǐng)求的傳輸過(guò)程攜帶的數(shù)據(jù)是否損壞或者在接收端進(jìn)行寫操作時(shí)是否損壞等。該實(shí)施方式中,步驟405可以包括:
[0083]計(jì)算所述讀取內(nèi)容的CRC值,并將所述計(jì)算的CRC值與所述寫請(qǐng)求攜帶的CRC值進(jìn)行比較,當(dāng)比較一致時(shí),則確定所述讀取內(nèi)容為所述數(shù)據(jù),當(dāng)比較不一致時(shí),則所述讀取內(nèi)容不為所述數(shù)據(jù)。
[0084]該實(shí)施方式中,可以通過(guò)CRC校驗(yàn),以確定針對(duì)寫請(qǐng)求的寫入是否寫入成功,即發(fā)送端通過(guò)寫請(qǐng)求攜帶上述CRC值可以使所述接收端在所述數(shù)據(jù)寫入到所述存儲(chǔ)器后,在所述數(shù)據(jù)被寫入的存儲(chǔ)位置中執(zhí)行讀取操作,以獲取讀取內(nèi)容,并由所述接收端將所述讀取內(nèi)容的CRC值與所述寫請(qǐng)求攜帶的CRC值進(jìn)行比較,當(dāng)比較一致時(shí),向發(fā)送端發(fā)送所述請(qǐng)求完成狀態(tài)包括數(shù)據(jù)寫入成功狀態(tài)的響應(yīng)消息,當(dāng)比較不一致時(shí),向發(fā)送端發(fā)送所述請(qǐng)求完成狀態(tài)包括數(shù)據(jù)寫入失敗狀態(tài)的響應(yīng)消息。
[0085]另外,該實(shí)施方式的實(shí)現(xiàn)過(guò)程還可以參考圖6,如圖6所示,包括以下步驟:
[0086]4601、發(fā)送端的應(yīng)用程序產(chǎn)生寫請(qǐng)求并把寫請(qǐng)求提交給發(fā)送端的RNIC。
[0087]4602、發(fā)送端的RNIC把寫請(qǐng)求發(fā)送到接收端RNIC。
[0088]4603、接收端的RNIC接收到寫請(qǐng)求后,進(jìn)行CRC校驗(yàn),校驗(yàn)通過(guò)后,按照請(qǐng)求執(zhí)行寫入操作,把數(shù)據(jù)通過(guò)DMA方法寫入接收端存儲(chǔ)器。
[0089]4604、接收端的RNIC完成把數(shù)據(jù)寫入接收端存儲(chǔ)器后,通過(guò)DMA方法從接收端存儲(chǔ)器(寫入位置)中讀出數(shù)據(jù)。
[0090]4605、接收端的RNIC從接收端存儲(chǔ)器中讀出的數(shù)據(jù)后,計(jì)算讀出數(shù)據(jù)的CRC值。
[0091]4606、接收端的RNIC比較步驟4605中計(jì)算得到的CRC值和步驟4602中接收到的寫請(qǐng)求中攜帶的CRC值。
[0092]4607、接收端的RNIC向發(fā)送端的RNIC發(fā)送響應(yīng)消息,其中攜帶請(qǐng)求完成狀態(tài),其中,如果步驟4606中CRC值比較相等,則該請(qǐng)求完成狀態(tài)為成功,否則請(qǐng)求完成狀態(tài)為失敗。
[0093]4608、發(fā)送端的RNIC通知發(fā)送端的應(yīng)用程序?qū)懲瓿?,該寫完成的通知消息攜帶請(qǐng)求完成狀態(tài)。
[0094]406、接收端向所述發(fā)送端發(fā)送攜帶有所述寫請(qǐng)求的請(qǐng)求完成狀態(tài)的響應(yīng)消息,該請(qǐng)求完成狀態(tài)包括數(shù)據(jù)寫入成功狀態(tài)。
[0095]通過(guò)步驟406就可以實(shí)現(xiàn)當(dāng)上述數(shù)據(jù)寫入成功時(shí),接收端向發(fā)送端發(fā)送包括數(shù)據(jù)寫入成功狀態(tài)響應(yīng)消息。
[0096]407、接收端向所述發(fā)送端發(fā)送攜帶有所述寫請(qǐng)求的請(qǐng)求完成狀態(tài)的響應(yīng)消息驟,該請(qǐng)求完成狀態(tài)包括數(shù)據(jù)寫入失敗狀態(tài)。
[0097]408、發(fā)送端接收所述接收端發(fā)送的攜帶有所述寫請(qǐng)求的請(qǐng)求完成狀態(tài)的響應(yīng)消息。
[0098]另外,本實(shí)施例中,接收端還可以記錄發(fā)送端發(fā)送的寫請(qǐng)求的成功或者失敗記錄,這樣在執(zhí)行步驟402之后與執(zhí)行步驟403之前,可以識(shí)別發(fā)送端