通過遠程直接存儲器訪問的任意大小的傳輸操作的制作方法
【專利摘要】此處所描述的各實施例一般涉及用于在RDMA傳輸之上實現(xiàn)數(shù)據(jù)操作的協(xié)議,例如,SMB的版本。在各實施例中,各系統(tǒng)和方法使用指定用于協(xié)商RDMA連接并用于使用經(jīng)協(xié)商的通信來傳送SMB2數(shù)據(jù)的新消息的協(xié)議定義。新協(xié)議消息可包括新頭部信息以確定消息大小、消息數(shù)和用于通過RDMA來發(fā)送SMB2數(shù)據(jù)的其他消息。該頭部信息用于適應(yīng)RDMA和SMB2之間的消息大小要求方面的差異。SMB直通(SMB?Direct)協(xié)議允許SMB2數(shù)據(jù)被分段成多個單獨的RDMA消息,接收方可隨后將這些RDMA消息邏輯地串接成單個SMB2請求或SMB2響應(yīng)。SMB直通協(xié)議還可允許SMB2經(jīng)由高效的RDMA直通放置來傳送應(yīng)用數(shù)據(jù)并在該傳送完成時用信號表示該應(yīng)用數(shù)據(jù)的可用性。
【專利說明】通過遠程直接存儲器訪問的任意大小的傳輸操作
[0001]背景
[0002]諸如服務(wù)器消息塊(SMB)或其版本(例如,SMB2)之類的文件訪問協(xié)議可以用作主要用于在網(wǎng)絡(luò)上的各節(jié)點之間提供對文件以及雜項通信的共享訪問的應(yīng)用層網(wǎng)絡(luò)協(xié)議。在歷史上,SMB或SMB2在傳輸控制協(xié)議(TCP)傳輸和傳統(tǒng)的網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)之上操作。盡管SMB2作為針對通用遠程文件訪問的協(xié)議已非常成功,但SMB2尚未廣泛適用于要求高吞吐量和低等待時間文件輸入/輸出的遠程文件訪問。
[0003]遠程直接存儲器訪問(RDMA)是從一個計算機的存儲器進入另一計算機的存儲器而不涉及該另一計算機的操作系統(tǒng)的直接存儲器訪問。該直接傳送準許通過網(wǎng)絡(luò)的高吞吐量、低等待時間數(shù)據(jù)傳輸,這在性能關(guān)鍵的部署中尤其有用。在應(yīng)用執(zhí)行RDMA讀或?qū)懻埱髸r,使用有RDMA能力的網(wǎng)絡(luò)適配器將應(yīng)用數(shù)據(jù)從源存儲器緩沖區(qū)直接遞送到目的地存儲器緩沖區(qū),在該傳輸中這些有RDMA能力的網(wǎng)絡(luò)適配器不涉及中央存儲單元(CPU)(也被簡稱為處理器)或操作系統(tǒng)。這些RDMA傳輸會減少等待時間并允許快速消息傳輸。不幸地是,RDMA的這些好處尚未被使用SMB2的系統(tǒng)利用,因為SMB2尚未用RDMA來操作。
[0004]雖然本【背景技術(shù)】中著眼于特定的問題,但本發(fā)明決不旨在限于解決那些特定問題。
[0005]概述
[0006]各實施例一般涉及將諸如SMB2操作(或,例如SMB操作的其他版本或文件訪問協(xié)議操作)之類的數(shù)據(jù)操作實現(xiàn)在RDMA傳輸之上的協(xié)議和處理。在各實施例中,該協(xié)議定義指定用于協(xié)商RDMA連接以及用于例如使用經(jīng)協(xié)商的連接來傳送SMB2數(shù)據(jù)的新消息。在一實施例中,用于將SMB2操作實現(xiàn)在RDMA傳輸之上的協(xié)議是SMB直通(SMB Direct)協(xié)議。然而,其他實施例提供其他SMB協(xié)議、SMB協(xié)議版本或其他數(shù)據(jù)操作協(xié)議,而不偏離本公開的精神和范圍。根據(jù)一實施例,新的SMB直通消息可包括新的頭部信息,該新的頭部信息可包括但不限于,以下各項中的一個或多個:CreditsRequested (請求的積分)、CreditsGranted(授予的積分)、Flag (標志)、Reserved (保留的)、RemainingDataLength (剩余數(shù)據(jù)長度)、DataOffset (數(shù)據(jù)偏移)、和DataLength (數(shù)據(jù)長度)。由于RDMA傳輸支持接收僅由接收方固定的大小的消息,而SMB2消息的大小可以在從大約一百字節(jié)到超過兆字節(jié)的非常大消息的非常大的范圍內(nèi)改變,因此頭部信息被使用。SMB2協(xié)議被修改以識別RDMA能力的存在,而SMB直通協(xié)議將新的層添加到聯(lián)網(wǎng)棧,以允許多個單獨的RDMA消息被邏輯地串接成單個請求或響應(yīng)以適應(yīng)RDMA消息的固定大小限制以及SMB2消息收發(fā)所固有的不確定大小要求兩者。對SMB2協(xié)議的改變以及對SMB直通協(xié)議的添加允許數(shù)據(jù)在各對等體的存儲器之間的直接傳送。在各實施例中,SMB2服務(wù)器可使用RDMA來進行從客戶機的存儲器讀取或向客戶機的存儲器寫入,以執(zhí)行對數(shù)據(jù)的直接放置。服務(wù)器執(zhí)行到客戶機的RDMA寫以完成SMB2讀,并執(zhí)行RDMA讀以完成SMB2寫。盡管SMB直通協(xié)議允許SMB/SMB2數(shù)據(jù)在對等體的存儲器之間的直接傳送,但根據(jù)各實施例,SMB直通協(xié)議可適合于其他協(xié)議。根據(jù)各實施例,SMB直通協(xié)議的雙向、對等特性使其本身適于多種類型的數(shù)據(jù)傳送操作。
[0007]RDMA傳輸還再次用僅由接收方固定的值來限制任何時刻可被處理的消息的數(shù)目。為了符合RDMA的這個要求,各實施例為各對等體提供在指定發(fā)送方可向接收方發(fā)送的RDMA消息的數(shù)目的協(xié)議頭部中交換或分配每一相互對等體所請求的并向每一相互對等體授予的“積分”(其為數(shù)值)。積分是動態(tài)的,并由每一對等體獨立地管理。用于管理積分并使足夠的積分可用于執(zhí)行SMB2交換的規(guī)則由在此公開的各實施例中的協(xié)議來定義。
[0008]在各實施例中,提供獨立、雙向的積分可準許每一個對等體發(fā)送請求和響應(yīng),而無需接收對等體的顯式協(xié)商或先驗知識和同意。與RDMA相關(guān)聯(lián)的順序發(fā)送可準許交換出乎意料的大的消息,而不會引起RDMA處理中的錯誤,也不會在這種情況發(fā)生時采取較不高效的協(xié)商傳送。
[0009]根據(jù)各實施例,附加消息可用于協(xié)商協(xié)議版本和其他參數(shù)。協(xié)商請求消息可包括例如以下字段:CreditsRequested (請求的積分)、Reserved (保留的)、MinVersion (最小版本)、MaxVersion (最大版本)、OutboundSendSize (出站發(fā)送大小)、MaxInboundSendSize(最大入站發(fā)送大小)等。相應(yīng)地,響應(yīng)于該請求消息而發(fā)送的協(xié)商響應(yīng)消息可包括例如Credi tsRequested (請求的積分)、Credit sGranted (授予的積分)、Vers ion (版本)、Reserved(保留的)、Status (狀態(tài))、OutboundSendSize (出站發(fā)送大小)、InboundSendSize (入站發(fā)送大小)等字段。這些參數(shù)支持對能力的協(xié)商、對資源的端到端優(yōu)化、和與該協(xié)議的未來增強版本的兼容性。
[0010]提供本概述是為了以簡化的形式介紹將在以下具體實施例中進一步描述的一些概念。本概述并不旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也決不旨在用于限制所要求保護的主題的范圍。
[0011]附圖簡述
[0012]可以參考附圖來更容易地描述本發(fā)明的各實施例,附圖中相同的數(shù)字指示相同的項。
[0013]圖1示出了根據(jù)本公開的各實施例的用于通過RDMA來交換SMB2消息的環(huán)境或系統(tǒng)的示例邏輯表示。
[0014]圖2A描繪了根據(jù)本公開的各實施例的用于通過RDMA來發(fā)送SMB2消息的客戶機系統(tǒng)的示例邏輯表示。
[0015]圖2B示出了根據(jù)本公開的各實施例的用于通過RDMA來接收SMB2消息的服務(wù)器系統(tǒng)的邏輯表示。
[0016]圖3A-3E示出了根據(jù)本公開的各實施例的在通過RDMA使用SMB2消息交換數(shù)據(jù)時發(fā)送或接收的消息的邏輯表示。
[0017]圖4A-4C描繪了解說根據(jù)本公開的各實施例的用于通過RDMA使用SMB2協(xié)商通信的過程的操作特性的流程圖。
[0018]圖5A-?示出了解說根據(jù)本公開的各實施例的用于通過RDMA使用SMB2交換數(shù)據(jù)的過程的操作特性的流程圖。
[0019]圖6解說了描繪根據(jù)本公開的各實施例的用于使用RDMA直接數(shù)據(jù)傳送來交換數(shù)據(jù)的過程的操作特性的流程圖。
[0020]圖7描繪其上可以實現(xiàn)本公開的各實施例的示例計算系統(tǒng)。
[0021]詳細描述
[0022]本發(fā)明現(xiàn)將參考其中示出了各具體實施例的附圖來更完整地描述各示例實施例。然而,其它方面能以許多不同的形式來實現(xiàn),并且在本發(fā)明中包括具體的實施例不應(yīng)被解釋為將這些方面限于在此所述的各實施例。相反,包括附圖中描繪的各實施例是為了提供全面和完整且將預(yù)期的范圍完全地傳達給本領(lǐng)域技術(shù)人員的公開。虛線可用于示出可選組件或操作。
[0023]各實施例一般涉及用于通過RDMA連接來交換SMB2數(shù)據(jù)的系統(tǒng)、方法和協(xié)議。RDMA提供傳輸數(shù)據(jù)方面的優(yōu)點。例如,RDMA作出從一個存儲器到另一設(shè)備或系統(tǒng)的存儲器的傳送。這些傳送并不涉及處理器,并且因此減少了傳輸數(shù)據(jù)時所涉及的開銷。此外,由于傳輸管理中不涉及處理器,因此RDMA用更少的時鐘周期來傳送數(shù)據(jù)。因此,RDMA提供低等待時間、高帶寬的連接。
[0024]一般來說,SMB的版本(諸如,SMB2)是用于在網(wǎng)絡(luò)上的各節(jié)點之間提供對文件和雜項通信的共享訪問的應(yīng)用層網(wǎng)絡(luò)協(xié)議。SMB和SMB2因此是文件訪問操作協(xié)議的示例。SMB2允許在于客戶機和服務(wù)器之間交換消息時傳送數(shù)據(jù)。此處的某些實施例的描述涉及SMB2。然而,在其他實施例中,SMB的任何版本或其他文件訪問操作協(xié)議可被使用,而不偏離本公開的精神和范圍。
[0025]一般由于操作中的差異,當前SMB2 (或SMB)當前不通過RDMA來操作,而反倒使用TCP來傳輸數(shù)據(jù)。本文的各實施例創(chuàng)建了用于通過有RDMA能力的網(wǎng)絡(luò)協(xié)議來交換SMB2消息的系統(tǒng)和協(xié)議。首先,客戶機和/或服務(wù)器(其可被統(tǒng)稱為對等體)使用SMB2的分量來發(fā)現(xiàn)彼此的能力或才能。在一實施例中,由客戶機發(fā)送詢問有關(guān)服務(wù)器的信息的請求。響應(yīng)服務(wù)器可以用與以下有關(guān)的信息來回答:該服務(wù)器所具有的網(wǎng)絡(luò)接口卡(NIC)的數(shù)目、這些NIC的因特網(wǎng)協(xié)議(IP)地址、這些NIC的速度,這些NIC是否有RDMA能力和/或可能IP地址。在各實施例中,詢問客戶機可使用該信息來確定如何與該服務(wù)器對接。
[0026]根據(jù)本公開的各實施例,如果服務(wù)器有RDMA能力,則有RDMA能力的客戶機可隨后與該服務(wù)器協(xié)商RDMA連接。新接口(在各實施例中稱為RDMA接口)是有RDMA能力的網(wǎng)絡(luò)適配器和其他系統(tǒng)組件(包括SMB客戶機)之間的接口。此外,新模塊被添加到被稱為SMB直通客戶機/服務(wù)器的棧。首先,SMB直通客戶機可能響應(yīng)于能力請求而通過保留存儲器緩沖區(qū)的至少一部分來預(yù)先發(fā)布用于從其他對等體接收消息的接收。SMB直通客戶機可隨后發(fā)送SMB直通協(xié)商請求包。SMB直通協(xié)商請求啟動在各對等體之間建立SMB直通連接的過程。根據(jù)各實施例,SMB直通協(xié)商請求包括定義RDMA連接將如何起作用的一個或多個字段。
[0027]在各實施例中,SMB直通協(xié)商請求的部分是對“積分”的請求。各積分是對接收對等體的存儲器緩沖區(qū)中的空間的分配。由于RDMA直接從一個存儲器傳送到另一存儲器,接收對等體在存儲器緩沖區(qū)中保留發(fā)送對等體可放置所傳輸?shù)臄?shù)據(jù)的空間。存儲器緩沖區(qū)被以塊(例如,1K字節(jié)塊)為單位進行分配。在各實施例中,分配是固定的,因為該塊大小在SMB直通連接已被建立后就不會改變。在其他實施例中,分配不是固定的,其中塊大小可改變。在分配是固定的情況下,到存儲器緩沖區(qū)的任何傳輸都不可超過塊大小。為了傳送具有大于塊大小的大小的SMB2數(shù)據(jù),發(fā)送方發(fā)送被存儲在存儲器緩沖區(qū)的兩個或更多分配中的兩個或更多數(shù)據(jù)包。為了保留存儲器分配,發(fā)送對等體請求積分,其中所請求的積分的數(shù)目可以通過本地策略來管控,并且不一定受到消息的組合的影響。每一積分表示存儲器緩沖區(qū)的一個塊,并因此表示請求方可發(fā)送給其他對等體的消息。[0028]在本公開的各實施例中,服務(wù)器可以將響應(yīng)(例如,SMB直通協(xié)商響應(yīng))發(fā)送給請求方。這個SMB直通協(xié)商響應(yīng)還包括定義RDMA連接的各個字段。響應(yīng)于該請求,SMB直通協(xié)商響應(yīng)將多個積分提供給客戶機。此外,SMB直通協(xié)商響應(yīng)還可要求在客戶機的存儲器緩沖區(qū)中保留分配的積分。在各實施例中,SMB直通協(xié)商請求和SMB直通協(xié)商響應(yīng)的交換建立RDMA連接。此后,可通過該連接來交換SMB2數(shù)據(jù)。
[0029]根據(jù)各實施例,通過RDMA連接來交換SMB2數(shù)據(jù)包括傳送至少一個數(shù)據(jù)包。如果正被發(fā)送的SMB2數(shù)據(jù)小于塊大小,則可以僅發(fā)送被稱為SMB直通數(shù)據(jù)傳送包的一個包。然而,根據(jù)一實施例,如果要被發(fā)送的SMB2數(shù)據(jù)大于塊大小,則兩個或更多個SMB直通數(shù)據(jù)傳送包可被發(fā)送。RDMA允許順序接收各數(shù)據(jù)包。因此,通信中接收到的第二數(shù)據(jù)包將被直接放置在第一接收到的數(shù)據(jù)包之后。為了利用RDMA的這個優(yōu)點,SMB直通數(shù)據(jù)傳送包包括通告要被發(fā)送的SMB2數(shù)據(jù)的總數(shù)以及在本數(shù)據(jù)包之后還留下多少要被發(fā)送的數(shù)據(jù)的字段。通過這種方式,SMB直通對等體可以確定SMB傳送何時完成,并且SMB2數(shù)據(jù)可被重新組裝。因此,SMB直通協(xié)議在各實施例中提供以低等待時間和低開銷進行SMB2數(shù)據(jù)的快速傳送,同時克服與通過RDMA傳送SMB2數(shù)據(jù)相關(guān)聯(lián)的問題。
[0030]圖1中示出了根據(jù)此處所公開的各實施例的用于通過RDMA連接交換SMB2數(shù)據(jù)的示例邏輯環(huán)境或系統(tǒng)100。連接對等體(也被稱為客戶機102和服務(wù)器106) 102和106可通過網(wǎng)絡(luò)104跨RDMA NIC (RNIC) 108a和108b之間的RDMA連接來移動SMB2數(shù)據(jù)。連接對等體可以是例如參考圖7所描述的任何計算機系統(tǒng)。連接對等體在圖1中被示為客戶機/應(yīng)用服務(wù)器102和文件服務(wù)器106。然而,這些對等體僅作為示例來提供。在這些實施例中,任何類型的客戶機或服務(wù)器都可用作連接對等體。因此,RDMA連接可以例如在多個客戶機、多個服務(wù)器、服務(wù)器場、服務(wù)器群集、消息服務(wù)器之間或在客戶機和服務(wù)器之間??蛻魴C/應(yīng)用服務(wù)器102和文件服務(wù)器106僅出于理解本文所公開的各實施例的教示的目的而被作為示例來提供。
[0031]當通過網(wǎng)絡(luò)104移動SMB2數(shù)據(jù)時,該網(wǎng)絡(luò)104可以如例如參考圖7所描述的。網(wǎng)絡(luò)104 (雖然被示為獨立的單個網(wǎng)絡(luò))可以是本領(lǐng)域的普通技術(shù)人員常規(guī)上理解的任何類型的網(wǎng)絡(luò)。根據(jù)一實施例,網(wǎng)絡(luò)可以是全局網(wǎng)絡(luò)(例如,因特網(wǎng)或萬維網(wǎng),即縮寫為“Web”)。它也可以是局域網(wǎng)(例如,內(nèi)聯(lián)網(wǎng))或廣域網(wǎng)。根據(jù)各個實施例,通過網(wǎng)絡(luò)104的通信根據(jù)一個或多個基于標準數(shù)據(jù)包的格式(例如,H.323、IP、以太網(wǎng)、和/或ATM)來進行。
[0032]此外,在各實施例中,RNIC108(a和/或b)可以是支持RDMA的任何網(wǎng)絡(luò)接口卡、網(wǎng)絡(luò)適配器和/或網(wǎng)絡(luò)接口控制器。存在提供RNIC的若干廠商。例如,iWARP或InfiniBand是支持RDMA的網(wǎng)絡(luò)協(xié)議。RNIC可支持RDMA,其允許數(shù)據(jù)從存儲器110a到存儲器110b以及相反方向的直接傳送。這些數(shù)據(jù)傳送不需要或不包括處理器112a或112b的監(jiān)督。因此,根據(jù)本公開的各實施例,RDMA傳送是高帶寬、低等待時間和低開銷的。處理器112和存儲器110可以如例如參考圖7所描述的。
[0033]盡管圖1示出了用于通過RDMA的SMB2數(shù)據(jù)交換的通用環(huán)境,圖2A描繪了根據(jù)此處所公開的各實施例的用于通過RDMA連接來發(fā)送或接收SMB2數(shù)據(jù)的示例對等體102。在這個示例中,對等體102是客戶機和/或應(yīng)用服務(wù)器。根據(jù)本公開的各實施例,客戶機102的各個組件可以包括軟件和/或硬件。然而,為了解說的目的,此后的各組件將被描述為軟件模塊。在各實施例中,客戶機102包括但不限于以下中的一個或多個:內(nèi)核202a、至少一個用戶應(yīng)用220、存儲器緩沖區(qū)222a、一個或多個計時器224a和/或一個或多個設(shè)置226a。在各實施例中,“內(nèi)核”是在其中管理存儲器、文件和外圍設(shè)備,觸發(fā)和啟動應(yīng)用以及分配系統(tǒng)資源的操作系統(tǒng)的核心。
[0034]在各實施例中,內(nèi)核202a可包括但不限于以下中的一個或多個:W?ST32?文件應(yīng)用編程接口(API)或等價物204、SMB2模塊(被示為SMB2客戶機208)、SMB直通模塊(被示為SMB直通客戶機214a)和RDMA接口 216a。SMB直通模塊和RDMA接口 216a被引入來執(zhí)行在此描述的各方法和過程。這些模塊、組件和/或接口將被描述如下。
[0035]在各實施例中,WIN32?文件API204可以是內(nèi)核202a和一個或多個用戶應(yīng)用220之間的接口。在一示例實施例中,WIN32?文件API204是微軟WINDOWS?操作系統(tǒng)中可用的API集合。幾乎所有的W丨NDOWS?程序與該WINDOWS? api交互以執(zhí)行各種功能。WIN32?文件API204的各實施例提供對WINDOWS?系統(tǒng)可用的各資源(諸如,舉例來說文件系統(tǒng)、設(shè)備和/或錯誤處理)的訪問。根據(jù)各實施例,WIN32?文件API204可提供對內(nèi)核以及其他功能的訪問。在各實施例中,WIN32?文件API204還允許系統(tǒng)對各遠程文件執(zhí)行使用各底層的文件訪問功能的各動作,這些底層的文件訪問功能進而使用各種聯(lián)網(wǎng)能力并允許遠程訪問。
[0036]在各實施例中,SMB2客戶機208管理在各應(yīng)用和SMB2服務(wù)器212b所提供的各接口之間的通信。由于各設(shè)備可以以可能與操作系統(tǒng)不匹配的速度操作,因此操作系統(tǒng)和設(shè)備驅(qū)動器之間的通信主要通過I/O請求包(IRP)來完成。這些數(shù)據(jù)包類似于例如網(wǎng)絡(luò)數(shù)據(jù)包或WINDOWS?消息數(shù)據(jù)包。將這些數(shù)據(jù)包從操作系統(tǒng)傳遞到特定驅(qū)動器,并從一個驅(qū)動器傳遞到另一驅(qū)動器。在各實施例中,SMB2客戶機208可以將各I/O請求重定向到各網(wǎng)絡(luò)資源,并組成各SMB消息以執(zhí)行通過網(wǎng)絡(luò)的通信。SMB2客戶機208通過RDMA將SMB數(shù)據(jù)包傳送到SMB直通客戶機214a以交換SMB數(shù)據(jù)包或數(shù)據(jù)。類似地,根據(jù)一實施例,SMB2服務(wù)器212b也可使用各IRP 來發(fā)送來自SMB2客戶機208對服務(wù)器的存儲的文件請求。
[0037]在各實施例中,SMB直通模塊214是從內(nèi)核202中的SMB直通網(wǎng)絡(luò)提供商接口(NPI)創(chuàng)建的實例。SMB直通模塊214將API (稱為SMB直通NPI)展示給SMB2客戶機和SMB2服務(wù)器模塊。SMB2客戶機/服務(wù)器模塊使用這個SMB直通NPI來作出通過SMB直通連接發(fā)送或接收數(shù)據(jù)的請求。根據(jù)各實施例,SMB直通模塊214實現(xiàn)SMB直通協(xié)議,并位于SMB2客戶機/服務(wù)器模塊和底層的RDMA接口之間。SMB直通NPI允許SMB直通協(xié)議。SMB直通NPI可創(chuàng)建和破壞SMB直通連接,通過SMB直通連接發(fā)送和接收數(shù)據(jù)、注冊/注銷存儲器、通過SMB直通連接執(zhí)行從對等體的RDMA讀數(shù)據(jù)操作/到對等體的RDMA寫數(shù)據(jù)操作、在SMB直通連接被對等體斷開連接時接收通知、跨SMB直通連接編組/取消編組供傳輸?shù)腟MB2數(shù)據(jù)包及其他操作。為了完成這些任務(wù),創(chuàng)建可管理發(fā)送按照RDMA協(xié)議存儲的SMB2數(shù)據(jù)以及從存儲器緩沖區(qū)222檢索按照RDMA協(xié)議存儲的SMB2數(shù)據(jù)的SMB直通模塊214。因此,SMB直通模塊214將數(shù)據(jù)從僅僅SMB2數(shù)據(jù)轉(zhuǎn)換成RDMA,并從RDMA轉(zhuǎn)換回SMB2。在本公開的各實施例中,SMB直通模塊214與另一新模塊通信(即,RDMA接口 216)以執(zhí)行這些操作。
[0038]根據(jù)各實施例,SMB直通模塊214執(zhí)行若干函數(shù)。SMB DirectReceiveEvent (SMB直通接收事件)回調(diào)函數(shù)向SMB2客戶機208或SMB2服務(wù)器212b通知已在SMB直通端點上接收了消息。SMB DirectDisconnectEvent (SMB直通斷開連接事件)事件回調(diào)函數(shù)向SMB2客戶機208或SMB2服務(wù)器212b通知端點上的連接已被斷開連接。SMB DirectAcceptEvent(SMB直通接受事件)事件回調(diào)函數(shù)向SMB2服務(wù)器212b通知監(jiān)聽端點上的傳入連接已被接受。SMBDirectListen (SMB直通監(jiān)聽)函數(shù)創(chuàng)建監(jiān)聽給定的本地地址上的傳入連接的監(jiān)聽器端點。SMB DirectCloseEndpoint (SMB直通關(guān)閉端點)函數(shù)關(guān)閉端點并釋放任何關(guān)聯(lián)資源。SMB DirectConnect (SMB直通連接)函數(shù)將端點連接到遠程SMB直通傳輸?shù)刂贰MB DirectDisconnect (SMB直通斷開連接)函數(shù)使端點與遠程SMB直通傳輸?shù)刂窋嚅_連接。SMB DirectSend (SMB直通發(fā)送)函數(shù)將數(shù)據(jù)緩沖區(qū)發(fā)送到遠程SMB直通對等體。SMBDirectRegisterMemoryCSMB直通注冊存儲器)函數(shù)允許SMB2客戶機208注冊供在RDMA讀/寫操作中使用的存儲器緩沖區(qū)。SMB DirectUnregisterMemory(SMB直通注銷存儲器)函數(shù)注銷先前經(jīng)由SMB DirectRegisterMemory API注冊的存儲器緩沖區(qū)。SMB DirectRdmaRead(SMB直通RDMA讀)函數(shù)使得RDMA直接從與該端點連接的遠程對等體的存儲器中讀數(shù)據(jù)。SMB DierctRdmaRead (SMB直通RDMA寫)函數(shù)使得RDMA將數(shù)據(jù)直接寫入與該端點連接的遠程對等體的存儲器中。這些函數(shù)及其操作將結(jié)合圖6來解釋。
[0039]在一實施例中,RDMA接口 216是與各RNIC的廠商專用的RDMA功能對接的新接口。RDMA接口 216可給予對RDMA設(shè)備的各功能的訪問。RDMA設(shè)備的各功能可包括監(jiān)聽端口以接收SMB直通數(shù)據(jù)包,并將SMB2數(shù)據(jù)提供給SMB直通模塊214。在一實施例中,RDMA設(shè)備可包括用于管理通過RDMA連接的通信的內(nèi)核模式RDMA模塊。此外,RDMA設(shè)備可包括RDMA訪問層和擴展以用于對正發(fā)送RDMA消息的端口進行訪問和監(jiān)聽。根據(jù)各實施例,代理驅(qū)動器可以與RNIC的硬件驅(qū)動器對接。
[0040]在各實施例中,用戶應(yīng)用220可以是處理器為用戶或其他軟件執(zhí)行的任何軟件。用戶應(yīng)用220的示例包括web瀏覽器、電子郵件等。這些用戶應(yīng)用220與內(nèi)核202a對接以發(fā)送數(shù)據(jù)并特別地從遠程存儲位置(諸如文件服務(wù)器106)接收數(shù)據(jù)。
[0041]在一實施例中,存儲器緩沖區(qū)222可以是如參考圖7描述的任何類型的存儲器。存儲器緩沖區(qū)222可被用來接收SMB直通消息和/或這些消息中承載的SMB2數(shù)據(jù),并可被用來在傳輸傳出SMB直通消息之前準備(stage)那些消息。因此,根據(jù)各實施例,可將存儲器緩沖區(qū)222劃分成如此后描述的各塊。
[0042]在各實施例中,計時器224是可從預(yù)定時間倒計時到零的時鐘集合。因此,計時器224表示所存儲的數(shù)據(jù)以及由處理器執(zhí)行的時鐘功能。計時器224的期滿可以觸發(fā)RDMA接口中的一個或多個功能,或者伴隨SMB直通模塊214的一個或多個功能。在其他實施例中,計時器可以從零計數(shù)到一閾值,或執(zhí)行某種其他類型的計數(shù)。這些計時器中的一些可以包括SendCreditGrantTimer (發(fā)送積分授予計時器),SendCreditGrantTimer是在SendCreditCount(發(fā)送積分計數(shù))達到零時啟動并在計時器部分224中操作的計時器。遠程連接的對等體必須直到這個計時器期滿才能授予附加的發(fā)送積分。SendCreditGrantTimer(發(fā)送積分授予計時器)還可以調(diào)節(jié)客戶機/服務(wù)器等待該對等體向其授予附加的發(fā)送積分的時間量。根據(jù)各實施例,當客戶機/服務(wù)器發(fā)現(xiàn)由于SendCreditsCount (發(fā)送積分計數(shù))的值為零而無法向?qū)Φ润w發(fā)送數(shù)據(jù)包時,則客戶機/服務(wù)器設(shè)置將在預(yù)定秒數(shù)內(nèi)期滿的計時器。如果計時器在發(fā)送積分變得可用之前期滿,則客戶機/服務(wù)器將該連接斷開連接。在一實施例中,空閑連接計時器調(diào)節(jié)客戶機/服務(wù)器等待對等體發(fā)送數(shù)據(jù)包的時間量。如果在過去的預(yù)定秒數(shù)內(nèi)沒有從對等體接收到數(shù)據(jù)包,則客戶機/服務(wù)器向該對等體發(fā)送?;钫埱螅⒃O(shè)置KeepAliveResponse (?;铐憫?yīng))計時器。根據(jù)本公開的各實施例,如果在KeepAliveResponse計時器期滿之前沒有接收到響應(yīng),則該連接被斷開連接。
[0043]根據(jù)本公開的各實施例,還可以為通過SMB直通連接的任何SMB直通數(shù)據(jù)傳送設(shè)置 KEEPALIVE_REQUESTED (已請求保活)標志。在一實施例中,KEEPALIVE_REQUESTED 標志是對接收對等體盡快對發(fā)送方作出響應(yīng),使得發(fā)送方知道該接收方仍被連接并且是可作出響應(yīng)的請求。一個或多個系統(tǒng)可嘗試在沒有消息交換的情況下使該連接過期。因此,具有KEEPALIVE_REQUESTED標志的消息可以維護該連接。在替換實施例中,設(shè)有KEEPALIVE_REQUESTED標志的消息可被用于請求或接收積分。
[0044]在一實施例中,設(shè)置226存儲對與通過RDMA交換SMB消息相關(guān)的數(shù)據(jù)進行存儲和檢索。設(shè)置226可被存儲在如參考圖7所描述的任何類型的存儲器或存儲設(shè)備中。作為一示例,這些設(shè)置可包括被設(shè)置之后的多少秒內(nèi)積分補充計時器期滿、對等體愿意從另一對等體接收的最大大小的SMB直通數(shù)據(jù)傳送包是什么、或者對等體將授予另一對等體的發(fā)送積分的數(shù)目的限制是什么等。
[0045]在各實施例中,SMB_DIRECT_ENDPOINT (SMB_直通_端點)結(jié)構(gòu)可以是表示SMB直通端點的不透明結(jié)構(gòu)。SMB直通端點在功能上與例如網(wǎng)絡(luò)套接字類似。根據(jù)一實施例,SMB2客戶機208或SMB2服務(wù)器212b可能不直接訪問該結(jié)構(gòu)的各成員,而是通過SMB直通模塊214來訪問該結(jié)構(gòu)的各成員。SMB_DIRECT_ENDPOINT結(jié)構(gòu)可包括若干操作的數(shù)據(jù)。MwReleaseList (存儲器窗口釋放列表)是可被釋放回到該遠程連接的對等體的存儲器窗口的列表。這些存儲器窗口與已完成的各RDMA讀/寫操作相關(guān)聯(lián)。ReceiveCreditCount(接收積分計數(shù))是要被授予遠程連接的對等體的接收積分的數(shù)目。該端點的主機可具有至少這個數(shù)目的在該端點上待處理的接收區(qū)。SendCreditCount (發(fā)送積分計數(shù))是該端點的主機當前具有的發(fā)送積分的數(shù)目。遠程連接的對等體可具有至少這個數(shù)目的在其端點上待處理的接收。PendingRdmaReadCount (待處理RDMA讀計數(shù))是這個端點上已被發(fā)起但尚未完成的RDMA讀操作的數(shù)目。PendingRdmaReadLimit (待處理RDMA讀限制)是該端點上可同時待處理的RDMA讀操作的最大數(shù)目。在各實施例中,DeferredlnitiatorOpQueue(被推遲的發(fā)起方操作隊列)是因用于發(fā)出各發(fā)起方操作的端點資源當前不可用而被推遲的這些發(fā)起方操作的隊列。NdKQp (NDK隊列對)是表示接收以及發(fā)起方請求隊列的隊列對對象。NdkReceiveCq (NDK接收完成隊列)是NDK接收完成隊列。將各接收請求完成排隊在該隊列中。NdkReceiveQueueCapacity (NDK接收隊列容量)是該端點上可同時待處理的各接收請求的最大數(shù)目。NdklnitiatorCq (NDK發(fā)起方完成隊列)是NDK發(fā)起方完成隊列。例如,發(fā)送、綁定、快速注冊、讀、寫和無效請求完成被排列在這個隊列中。在各實施例中,NdklnitiatorQueueCapacity (NDK發(fā)起方隊列容量)是該端點上可同時待處理的發(fā)送、綁定、快速注冊、讀、寫和無效請求的最大數(shù)目。
[0046]圖2B描繪了根據(jù)此處所公開的各實施例的用于通過RDMA連接來發(fā)送或接收SMB2數(shù)據(jù)的示例對等體106。在這個示例中,對等體106是文件服務(wù)器。文件服務(wù)器106的各個組件可包括軟件和/或硬件。盡管各實施例將這些組件描述為軟件模塊,其他實施例提供其他類型的模塊。在各實施例中,文件服務(wù)器106包括但不限于以下中的一個或多個:內(nèi)核202b、NTFS232、存儲器緩沖區(qū)222b、一個或多個計時器224b和/或一個或多個設(shè)置226b。這些功能中的一些與圖2A中描述的那些功能相同或相似。
[0047]根據(jù)各實施例,內(nèi)核202b (和/或如參考圖2A所描述的)可包括但不限于以下中的一個或多個:輸入/輸出(I/o)管理器206b、SMB2服務(wù)器212b、SMB直通服務(wù)器214b和RDMA接口 216b。這些功能中的一些與圖2A中描述的那些功能相同或相似。
[0048]在各實施例中,SMB2服務(wù)器212b是為各MICROSOTO:服務(wù)器實現(xiàn)服務(wù)器側(cè)的SMB2協(xié)議的驅(qū)動器。其他實施例提供其他類型的服務(wù)器。SMB2服務(wù)器212b可啟動并使用SMB來交換數(shù)據(jù),并供應(yīng)該數(shù)據(jù)或從I/O管理器206b接收該數(shù)據(jù)。在各實施例中,SMB2服務(wù)器212b通過網(wǎng)絡(luò)連接發(fā)送或接收SMB2數(shù)據(jù)。SMB2服務(wù)器212b用于通過供服務(wù)器的網(wǎng)絡(luò)來通信。因此,根據(jù)各實施例,SMB2服務(wù)器212b提供SMB2數(shù)據(jù)以供傳輸,或通過網(wǎng)絡(luò)傳輸接收SMB2數(shù)據(jù)。
[0049]在各實施例中,新技術(shù)文件系統(tǒng)(NTFS)232可以是標準文件系統(tǒng)。NTFS包括支持元數(shù)據(jù)和使用先進的數(shù)據(jù)結(jié)構(gòu)來改善性能、可靠性和盤空間利用,以及諸如安全性訪問控制列表(ACL)和文件系統(tǒng)通信等附加擴展。NTFS用于組織并存儲一個或多個客戶機的文件數(shù)據(jù)??赏ㄟ^與客戶機的通信(諸如通過RDMA的SMB2數(shù)據(jù)傳送)來將這些文件數(shù)據(jù)提供給客戶機。
[0050]根據(jù)各實施例,SMB直通創(chuàng)建RDMA連接以交換SMB2數(shù)據(jù)。該協(xié)議通過協(xié)商過程創(chuàng)建RDMA連接。在對等體102和106協(xié)商了 RDMA連接后,對等體102或106中的任一方可通過RDMA連接發(fā)送SMB2數(shù)據(jù)。
[0051]根據(jù)各實施例,第一 SMB直通協(xié)商請求包300在圖3A中被示出。相應(yīng)地,在各實施例中,相關(guān)聯(lián)的SMB直通協(xié)商響應(yīng)請求包336在圖3B中被示出。此外,根據(jù)各實施例,用于傳送數(shù)據(jù)的SMB直通數(shù)據(jù)傳送包338在圖3C中被示出。每一消息或數(shù)據(jù)包可以例如被創(chuàng)建、傳送、存儲和/或接收。在各實施例中,數(shù)據(jù)包或消息可各自包括存儲不同數(shù)據(jù)的部分或字段。
[0052]轉(zhuǎn)至圖3A,根據(jù)本公開的各實施例的SMB直通協(xié)商請求包300被示出。SMB直通協(xié)商請求包300可包括但不限于以下字段中的一個或多個,例如:MinVersion (最小版本)302、MaxVersion (最大版本)304、Reserved (保留的)306、CreditsRequested (請求的積分)308、PreferredSendSize (偏好的發(fā)送大小)310、]\&0^606;^63丨26 (最大接收大小)312、和/或MaxSMB2MessageSize (最大SMB2消息大小)314.SMB直通協(xié)商請求包300可包括比圖3A中示出的那些字段更多或更少的字段,如省略號316所表示的。
[0053]在一實施例中,MinVersion字段302可包括客戶機/請求方102支持的最低SMB直通協(xié)議版本的值。MaxVersion字段304可存儲客戶機/請求方102支持的最高SMB直通協(xié)議版本。這個值可等于或大于MinVersion字段302的值。在各實施例中,客戶機/請求方支持在MinVersion字段302中的值和MaxVersion字段304中的值之間的范圍中(包括)的所有協(xié)議版本。根據(jù)一實施例,Reserved字段306僅是針對將來的未知要求的保留字段,并且沒有被客戶機使用。
[0054]根據(jù)各實施例,CreditsRequested字段308包括客戶機/請求方102正請求的來自服務(wù)器/接收方106的發(fā)送積分的數(shù)目的值。在各實施例中,CreditsRequested字段308中的值大于零(0),以確保SMB2數(shù)據(jù)可在后續(xù)消息中被發(fā)送。然而,根據(jù)各實施例,CreditsRequested字段308中的值可以是任何數(shù)字,并可基于平均使用來設(shè)置。在各替換實施例中,CreditsRequested字段308中的值可至少基于要被發(fā)送的SMB消息的大小。在又一些實施例中,請求積分時可考慮其他因素或附加因素。同樣,在各實施例中,大型消息可使用RDMA來傳送。
[0055]PreferredSendSize字段310可包括客戶機/請求方102希望能夠向服務(wù)器/接收方106傳送的最大SMB直通數(shù)據(jù)傳送包338的大小(可能以字節(jié)為單位)。MaxReceiveSize字段312包括客戶機/請求方102將接受的來自服務(wù)器/接收方106的最大SMB直通數(shù)據(jù)傳送消息的大小(可能以字節(jié)為單位)。在各實施例中,這個值可等于客戶機102所設(shè)置的存儲器緩沖區(qū)222a的塊或預(yù)定分配。因此,沒有單個SMB2數(shù)據(jù)傳送會超過該存儲器分配。在各實施例中,這個值大于或等于閾值128,該閾值128至少為數(shù)據(jù)傳送包和小型SMB2消息中的SMB直通頭部的大小。根據(jù)一實施例,MaxSmbZMessageSize字段314可以包括客戶機/請求方將接受的來自服務(wù)器/接收方106的最大SMB2協(xié)議消息的大小(可能以字節(jié)為單位)。這個值被客戶機102預(yù)先確定并設(shè)置。在各實施例中,MaxSmbZMessageSize字段314中的值可以不大于存儲器緩沖區(qū)222a的總大小。通過這種方式,沒有SMB消息可溢出存儲器緩沖區(qū)222a。然而,根據(jù)一實施例,MaxSmb2MessageSize字段314的值可以小于如用戶所確定的存儲器緩沖區(qū)222a中的存儲器量。
[0056]轉(zhuǎn)至圖3B,根據(jù)各實施例的SMB直通協(xié)商響應(yīng)包336被示出。SMB直通協(xié)商響應(yīng)包336可被對等體106發(fā)送以完成對RDMA連接的協(xié)商。SMB直通協(xié)商響應(yīng)包336可包括但不限于以下字段中的一個或多個,例如:MinVersion (最小版本)302b、MaxVersion (最大版本)304b、PreferredVersion (偏好的版本)318、Reserved (保留的)306b、CreditsRequested (請求的積分)308b、Credi t sGranted (授予的積分)320a、Status (狀態(tài))322、PreferredSendSize(偏好的發(fā)送大小)310b、MaxReceiveSize (最大接收大小)312b 和 / 或 MaxSMB2MessageSize(最大SMB2消息大小)314b。SMB直通協(xié)商響應(yīng)包336可包括比圖3B中示出的那些字段更多或更少的字段,如省略號324所表示的。
[0057]根據(jù)各實施例,MinVersion字段302b可包括服務(wù)器/接收方106支持的最低SMB直通協(xié)議版本的值。MaxVersion字段304b可存儲服務(wù)器/接收方106支持的最高SMB直通協(xié)議版本。這個值可等于或大于MinVersion字段302b的值。在各實施例中,服務(wù)器/接收方106支持在MinVersion字段302b中的值和MaxVersion字段304b中的值之間的范圍內(nèi)(包括)的所有協(xié)議版本。PreferredVersion字段318存儲常用SMB直通協(xié)議版本的值。在各實施例中,PreferredVersion字段318的值在由客戶機的SMB直通協(xié)商請求包300的MinVersion字段302a和MaxVersion字段304a所指定的范圍之內(nèi)。在其他實施例中,PreferredVersion字段318的值在由服務(wù)器的SMB直通協(xié)商響應(yīng)包336的MinVersion字段302b和MaxVersion字段304b所指定的范圍之間。根據(jù)各實施例,Reserved字段306b僅是針對將來的未知要求的保留字段,并且沒有被服務(wù)器使用。
[0058]根據(jù)各實施例,CreditsRequested字段308b包括服務(wù)器/接收方106正請求的來自客戶機/請求方102的發(fā)送積分的數(shù)目的值。在各實施例中,CreditsRequested字段308b中的值大于零(0),以確保SMB2數(shù)據(jù)可在后續(xù)消息中被發(fā)送。然而,CreditsRequested字段308b中的值可以是任何數(shù)字,并可基于平均使用來設(shè)置。在各替換實施例中,CreditsRequested字段308b中的值基于要被發(fā)送的SMB消息的大小或者可基于其他因素。根據(jù)各實施例,大型消息可在一個積分被請求時被發(fā)送。CreditsGranted字段320a包括從服務(wù)器/接收方106向客戶機/請求方102授予的積分的數(shù)目。在各實施例中,CreditsGranted字段320a的值大于零(0),以允許客戶機/請求方102發(fā)送下一 SMB直通消息。
[0059]在各實施例中,狀態(tài)字段322包括至少一個標志或值。在一實施例中,狀態(tài)字段322包括一個或兩個值,即狀態(tài)成功或狀態(tài)不被支持。成功標志指定服務(wù)器/接收方106已接受了客戶機/請求方的SMB直通協(xié)商請求包300。不被支持標志指定服務(wù)器/接收方106已拒絕了客戶機/請求方102的SMB直通協(xié)商請求包300。
[0060]根據(jù)各實施例,PreferredSendSize字段310b可包括服務(wù)器/接收方106希望能夠向客戶機/請求方102傳送的最大SMB直通數(shù)據(jù)傳送包338的大小(可能以字節(jié)為單位)。在各實施例中,PreferredSendSize字段310b小于或等于SMB直通協(xié)商請求包300中的MaxReceiveSize字段312a。因此,服務(wù)器/接收方106所發(fā)送的數(shù)據(jù)包大小可以不大于客戶機/請求方102的存儲器緩沖區(qū)222a分配。
[0061 ] 在各實施例中,MaxReceiveSize字段312b包括服務(wù)器/接收方10b將接受的來自客戶機/請求方102的最大SMB直通數(shù)據(jù)傳送消息的大小(可能以字節(jié)為單位)。這個值可以等于服務(wù)器/接收方106所設(shè)置的存儲器緩沖區(qū)222b的塊或預(yù)定分配。因此,在各實施例中,沒有SMB2數(shù)據(jù)傳送將超過該存儲器分配。在各實施例中,這個值大于或等于閾值128,該閾值128至少是數(shù)據(jù)傳送包中的SMB直通頭部的大小。MaxSmb2MessageSize字段314b可包括服務(wù)器/接收方10b將接受的來自客戶機/請求方102的最大SMB2協(xié)議消息的大小(可能以字節(jié)為單位)。這個值由服務(wù)器/接收方106預(yù)先確定并設(shè)置。在各實施例中,MaxSmb2MessageSize字段314b中的值可以不大于存儲器緩沖區(qū)222b的總大小。通過這種方式,沒有SMB消息可溢出存儲器緩沖區(qū)222b。然而,根據(jù)一實施例,MaxSmb2MessageSize字段314b的值可以小于如用戶所確定的存儲器緩沖區(qū)222b中的存儲器量。
[0062]根據(jù)在此公開的各實施例的SMB直通數(shù)據(jù)傳送包338在圖3C中示出。SMB直通數(shù)據(jù)傳送包338可被發(fā)送以跨在協(xié)商期間建立的RDMA連接來傳送SMB2數(shù)據(jù)。客戶機/請求方102或服務(wù)器/接收方106中的任一方可發(fā)送或接收SMB2數(shù)據(jù)。由此,客戶機/請求方102和服務(wù)器/接收方106兩者一般被稱為接收方和發(fā)送方。SMB直通數(shù)據(jù)傳送包338可包括但不限于以下字段中的一個或多個,例如:CreditsRequested (請求的積分)308c、CreditsGranted (授予的積分)320b、Reserved (保留的)306c、RemainingDataLength (剩余數(shù)據(jù)長度)326,DataOffset (數(shù)據(jù)偏移)328,DataLength (數(shù)據(jù)長度)330和/或SMB2數(shù)據(jù)332。根據(jù)各實施例,SMB直通數(shù)據(jù)傳送包338可包括比圖3C中示出的那些字段更多或更少的字段,如省略號334所表示的。
[0063]在各實施例中,CreditsRequested字段308c包括發(fā)送方正請求的來自接收方的發(fā)送積分的數(shù)目的值。在各實施例中,CreditsRequested字段308c中的值大于零(0),以確保SMB2數(shù)據(jù)可在后續(xù)消息中被發(fā)送。然而,CreditsRequested字段308c中的值可以是任何數(shù)字,并且可基于所預(yù)測的將來使用(即,還要多少數(shù)據(jù)包來完成SMB2數(shù)據(jù)的傳送)來設(shè)置。CreditsGranted字段320b包括從發(fā)送方向接收方授予的積分的數(shù)目。在各實施例中,CreditsGranted字段320b的值可以是零,因為對等體沒有義務(wù)履行對等體對積分的請求。然而,對等體可以在CreditsGranted字段320b中提供積分以允許客戶機/請求方102發(fā)送下一 SMB直通消息。根據(jù)在此公開的各實施例,Reserved字段306c僅是針對將來的未知要求的保留字段,并且沒有被客戶機使用。
[0064]在各實施例中,RemainingDataLength字段326可包括接收方還需要接收的經(jīng)分段的SMB2消息的字節(jié)數(shù)。因此,這個字段中除零以外的任何值均向接收方指示具有更多數(shù)據(jù)的另一 SMB直通數(shù)據(jù)傳送包338將被發(fā)送。根據(jù)各實施例,如果SMB直通數(shù)據(jù)傳送包338承載完整的SMB2消息或為承載經(jīng)分段的SMB2數(shù)據(jù)的兩個或更多個SMB直通數(shù)據(jù)傳送包338中的最后一個,則RemainingDataLength字段326中的值為零(0)。RDMA能夠順序發(fā)送各消息。由此,重新組裝各消息被簡化了,因為各順序消息按被接收的嚴格次序來重新組裝。因此,各實施例例如放棄了對頭部中的消息標識符的需要,或者放棄了對其他更復(fù)雜的重新組裝技術(shù)的使用。
[0065]在一實施例中,DataOffset字段328包括從SMB直通數(shù)據(jù)傳送包338的開始處到所封裝的SMB2協(xié)議消息的前8字節(jié)的對齊字節(jié)的偏移的以字節(jié)為單位的值。在各實施例中,如果DataLength字段330的值為零,則DataOffset字段328也被設(shè)置為零。根據(jù)一實施例,如果DataLength的值不是零,則DataOffset字段328為某一值,并且可大于或等于24字節(jié),24字節(jié)是該頭部中的其他字段的大小。DataLength字段330可包括SMB2數(shù)據(jù)字段332中所封裝的SMB2協(xié)議消息的以字節(jié)為單位的大小。在各實施例中,如果SMB直通數(shù)據(jù)傳送包338沒有封裝SMB2協(xié)議消息,則DataLength字段330的值被設(shè)為零。根據(jù)各實施例,SMB2數(shù)據(jù)字段包括任何SMB2協(xié)議消息。
[0066]根據(jù)在此公開的各實施例,SMB2讀/寫請求340在圖3D中被示出。SMB2讀/寫請求340可以被封裝在SMB直通數(shù)據(jù)傳送包338中以執(zhí)行直接的RDMA讀/寫。直接的RDMA讀/寫僅發(fā)送未經(jīng)編碼的應(yīng)用數(shù)據(jù)。根據(jù)本公開的各實施例,SMB2讀/寫請求340在服務(wù)器106將執(zhí)行到客戶機102的RDMA寫的情況下可以是SMB2讀請求,并在服務(wù)器106將執(zhí)行從客戶機102的RDMA讀的情況下可以是SMB2寫請求。無論如何,SMB2讀/寫請求340中的各字段是類似的。應(yīng)注意,服務(wù)器106執(zhí)行客戶機102所請求的RDMA傳送。SMB2讀/寫請求340可包括但不限于以下字段中的一個或多個,例如:Channel(信道)342、Channel InfoOff set (信道信息偏移)346 和 ChannellnfoLength (信道信息長度)348。在一實施例中,這些字段可包括用于完成RDMA數(shù)據(jù)傳送的控制(steering)信息。根據(jù)一實施例,Reserved字段344僅是針對將來的未知要求的保留字段,并且沒有被使用。SMB2讀/寫請求340可包括比圖3D中示出的那些字段更多或更少的字段,如省略號351所表示的。所示的這些字段出于說明的目的被提供,并且不旨在進行限制。
[0067]在各實施例中,Channel字段342包括數(shù)據(jù)被尋找到的信道的值。RDMA連接可包括若干信道。根據(jù)各實施例,信道信息可包括對等體向RDMA設(shè)備提供來完成該傳送的信息。例如,如圖3E中所示出的,信道信息可包含一個或多個令牌、偏移、和各存儲器片段的長度,以及其他RDMA專用的信息。
[0068]在一實施例中,ChannelInf oOff set 字段 346 和 Channel InfoLength 字段 348 是指向數(shù)據(jù)包中的偏移、令牌和長度信息的指針。這些指針給出這些信息可位于SMB2讀或?qū)懻埱笾械奈恢?。在各實施例中,標?50包括用于控制或改變RDMA直通數(shù)據(jù)傳送的行為的任何息。
[0069]轉(zhuǎn)至圖3E,根據(jù)在此所公開的各實施例,RDMA信道描述符352被示出。RDMA信道描述符352可通常在信道字段342中被封裝在SMB直通請求中。RDMA信道描述符352可包括但不限于以下字段中的一個或多個,例如:Offset (偏移)354、Token (令牌)356和Length(長度)358。在一實施例中,這些字段為用于完成RDMA數(shù)據(jù)傳送的控制信息。RDMA信道描述符352可包括比圖3E中示出的那些字段更多或更少的字段,如省略號360所表示的。所示出的這些字段出于說明的目的被提供。為了完成直接數(shù)據(jù)傳送,RDMA基于信道字段342中的信息被定向到具有將被讀或?qū)懙臄?shù)據(jù)以及該數(shù)據(jù)的長度的存儲器。由于直通數(shù)據(jù)傳送僅發(fā)送應(yīng)用數(shù)據(jù),因此該信息有助于確保合適的傳送。
[0070]根據(jù)一實施例,0ffset354是數(shù)據(jù)開始之處的以字節(jié)或比特為單位的值。0fTset354可以從存儲器塊起始地址開始測量,該存儲器塊起始地址可以使用Token356中提供的信息來定位。Length358是數(shù)據(jù)片段有多長的以比特或字節(jié)為單位的值。這一控制信息指導例如直接數(shù)據(jù)傳送。
[0071]根據(jù)此處所公開的一實施例,圖2A和圖2B中描繪的各個軟件功能模塊的交互被進一步示出在圖4A-4C中描繪的用于協(xié)商RDMA連接的各操作步驟400中。圖4A示出了根據(jù)本公開的各實施例的數(shù)據(jù)包408和424在客戶機102和服務(wù)器106之間的傳送的表不400A。根據(jù)本公開的各實施例,圖4B以客戶機102的角度進行,而圖4C以服務(wù)器106的角度進行。應(yīng)注意,過程400被描述為客戶機請求RDMA連接并且服務(wù)器106作出響應(yīng)。然而,根據(jù)各實施例,服務(wù)器106作出請求并且客戶機作出響應(yīng)的相反情況可以為真。此外,該方法可例如在多個客戶機之間和/或在多個服務(wù)器之間進行。
[0072]轉(zhuǎn)至圖4B,示出了根據(jù)一實施例的用于通過RDMA使用SMB2協(xié)商連接的示例操作步驟400B。過程400B在開始操作402B處被發(fā)起,并且過程400B前進到客戶機預(yù)先發(fā)布接收區(qū)404。在各實施例中,RDMA接口 216a自動地檢測RNIC108a/108b并利用RNIC108a/108b以查看它們是否可用并被合適地配置。接著,在一實施例中,SMB直通NPI被SMB直通模塊214展示。SMB直通客戶機214a可以打開RDMA適配器的處理程序以形成針對SMB2客戶機208的RDMA連接。在一實施例中,SMB直通客戶機214a隨后通過RDMA接口 216a請求RDMA連接。SMB直通客戶機214a還可創(chuàng)建存儲器緩沖區(qū)222a中的分配,并確定對于初始發(fā)送積分要請求什么,以及對于接收積分什么將被允許。在各實施例中,存儲器緩沖區(qū)222a中的分配可以具有預(yù)定大小。根據(jù)各實施例,存儲器緩沖區(qū)222a中的存儲器總量也可被確定。
[0073]返回到圖4B,SMB直通客戶機214a可隨后構(gòu)建406SMB直通協(xié)商請求包300來發(fā)送到RDMA接口 216a。SMB直通協(xié)商請求包300在例如圖3A中被描述。由此,SMB直通客戶機214a設(shè)置了 SMB直通協(xié)商請求包300中的各字段。因此,SMB直通客戶機214a確定客戶機102可支持的SMB直通的最小版本和最大版本。SMB直通客戶機214a確定要請求的積分數(shù)。在各實施例中,要請求的積分數(shù)可基于要發(fā)送的已知的將來SMB消息、基于將來可能發(fā)生的預(yù)測的SMB流量、基于對SMB的歷史使用、或依據(jù)某一其他方法。發(fā)送大小用內(nèi)部函數(shù)和速度考慮來確定。最大接收大小可與存儲器緩沖區(qū)分配的大小掛鉤。最后,最大SMB消息大小被確定并被設(shè)置(一般,最大SMB消息大小大到足以允許對等體發(fā)送大型SMB2數(shù)據(jù)包,但并不大到會使用所有存儲器)。根據(jù)本公開的各實施例,該收集的信息被輸入到SMB直通協(xié)商請求包300中。
[0074]接著,SMB直通客戶機214a發(fā)送408B SMB直通協(xié)商請求包300。在一實施例中,SMB直通客戶機214a通過發(fā)送操作請求RDMA接口 216a發(fā)送SMB直通協(xié)商請求包300。RDMA接口 216a與RDMA接口 216b通信,并將SMB直通協(xié)商請求包300發(fā)送給服務(wù)器106。通過發(fā)送SMB直通協(xié)商請求包300,SMB直通客戶機214a啟動協(xié)商請求期滿計時器410。協(xié)商請求期滿計時器可具有預(yù)訂的值,并從該值到零倒計時。SMB直通客戶機214a隨后等待對SMB直通協(xié)商請求包300的響應(yīng)。如果確定411協(xié)商請求期滿計時器在接收到對SMB直通協(xié)商請求包300的響應(yīng)之前期滿,則過程400B以否繼續(xù)前進至結(jié)束操作432B,在操作432B該連接被停止。
[0075]轉(zhuǎn)到圖4C的開始操作402C,在各實施例中,服務(wù)器106預(yù)測SMB直通協(xié)商請求包300并且預(yù)先發(fā)布接收區(qū)412。根據(jù)各實施例,SMB2服務(wù)器212b可監(jiān)聽活動,并自動發(fā)現(xiàn)RDMA在RNIC108b的端口上可用并被綁定在該端口上。SMB2服務(wù)器212b打開監(jiān)聽器端點,并確定在RNIC108b上RDMA可用。接著,SMB2服務(wù)器212b隨后開始與SMB直通服務(wù)器214b的通信。SMB直通服務(wù)器214b可打開RDMA連接,并接收RDMA適配器處理程序。SMB直通服務(wù)器214b隨后通過RDMA接口 216b請求RDMA連接。SMB直通服務(wù)器214b可隨后接受RDMA連接,由此向客戶機102通知該連接請求成功了。來自RDMA接口 216a的這個成功指示觸發(fā)客戶機發(fā)送協(xié)商請求。
[0076]根據(jù)各實施例,SMB直通服務(wù)器214b還可創(chuàng)建存儲器緩沖區(qū)222b中的分配,并確定對于初始發(fā)送積分要請求什么,以及對于接收積分什么將被允許。存儲器緩沖區(qū)222b中的分配可以具有預(yù)定大小。根據(jù)本公開的各實施例,存儲器緩沖區(qū)222b中的存儲器總量也可被確定。
[0077]返回到圖4C,SMB直通服務(wù)器214b可隨后啟動協(xié)商請求期滿計時器414。在各實施例,服務(wù)器106處的協(xié)商請求期滿計時器可具有預(yù)定值,并從該值到零倒計時。SMB直通服務(wù)器214b隨后等待以接收SMB直通協(xié)商請求包300。在等待時,SMB直通服務(wù)器214b監(jiān)視RDMA連接,并確定416該協(xié)商請求期滿計時器是否在接收SMB直通協(xié)商請求包300之前期滿。如果協(xié)商請求計時器期滿,則過程400C以否前進至結(jié)束操作432 C,在操作432 C該連接被停止。
[0078]然而,如果SMB直通協(xié)商請求包300在協(xié)商請求期滿計時器的期滿之前到達RNIC108b及RDMA接口 216b,則過程400C以是前進至通過RDMA接口 216b來接收并確認408C SMB直通協(xié)商請求包300,并將該數(shù)據(jù)包放置在存儲器緩沖區(qū)222b中。接著,SMB直通服務(wù)器214b被通知該數(shù)據(jù),并確定SMB直通協(xié)商請求包300是否有效418。
[0079]在各實施例中,為了確認SMB直通協(xié)商請求包300,SMB直通服務(wù)器214b從該SMB直通協(xié)商請求包300讀數(shù)據(jù),并確定以下,例如-MaxVersion字段304的值是否小于MinVersion字段302的值或是否該范圍中的值都不被支持;CreditsRequested字段308的值是否為零MaxReceiveSize字段312的值是否小于預(yù)定閾值(例如,128字節(jié));或者,MaxSmb2MessageSize字段314的值是否小于預(yù)定閾值。如果以上各項中的任一項為真,則SMB直通協(xié)商請求包300不是有效的,并且過程400C以否前進至結(jié)束操作432C,在操作432C,SMB直通服務(wù)器214b斷開連接。如果所有這些檢查都不為真,則過程400C以是前進至處理SMB直通響應(yīng)420,在該處理中,SMB直通協(xié)商請求包300被SMB直通服務(wù)器214b發(fā)送到SMB直通客戶機214a。
[0080]在各實施例中,在處理SMB直通協(xié)商請求包300時,SMB直通服務(wù)器214b將設(shè)置ProtocolVersion (協(xié)議版本)設(shè)為等于客戶機102和服務(wù)器106所共享的最大協(xié)議版本。SMB直通服務(wù)器214b還確定要授予多少積分。在各實施例中,要授予的積分數(shù)取決于存儲器緩沖區(qū)222b中的可用空間或其他因素。在作出這些確定后,SMB直通服務(wù)器214b生成422SMB直通協(xié)商響應(yīng)包336。在一實施例中,SMB直通服務(wù)器214b設(shè)置SMB直通協(xié)商響應(yīng)包336中的各字段。例如,PreferredVersion字段被設(shè)置成設(shè)置ProtocolVersion中的值。根據(jù)一實施例,CreditsGranted320a被設(shè)置成SMB直通服務(wù)器214b所確定的積分數(shù)。以與SMB直通協(xié)商請求包300類似的方式來填充其他字段。SMB直通協(xié)商響應(yīng)包336被隨后發(fā)送424C到客戶機。在各實施例中,SMB直通服務(wù)器214b將SMB直通協(xié)商響應(yīng)包336發(fā)送給RDMA接口 216b來發(fā)送。
[0081]返回到圖4B,根據(jù)各實施例,SMB直通客戶機214a可確定411該響應(yīng)是否在協(xié)商期滿計時器的期滿之前被接收到。如果該響應(yīng)在該計時器的期滿之前被接收到,則過程400B以是前進至確認424B SMB直通協(xié)商響應(yīng)包336。RDMA接口 216a將消息接收到存儲器緩沖區(qū)222a中。SMB直通客戶機214a讀SMB直通協(xié)商響應(yīng)包336并隨后確認該消息。為了確認SMB直通協(xié)商響應(yīng)包336,SMB直通客戶機214a確定428以下,例如:根據(jù)本公開的各實施例,Status 字段 322 是否不是 STATUS_SUCCESS(狀態(tài) _ 成功);PreferredVersion 字段 318是否不包含處于由客戶機的SMB直通協(xié)商請求包300的MinVersion字段302和MaxVersion字段304所指定的范圍內(nèi)的值;CreditsRequested字段308b是否為零;CreditsGranted字段320a是否為零;PreferredSendSize字段310b是否大于由客戶機的SMB直通協(xié)商請求包330的MaxReceiveSize字段312所指定的值;或者,MaxReceiveSize字段312b是否小于預(yù)定閾值(例如,128字節(jié))。如果以上中的任一個為真,則SMB直通協(xié)商響應(yīng)包336不是有效的,并且過程400B以否前進到結(jié)束操作432B,在操作432B,SMB直通客戶機214a斷開連接。根據(jù)此處所公開的各實施例,如果所有這些檢查都不為真,則過程400B以是前進至處理SMB直通響應(yīng)430,在該處理中,SMB直通協(xié)商響應(yīng)包336被SMB直通客戶機214a處理。
[0082]在各實施例中,在處理SMB直通協(xié)商響應(yīng)包336時,SMB直通客戶機214a完成以下,例如:將在設(shè)置226中的該連接的PeerTargetSendCreditsCount (對等體目標發(fā)送積分計數(shù))設(shè)置設(shè)為等于CreditsRequested字段308b ;將在SMB直通連接屬性中的該連接的SendCreditsCount(發(fā)送積分計數(shù))設(shè)置設(shè)為等于CreditsGranted字段320a ;將在設(shè)置226中的該連接的MaxSendSize (最大發(fā)送大小)設(shè)置設(shè)為等于MaxReceiveSize (最大接收大小)字段312b ;將在設(shè)置226中的該連接的ReceiveSize設(shè)置設(shè)為等于PreferredSendSize字段310b ;將在設(shè)置226中的該連接的MaxOutboundFragmentedMessageSiz (最大出站經(jīng)分段消息的大小)設(shè)置設(shè)為等于MaxReceiveSize字段312b ;以及,將該連接的空閑連接計時器設(shè)為在預(yù)定時間量(例如,幾小時、幾分鐘等)內(nèi)期滿并啟動該計時器。一旦執(zhí)行了以上步驟,RDMA連接協(xié)商就完成了,并且客戶機102和服務(wù)器106可啟動交換SMB直通數(shù)據(jù)傳送包。過程400B隨后在結(jié)束操作432B終止。
[0083]根據(jù)此處所公開的一實施例,圖2A和圖2B中所描繪的各個軟件功能模塊的交互還被示出在圖5A-?中所描繪的用于通過所建立的RDMA連接來交換SMB2數(shù)據(jù)的操作步驟500中。根據(jù)本公開的各實施例,在請求和響應(yīng)通信中,通過將SMB2數(shù)據(jù)封裝成SMB直通數(shù)據(jù)傳送包338的數(shù)據(jù)載荷來通過所建立的SMB直通連接在客戶機102和服務(wù)器106之間傳送該SMB2數(shù)據(jù)。請求和響應(yīng)通信可用于例如控制信道通信、交換文件元數(shù)據(jù)、或用于其他過程。圖5A示出了根據(jù)本公開的各實施例的數(shù)據(jù)包516/518、530、532和546在客戶機102和服務(wù)器106之間的傳送的表示500A。圖5B和圖5C采用客戶機102的角度,而圖采用服務(wù)器106的角度。應(yīng)該注意,過程500被描述成客戶機獨立地或者響應(yīng)于來自服務(wù)器的請求而將SMB2數(shù)據(jù)發(fā)送給服務(wù)器106。然而,服務(wù)器106對請求作出響應(yīng)并將數(shù)據(jù)發(fā)送回客戶機102的相反情況可以為真。因此,在各實施例中,此處所描述的各過程適用于服務(wù)器發(fā)送請求并要求積分的情況。此外,該方法可以例如在多個客戶機之間或者在多個服務(wù)器之間進行。
[0084]轉(zhuǎn)至圖5B,示出了根據(jù)此處公開的各實施例的用于通過RDMA使用SMB2交換數(shù)據(jù)的示例操作步驟500B。開始操作502被發(fā)起,并且過程500B前進到客戶機102建立RDMA連接504。根據(jù)本公開的各實施例,建立RDMA連接可以如參考圖4A-4C所描述的。在一實施例中,SMB直通客戶機214a設(shè)置若干連接屬性,包括將MaxSendSize設(shè)置設(shè)為等于MaxReceiveSize 字段 312b,將該連接的 ReceiveSize 設(shè)置設(shè)為等于 PreferredSendSize 字段310b,以及將在設(shè)置226中的該連接的MaxOutboundFragmentedMessageSize設(shè)置設(shè)為等于MaxReceiveSize字段312b。根據(jù)各實施例,通過這種方式,客戶機102建立了可以向服務(wù)器106發(fā)送的數(shù)據(jù)包的大小。
[0085]返回到圖5B,根據(jù)各實施例,SMB直通客戶機214a可確定將SMB2消息傳輸?shù)椒?wù)器106所需的SMB直通數(shù)據(jù)傳輸包的數(shù)目。為了作出該確定,SMB直通客戶機214a可首先檢索在協(xié)商期間設(shè)置的MaxSendSize (被指定為R)。SMB直通客戶機214a隨后可確定要發(fā)送的SMB2協(xié)議消息的大??;在各實施例中,該值被設(shè)為“S”。SMB直通客戶機214a還確定SMB直通數(shù)據(jù)傳送包338的頭部所消耗的字節(jié)數(shù)(在各實施例中被指定為P)以及為使SMB直通數(shù)據(jù)傳送包338的有效載荷在8字節(jié)對齊的邊界上開始的邊距(例如,Data0ffset328等)。在各實施例中,SMB直通客戶機214a隨后確定S是否小于或等于(R-P),并且根據(jù)各實施例,如果如此,則可通過將S除以(R-P)來確定數(shù)據(jù)包的數(shù)目。
[0086]過程500B隨后前進至由SMB直通客戶機214a確定分段是否被使用510。在一實施例中,在SMB2協(xié)議消息不“容納”到單個SMB直通數(shù)據(jù)傳送包338中時,分段被使用。換言之,S大于(R - P)嗎?如果不要使用分段,則過程500B以否前進至發(fā)送一個SMB直通數(shù)據(jù)傳送包518B。另一方面,如果分段被使用,則過程500B以是前進至初始化各傳送緩沖區(qū)字節(jié)512。
[0087]返回步驟518,根據(jù)各實施例,SMB2協(xié)議消息可以被傳送,而無需進行分段。用于傳送數(shù)據(jù)包的存儲器緩沖區(qū)222a的一部分被初始化。在各實施例中,前P個字節(jié)被初始化以設(shè)置SMB直通數(shù)據(jù)傳送包338的頭部信息,并添加為零的邊距字節(jié)以確保SMB2載荷為8字節(jié)對齊的。因此,根據(jù)各實施例,在該緩沖區(qū)中,DataOffset字段328被設(shè)為P,DataLength字段330被設(shè)為S,且RemainingDataLength字段326被設(shè)為零(0)。有關(guān)積分的信息或?qū)Ψe分的請求被存儲在CreditsRequested字段308c或CreditsGranted字段320b中。因此,客戶機102可以在SMB直通數(shù)據(jù)傳送包338中請求或授予更多積分。在各實施例中,SMB直通數(shù)據(jù)傳送包的發(fā)送方必須將CreditsRequested字段設(shè)為至少為一(1)。存儲器緩沖區(qū)222a中的接著的S個字節(jié)被初始化,并且SMB2協(xié)議消息被存儲在SMB數(shù)據(jù)字段332中。在SMB直通數(shù)據(jù)傳送包338被組裝后,SMB直通客戶機214a將該數(shù)據(jù)包發(fā)送518B給RDMA接口 216a以通過RDMA連接將其發(fā)送到服務(wù)器106。過程500B隨后通過頁面連接符B522前進到結(jié)束操作548C,并且過程500B終止。
[0088]返回步驟512,根據(jù)各實施例,在步驟512,在S大于(R-P)的情況下,SMB2協(xié)議消息被劃分成兩個或更多個部分。這些部分隨后被拍成序列以在一系列RDMA發(fā)送操作中被發(fā)送,這些RDMA發(fā)送操作中的每一個操作承載SMB2協(xié)議消息的一部分(被稱為片段)。為了將SMB2協(xié)議消息劃分成片段,第一有效載荷的大小被設(shè)為X, X等于或小于(R-P)。根據(jù)一實施例,X表示將至少由第一 RDMA發(fā)送操作來傳送的SMB2協(xié)議消息的字節(jié)數(shù)。正如步驟518B—樣,用于傳送數(shù)據(jù)包的存儲器緩沖區(qū)222a的一部分被初始化。在各實施例中,前P個字節(jié)被初始化以設(shè)置SMB直通數(shù)據(jù)傳送包338的頭部信息以及邊距字節(jié)。接著,DataOffset字段328被設(shè)為P, DataLength字段330被設(shè)為X,并且RemainingDataLength字段326被設(shè)為(S - X) 514。在各實施例中,RemainingDataLenght字段326指示SMB2協(xié)議消息中還剩多少字節(jié)要被傳送。在各實施例中,當SMB2協(xié)議消息的最后一個片段被傳送時,(S-X)將為零(0)。在最后一個數(shù)據(jù)包中,RemainingDataLength字段326隨后被設(shè)為零,這指示SMB直通數(shù)據(jù)傳送包338承載SMB2協(xié)議消息的最后一個片段。有關(guān)積分的信息或?qū)Ψe分的請求被存儲在CreditsRequested字段308c或CreditsGranted字段320b中。因此,在各實施例中,客戶機102在SMB直通數(shù)據(jù)傳送包338中請求或授予更多積分。存儲器緩沖區(qū)222a的接著的X個字節(jié)隨后被初始化。根據(jù)此處所公開的各實施例,SMB2協(xié)議消息的片段可隨后被存儲在SMB2數(shù)據(jù)字段332中。
[0089]在將SMB直通數(shù)據(jù)傳送包338與SMB2協(xié)議消息的前X個未經(jīng)傳送的字節(jié)組裝在一起后,SMB直通數(shù)據(jù)傳送包338被發(fā)送516B至服務(wù)器。在各實施例中,SMB直通客戶機214a將SMB直通數(shù)據(jù)傳送包338發(fā)送516B到RDMA接口 216a以通過RDMA連接發(fā)送到服務(wù)器106。過程500B隨后通過頁面連接符A520前進到可選步驟526,在步驟526,SMB直通客戶機214a確定526是否要發(fā)送包含另一片段的另一 SMB直通數(shù)據(jù)傳送包338。因此,在各實施例中,SMB直通客戶機214a確定在發(fā)送了最后一個數(shù)據(jù)包之后,(S-X)是否為0。如果(s-χ)為0或小于零,則意味著最后一個片段已經(jīng)在最后一個SMB直通數(shù)據(jù)傳送包338中被發(fā)送,過程500B以否前進到結(jié)束操作548C,并且過程500B終止。然而,如果(S-Χ)大于0,則過程500B以是前進到確定是否存在足夠的發(fā)送積分528。在各實施例中,步驟526可以是可選的(如圖所示),因為傳輸這些片段的SMB直通數(shù)據(jù)傳送包338可以在存儲器緩沖區(qū)222a中被預(yù)先準備,并被順序地發(fā)送。當緩沖區(qū)222a為空時,過程500B終止。隨后不存在確定下一數(shù)據(jù)包是否要被發(fā)送的需要。應(yīng)注意,根據(jù)各實施例,在SMB2協(xié)議消息被分段時,承載這些片段的RDMA發(fā)送操作被順序并單調(diào)地發(fā)送,并且可能不會受到與該經(jīng)分段的SMB2協(xié)議消息無關(guān)的其他RDMA發(fā)送操作的干擾。根據(jù)一實施例,在接收方處RDMA傳送排序?qū)⒈A暨@些片段的順序,使得接收對等體可重新構(gòu)造原始消息。
[0090]返回到步驟528,SMB直通客戶機214a確定528是否存在用于發(fā)送下一片段的足夠積分。本質(zhì)上,SMB直通客戶機214a確定是否還留存一個發(fā)送積分。如果存在一發(fā)送積分,則過程500B通過頁面連接符C524以是前進到步驟512。在各實施例中,RDMA傳輸具有由接收方在發(fā)送方可發(fā)送數(shù)據(jù)包之前預(yù)先發(fā)布的接收緩沖區(qū)。這個規(guī)則需要發(fā)送方和接收方之間的協(xié)調(diào),以確保發(fā)送方不會在接收方已預(yù)先發(fā)布接收區(qū)之前嘗試發(fā)送數(shù)據(jù)包。根據(jù)本公開的各實施例,SMB直通使用發(fā)送積分的系統(tǒng)來實現(xiàn)所需的協(xié)調(diào)。
[0091]在一實施例中,從服務(wù)器106或客戶機102授予的發(fā)送積分表示該服務(wù)器106或客戶機102上的單個預(yù)先發(fā)布的接收。對等體被授權(quán)用一個發(fā)送積分執(zhí)行一個RDMA發(fā)送操作??蛻魴C102還可以通過設(shè)置CreditsRequested字段308c或者以分開的發(fā)送積分請求(根據(jù)一實施例,其不會在傳輸經(jīng)分段的SMB2數(shù)據(jù)的一組SMB直通數(shù)據(jù)傳送包338的中間被發(fā)送)的形式來向服務(wù)器106提供與客戶機102需要多少發(fā)送積分來高效地支持其工作負載有關(guān)的信息。發(fā)送積分在SMB直通數(shù)據(jù)傳送包338的CreditsGranted字段320b中被授予。因此,SMB直通客戶機214a可通過將CreditsRequest字段308c中的值設(shè)置成較高的數(shù)字(可能覆蓋所有將來的經(jīng)分段數(shù)據(jù)包)來請求更多的發(fā)送積分。根據(jù)一實施例,SMB直通客戶機214a可隨后通過等待從服務(wù)器106發(fā)送的SMB直通數(shù)據(jù)傳送包338來等待530C以接收發(fā)送積分,該SMB直通數(shù)據(jù)傳送包338不具有數(shù)據(jù)但在該SMB直通數(shù)據(jù)傳送包338的CreditsGranted字段320b中包括發(fā)送積分。SMB直通客戶機214a可以通過設(shè)置計時器224a中的SendCreditesGrantedTimer (發(fā)送積分授予計時器)以在查詢532C處確定積分是否被接收。如果SendCreditsGrantedTimer在積分被授予之前期滿547,則過程500B以“是”前進至使傳送操作失敗或者終止,并且過程500B隨后在“結(jié)束”操作548C處終止。然而,如果積分被授予532C,則過程500B通過頁面連接符C524以“是”前進到步驟512。根據(jù)一實施例,如果沒有設(shè)置計時器和/或該計時器尚未期滿547,則過程500B以“否”前進并且不使傳送操作失敗或終止,而改為繼續(xù)等待530C以接收發(fā)送積分。
[0092]轉(zhuǎn)至圖?和過程500D的開始操作502D,在服務(wù)器106處,SMB直通數(shù)據(jù)傳送包338被接收516D。在一實施例中,RDMA接口 216b接收SMB直通數(shù)據(jù)傳送包338并將其發(fā)送到SMB直通服務(wù)器214b。首先,SMB直通服務(wù)器214b讀頭部信息。SMB直通服務(wù)器214b前進到查詢536以確定RemainingDataLength字段326是否為除零以外的某個數(shù)。在一實施例中,如果RemainingDataLength字段326為零,則SMB直通數(shù)據(jù)傳送包338是唯一數(shù)據(jù)包,并且過程500D以“否”前進到處理SMB數(shù)據(jù)包數(shù)據(jù)544,此處SMB直通服務(wù)器214b處理該數(shù)據(jù)包數(shù)據(jù)并將SMB2協(xié)議消息發(fā)送到SMB2服務(wù)器212b。如果RemainingDataLength字段326是除零以外的某個數(shù),則過程500D以“是”前進到分配重新組裝緩沖區(qū)538。
[0093]在步驟538,在一實施例中,SMB直通服務(wù)器214b分配存儲器緩沖區(qū)222b的一部分以便在該緩沖區(qū)222b中重新組裝SMB2協(xié)議消息。因此,SMB直通服務(wù)器214b可分配存儲器緩沖區(qū)222b中的足夠塊來接受當前SMB直通數(shù)據(jù)傳送包338中的以及即將到來的SMB直通數(shù)據(jù)傳送包338中的數(shù)據(jù),這基于DataLength字段330的值以及RemainingDataLength字段326的值。根據(jù)本公開的各實施例,SMB直通服務(wù)器214b可隨后從SMB2數(shù)據(jù)字段332中讀SMB2數(shù)據(jù),并將該數(shù)據(jù)復(fù)制到所分配的緩沖區(qū)540中。
[0094]接著,一實施例為SMB直通服務(wù)器214b提供等待并接收546D下一 SMB直通數(shù)據(jù)傳送包338。在一實施例中,SMB2數(shù)據(jù)字段332中的數(shù)據(jù)還被復(fù)制到存儲器緩沖區(qū)222b中的下一部分。在一替換實施例中,SMB直通服務(wù)器214b可以可選地確定此下一 SMB直通數(shù)據(jù)傳送包338是否是包含經(jīng)分段的數(shù)據(jù)542的最后一個數(shù)據(jù)包。為了作出該確定,SMB直通服務(wù)器 214b 檢查 RemainingDataLength 字段 326 是否為零。如果 RemainingDataLength字段326為零,則SMB直通服務(wù)器214b理解沒有更多數(shù)據(jù)包將被接收,并且過程500D以“是”前進到處理來自存儲器緩沖區(qū)222b的SMB2協(xié)議消息544。過程500D隨后在“結(jié)束”操作548D終止。另一方面,根據(jù)一實施例,如果RemainingDataLength字段326為除零以外的某個數(shù),則SMB直通服務(wù)器214b理解另一(另一些)數(shù)據(jù)包將被接收,并且過程500D以“否”前進到接收546D下一 SMB直通數(shù)據(jù)傳送包338。
[0095]根據(jù)此處所公開的一實施例,圖2A和圖2B中描繪的各個軟件功能模塊的交互被進一步示出在圖6中描繪的用于執(zhí)行RDMA直通數(shù)據(jù)傳送的各操作步驟600中。圖6示出了根據(jù)本公開的各實施例的在客戶機102和服務(wù)器106之間的數(shù)據(jù)傳送的表示。
[0096]如圖6中所示出的,過程600在開始操作602處被發(fā)起,并且SMB2客戶機208創(chuàng)建604SMB2讀/寫請求340。應(yīng)用220可以請求要被傳送給服務(wù)器106的數(shù)據(jù)或要從服務(wù)器106讀取的數(shù)據(jù)。根據(jù)本公開的各實施例,數(shù)據(jù)傳送可以被SMB2客戶機208定向到利用RDMA直通數(shù)據(jù)傳送,使得SMB2服務(wù)器106唯一地執(zhí)行實際的RDMA請求。為了開始該傳送,SMB2客戶機208注冊目標存儲器緩沖區(qū),以提供或接收未經(jīng)編碼的應(yīng)用數(shù)據(jù),并隨后生成將通過RDMA發(fā)送并執(zhí)行的SMB讀/寫命令。該命令可被包括在SMB2讀/寫請求340中,并被發(fā)送至SMB直通客戶機214a,該SMB直通客戶機214a將SMB2讀/寫請求340封裝606在SMB直通數(shù)據(jù)傳送包中。在各實施例中,SMB2讀/寫請求340被存儲在SMB直通數(shù)據(jù)傳送包中的SMB2數(shù)據(jù)字段332中。SMB直通數(shù)據(jù)傳送包可隨后通過RDMA接口 216被發(fā)送608到服務(wù)器106。在一實施例中,服務(wù)器106接收SMB Diret數(shù)據(jù)傳送包,并從SMB2數(shù)據(jù)字段332中讀取SMB2讀/寫請求340。SMB直通服務(wù)器214b可隨后從SMB2讀/寫請求340 中讀取包括信道 342、Channel Inf oOff set (信道信息偏移)346 和 Channel InfoLength(信道信息長度)348在內(nèi)的數(shù)據(jù)。該信息可將SMB直通服務(wù)器214b定向到RDMA信道描述符352中的控制信息610。通過該控制信息,SMB直通服務(wù)器214b可通過將未經(jīng)編碼的應(yīng)用數(shù)據(jù)發(fā)送612到客戶機102的緩沖區(qū)中的存儲器位置或從該存儲器位置檢索612未經(jīng)編碼的應(yīng)用數(shù)據(jù)來啟動直通數(shù)據(jù)傳送。過程600隨后在“結(jié)束”操作614處終止。
[0097]圖4A-4C、圖5A-5D以及圖6分別示出了根據(jù)此處所公開的各實施例的用于通過RDMA使用文件訪問協(xié)議協(xié)商通信以及通過RDMA使用文件訪問協(xié)議交換數(shù)據(jù)的示例操作特征。在各實施例中,所描繪的各操作步驟可被組合到其他步驟中和/或被重新安排。此外,可使用例如更少或更多的步驟。
[0098]一般來說,積分是本發(fā)明各實施例的優(yōu)點。發(fā)送積分表示已被預(yù)先發(fā)布來接收對等體上的傳入數(shù)據(jù)的緩沖區(qū)。由此,發(fā)送積分表示已被提交給對等體使得該對等體可使用其來傳送數(shù)據(jù)的有限接收方資源(存儲器、存儲器區(qū)域等)。在各實施例中,由于RDMA的特性,接收區(qū)一旦被發(fā)布后就不可被取消。對于要被釋放的與接收區(qū)相關(guān)聯(lián)的資源,這些資源被用于服務(wù)于傳入發(fā)送。在其中接收對等體開始在各資源上慢速運行并想要回收這些資源中它已專用于尚未解決的接收區(qū)的一些資源的各實施例中,這造成可能的問題。根據(jù)此處所公開的各實施例,由于接收區(qū)無法被取消,因此回收這些資源取決于對等體的協(xié)作。
[0099]根據(jù)一實施例,對于SMB直通中的這一問題的解決方案被稱為發(fā)送積分撤銷。向?qū)Φ润w傳送的SMB直通數(shù)據(jù)傳送包具有指定多少附加的發(fā)送積分已被授予對等體的CreditsGranted字段。在替換實施例中,通過在SMB直通數(shù)據(jù)傳送包338中設(shè)置CreditRevocation(積分撤銷)標志(未示出),CreditsGranted字段320b的含義改變?yōu)閷Φ润w可保持的發(fā)送積分的數(shù)目。例如,如果CreditRevocation標志被設(shè)置且CreditsGranted字段320b的值為十(10),則十(10)為接收方可保留的積分數(shù)。如果接收方當前持有多于十(10)個發(fā)送積分,則接收方執(zhí)行一系列RDMA發(fā)送操作來將所撤銷的發(fā)送積分用完,使得接收方最終具有十(10)個或更少的發(fā)送積分。被執(zhí)行來將所撤銷的發(fā)送積分用完的發(fā)送操作可包括發(fā)送空SMB直通數(shù)據(jù)傳送包338 (不具有數(shù)據(jù)有效載荷的數(shù)據(jù)包)。根據(jù)各實施例,在接收到傳入的空SMB直通數(shù)據(jù)傳送包338后,撤銷發(fā)送積分的對等體可以根據(jù)其認為合適的釋放這些資源或重新使用它們。
[0100] 盡管發(fā)送積分允許兩個對等體使它們的發(fā)送和接收操作同步,在各實施例中這些對等體嘗試避免發(fā)送積分死鎖。想象其中對等體Y具有來自對等體X的單個發(fā)送積分并且對等體X具有來自對等體Y的單個發(fā)送積分的場景。在這個場景中,每一對等體被授權(quán)在任何時刻對其對等體執(zhí)行單次發(fā)送。想象X和Y兩者都使用該過程中的它們的單個發(fā)送積分來同時執(zhí)行發(fā)送操作,但由兩個對等體傳送的SMB直通數(shù)據(jù)傳送包338沒有向?qū)Φ润w授予附加發(fā)送積分。所得的狀態(tài)被稱為發(fā)送積分死鎖。X和Y兩者都已使用了其最后的發(fā)送積分。為了能夠向?qū)Φ润w發(fā)送附加的數(shù)據(jù)包,每一對等體需要附加的發(fā)送積分。然而,發(fā)送積分是經(jīng)由SMB直通數(shù)據(jù)傳送包338來授予的,并且任一方都不可執(zhí)行任何進一步的發(fā)送操作。結(jié)果是任一對等體都不可傳送任何附加的數(shù)據(jù)包,并且不存在它們可獲取進一步發(fā)送積分的機制。因此,死鎖已發(fā)生。
[0101]根據(jù)本公開的各實施例,這個問題的解決方案只是一規(guī)則。根據(jù)一實施例,在SMB直通對等體使用了它的最后一個發(fā)送積分時,正被發(fā)送的SMB直通數(shù)據(jù)傳送數(shù)據(jù)包338向該對等體授予至少一個(1)附加發(fā)送積分。如果兩個對等體都遵循這個規(guī)則,則死鎖不會發(fā)生,因為每一對等體將總是能夠通過授予附加的發(fā)送積分來對另一方作出響應(yīng)。
[0102]最后,圖7示出可在其上實現(xiàn)本文公開的各實施例的示例計算機系統(tǒng)700。根據(jù)此處所公開的各實施例,描繪了諸如例如客戶機/應(yīng)用服務(wù)器102或文件服務(wù)器106之類的、具有至少一個處理器702的用于如此處所示的交換消息數(shù)據(jù)的計算機系統(tǒng)700。系統(tǒng)700具有存儲器704,包括例如系統(tǒng)存儲器、易失性存儲器和非易失性存儲器。在其最基本的配置中,計算系統(tǒng)700在圖7中由虛線706示出。另外,系統(tǒng)700還可包括另外的存儲(可移動和/或不可移動),其中包括但不限于磁盤、光盤或磁帶。在圖7中通過可移動存儲708和不可移動存儲710示出這樣的附加存儲。
[0103]如這里所使用的術(shù)語計算機可讀介質(zhì)可以包括計算機存儲介質(zhì)。計算機存儲介質(zhì)可包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其他數(shù)據(jù)等信息的任何方法或技術(shù)實現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。系統(tǒng)存儲器704、可移動存儲708和不可移動存儲710都是計算機存儲介質(zhì)(即,存儲器存儲)的示例。計算機存儲介質(zhì)可以包括,但不限于,RAM、ROM、電可擦除只讀存儲器(EEPR0M)、閃存或其他存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其他光存儲、磁帶盒、磁帶、磁盤存儲或其他磁性存儲設(shè)備、或可用于存儲信息且可以由計算系統(tǒng)700訪問的任何其他介質(zhì)。任何這樣的計算機存儲介質(zhì)都可以是系統(tǒng)700的一部分。圖7中的說明不意圖以任何方式限制本公開的范圍。
[0104]如這里所使用的術(shù)語計算機可讀介質(zhì)還包括通信介質(zhì)。通信介質(zhì)由諸如載波或其他傳輸機制等已調(diào)制數(shù)據(jù)信號中的計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)來體現(xiàn),并包括任何信息傳遞介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號”可以描述以對該信號中的信息進行編碼的方式設(shè)定或者改變其一個或多個特征的信號。作為示例而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接線連接等有線介質(zhì),以及諸如聲學、射頻(RF)、紅外線和其他無線介質(zhì)等無線介質(zhì)。
[0105]系統(tǒng)700還可包含允許該設(shè)備與其它設(shè)備通信的通信連接716。此外,系統(tǒng)700還可具有輸入設(shè)備714,諸如鍵盤、鼠標、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等等。還可包括輸出設(shè)備712,諸如顯示器、揚聲器、打印機等等。所有這些設(shè)備在本領(lǐng)域中是公知的并且不必在此詳細討論。上述設(shè)備是示例且可以使用其他設(shè)備。
[0106]以上參考附圖描述了本發(fā)明的各實施例,可以理解,可以對本發(fā)明做出本領(lǐng)域技術(shù)人員易于想到且被包含在所公開并如所附權(quán)利要求書所定義的本發(fā)明的精神和范圍內(nèi)的眾多修改。盡管出于本發(fā)明的目的描述了各實施方式,但可以做出落入本發(fā)明的范圍內(nèi)的各種改變和修改。
[0107]同樣地,雖然本發(fā)明使用了對結(jié)構(gòu)特征、方法動作和含有這些動作的計算機可讀介質(zhì)專用的語言,但是應(yīng)該理解,在所附權(quán)利要求書中定義的本發(fā)明不必限于此處描述的具體結(jié)構(gòu)、動作、特征或介質(zhì)。例如,盡管在各實施例的各描述方面中使用了特定名稱或命名約定(諸如,AP1、例程等的名稱),但可以對這樣的名稱和/或命名約定作出多種修改,這些修改被涵蓋在本公開的精神和范圍內(nèi)。上述特定結(jié)構(gòu)、特征、動作、名稱、命名約定和/或介質(zhì)是作為實現(xiàn)權(quán)利要求的示例形式而公開的。各實施例的各方面允許多個客戶機/應(yīng)用服務(wù)器、多個文件服務(wù)器、多個網(wǎng)絡(luò)、多個連接對等體等?;蛘?,在其他實施例中,使用具有單個服務(wù)器和單個網(wǎng)絡(luò)的單個客戶機計算機。所屬領(lǐng)域技術(shù)人員將認識到在本公開的范圍和精神內(nèi)的其他實施例或改進。因此,這些具體結(jié)構(gòu)、動作、或介質(zhì)是作為實現(xiàn)所要求保護的本發(fā)明的示例性實施例而公開的。本發(fā)明由所附權(quán)利要求書進行定義。
【權(quán)利要求】
1.一種存儲計算機可執(zhí)行指令的計算機可讀存儲介質(zhì),所述計算機可執(zhí)行指令在被處理器執(zhí)行時執(zhí)行一種用于通過遠程直接存儲器訪問(RDMA)使用數(shù)據(jù)操作來交換數(shù)據(jù)的方法,所述方法包括:建立與服務(wù)器的連接;與所述服務(wù)器協(xié)商連接,其中所述協(xié)商建立所述服務(wù)器將在該連接中接收的最大字節(jié)數(shù);確定用于將與所述連接相關(guān)聯(lián)的數(shù)據(jù)發(fā)送給所述服務(wù)器的數(shù)據(jù)包的數(shù)目;確定是否要使用對所述數(shù)據(jù)的分段;如果不要使用對所述數(shù)據(jù)的分段,則將第一協(xié)議包與所述數(shù)據(jù)一起發(fā)送給所述服務(wù)器;如果要使用對所述數(shù)據(jù)的分段,則初始化傳送緩沖區(qū)內(nèi)的前多個字節(jié),以作為所述第一協(xié)議包中的數(shù)據(jù)來發(fā)送;設(shè)置所述第一協(xié)議包中的數(shù)據(jù)長度字段和剩余數(shù)據(jù)長度字段;將所述第一協(xié)議包發(fā)送給所述服務(wù)器;對于至少一個第二協(xié)議包,要重復(fù)的指令包括:初始化所述傳送緩沖區(qū)內(nèi)的多個字節(jié),以作為所述至少一個第二協(xié)議包中的數(shù)據(jù)來發(fā)送;`設(shè)置所述至少一個第二協(xié)議包中的剩余數(shù)據(jù)長度字段;以及將所述至少一個第二協(xié)議包發(fā)送給所述服務(wù)器。
2.如權(quán)利要求1所述的計算機可讀存儲介質(zhì),其特征在于,確定是否要使用分段包括確定用于發(fā)送所述數(shù)據(jù)的數(shù)據(jù)包的數(shù)目是否大于1。
3.如權(quán)利要求2所述的計算機可讀存儲介質(zhì),其特征在于,確定用于將與所述連接相關(guān)聯(lián)的數(shù)據(jù)發(fā)送給所述服務(wù)器的數(shù)據(jù)包的數(shù)目包括確定所述服務(wù)器將在所述連接中接收的最大字節(jié)數(shù)是否小于要被發(fā)送的數(shù)據(jù)的字節(jié)數(shù)。
4.如權(quán)利要求1所述的計算機可讀存儲介質(zhì),其特征在于,與所述服務(wù)器協(xié)商連接包括:預(yù)先發(fā)布接收區(qū);構(gòu)建協(xié)議協(xié)商請求;將所述協(xié)議協(xié)商請求發(fā)送給所述服務(wù)器;設(shè)置協(xié)商期滿計時器;確定對所述協(xié)議協(xié)商請求的響應(yīng)是否在所述協(xié)商期滿計時器期滿之前被接收;如果對所述協(xié)議協(xié)商請求的響應(yīng)沒有在所述協(xié)商期滿計時器期滿之前被接收,則重新發(fā)送所述協(xié)議協(xié)商響應(yīng);如果對所述協(xié)議協(xié)商請求的響應(yīng)在所述協(xié)商期滿計時器期滿之前被接收,則接收協(xié)議協(xié)商響應(yīng);確認所述協(xié)議協(xié)商響應(yīng);以及處理所述協(xié)議協(xié)商響應(yīng),其中所述協(xié)議協(xié)商響應(yīng)將至少一個積分提供給所述發(fā)送方來發(fā)送所述協(xié)議包。
5.如權(quán)利要求4所述的計算機可讀存儲介質(zhì),其特征在于,還包括:如果存在足夠積分來發(fā)送所述至少一個第二協(xié)議包,則發(fā)送所述至少一個第二協(xié)議包;如果不存在足夠的積分來發(fā)送所述至少一個第二協(xié)議包,則向所述服務(wù)器請求至少又一個積分;確定是否接收到足夠的積分;如果沒有接收到足夠的積分,則終止所述連接;以及如果接收到足夠的積分,則發(fā)送所述至少一個第二協(xié)議包。
6.一種被配置成通過遠程直接存儲器訪問(RDMA)使用服務(wù)器消息塊(SMB/SMB2)來交換數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括:RDMA網(wǎng)絡(luò)接口卡(RNIC),所述RDMA網(wǎng)絡(luò)接口卡用于通過RDMA消息來傳送數(shù)據(jù);存儲器,所述存儲器用于存儲處理器能執(zhí)行的計算機程序指令;以及與所述RNIC和所述存儲器通信的處理器,所述處理器用于執(zhí)行內(nèi)核,所述內(nèi)核包括:第一協(xié)議客戶機,所述第一協(xié)議客戶機用于:在一個或多個RDMA消息中傳達SMB數(shù)據(jù);以及創(chuàng)建接收緩沖區(qū)以交換積分,其中所述積分確定發(fā)送方能向接收方發(fā)送的消息的數(shù)目。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,還包括與所述第一協(xié)議客戶機通信的RDMA接口,所述RDMA接口用于打開通過所述RNIC的RDMA連接。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,還包括:第二協(xié)議客戶機,所述第二協(xié)議客戶機用于:創(chuàng)建SMB2讀/寫請求以指示服務(wù)器執(zhí)行RDMA直接數(shù)據(jù)傳送;將所述SMB2讀/寫請求發(fā)送給所述第一協(xié)議客戶機;以及其中,所述第一協(xié)議客戶機還用于:將所述SMB2讀/寫請求封裝在第一協(xié)議數(shù)據(jù)傳送包中;以及將所述第一協(xié)議數(shù)據(jù)傳送包發(fā)送給所述服務(wù)器。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述SMB2讀/寫請求包括標識RDMA信道描述符信息的字段,并且其中所述第一協(xié)議是所述SMB直通協(xié)議。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述RDMA信道描述符信息包括控制信息,并且其中所述服務(wù)器確定所述控制信息,并執(zhí)行未經(jīng)編碼的應(yīng)用數(shù)據(jù)到由所述控制信息所標識出的存儲器地址的RDMA寫,或執(zhí)行未經(jīng)編碼的應(yīng)用數(shù)據(jù)從由所述控制信息所標識出的存儲器地址的RDMA讀。
11.一種用于建立通過遠程直接存儲器訪問(RDMA)使用服務(wù)器消息塊(SMB/SMB2)來交換數(shù)據(jù)的連接的計算機實現(xiàn)的方法,所述方法包括:接收第一 SMB直通數(shù)據(jù)傳送包,其中所述第一 SMB直通數(shù)據(jù)傳送包包括剩余數(shù)據(jù)長度字段和SMB2數(shù)據(jù);確定所述剩余數(shù)據(jù)長度字段是否為非零;如果所述剩余數(shù)據(jù)長度字段為零,則處理所述第一 SMB直通數(shù)據(jù)傳送包中的所述SMB2數(shù)據(jù);如果所述剩余數(shù)據(jù)長度字段為非零,則將重新組裝緩沖區(qū)分配給所述連接;將所述SMB2數(shù)據(jù)從所述第一 SMB直通數(shù)據(jù)傳送包復(fù)制到所述重新組裝緩沖區(qū)中;接收至少一個其他SMB直通數(shù)據(jù)傳送包;以及將來自所述至少一個其他SMB直通數(shù)據(jù)傳送包的SMB2數(shù)據(jù)復(fù)制到所述重新組裝緩沖區(qū)中。
12.如權(quán)利要求11所述的方法,其特征在于,所述SMB直通數(shù)據(jù)傳送包包括由以下組成的組中的一個或多個字段:請求的積分、授予的積分、數(shù)據(jù)偏移和數(shù)據(jù)長度。
13.如權(quán)利要求12所述的方法,其特征在于,所述授予的積分字段描繪多少積分被提供給所述SMB直通數(shù)據(jù)傳送包的發(fā)送方。
14.如權(quán)利要求11所述的方法,其特征在于,積分是所述發(fā)送方能發(fā)送的RDMA消息的數(shù)目的值。
15.如權(quán)利要求11所述的方法,其特征在于,還包括:確定所述至少一個其他SMB直通數(shù)據(jù)傳送包是否是最后一個數(shù)據(jù)包;如果所述至少一個其他SMB直通數(shù)據(jù)傳送包是最后一個數(shù)據(jù)包,則處理所述重新組裝緩沖區(qū)中的SMB2數(shù)據(jù);如果所述至少一個其他 SMB直通數(shù)據(jù)傳送包不是最后一個數(shù)據(jù)包,則重復(fù)接收所述至少一個其他SMB直通數(shù)據(jù)傳送包,并將來自所述至少一個其他SMB直通數(shù)據(jù)傳送包的SMB2數(shù)據(jù)復(fù)制到所述重新組裝緩沖區(qū)中。
【文檔編號】H04L29/06GK103636181SQ201280032558
【公開日】2014年3月12日 申請日期:2012年6月6日 優(yōu)先權(quán)日:2011年6月29日
【發(fā)明者】T·M·塔爾佩伊, G·R·卡拉莫, D·M·克魯斯 申請人:微軟公司