新四季網

通過遠程直接存儲器訪問的任意大小的傳輸操作的製作方法

2023-06-11 22:01:21 2


背景

諸如伺服器消息塊(SMB)或其版本(例如,SMB2)之類的文件訪問協議可以用作主要用於在網絡上的各節點之間提供對文件以及雜項通信的共享訪問的應用層網絡協議。在歷史上,SMB或SMB2在傳輸控制協議(TCP)傳輸和傳統的網絡基礎結構之上操作。儘管SMB2作為針對通用遠程文件訪問的協議已非常成功,但SMB2尚未廣泛適用於要求高吞吐量和低等待時間文件輸入/輸出的遠程文件訪問。

遠程直接存儲器訪問(RDMA)是從一個計算機的存儲器進入另一計算機的存儲器而不涉及該另一計算機的作業系統的直接存儲器訪問。該直接傳送準許通過網絡的高吞吐量、低等待時間數據傳輸,這在性能關鍵的部署中尤其有用。在應用執行RDMA讀或寫請求時,使用有RDMA能力的網絡適配器將應用數據從源存儲器緩衝區直接遞送到目的地存儲器緩衝區,在該傳輸中這些有RDMA能力的網絡適配器不涉及中央存儲單元(CPU)(也被簡稱為處理器)或作業系統。這些RDMA傳輸會減少等待時間並允許快速消息傳輸。不幸地是,RDMA的這些好處尚未被使用SMB2的系統利用,因為SMB2尚未用RDMA來操作。

雖然本

背景技術:
中著眼於特定的問題,但本發明決不旨在限於解決那些特定問題。

概述

各實施例一般涉及將諸如SMB2操作(或,例如SMB操作的其他版本或文件訪問協議操作)之類的數據操作實現在RDMA傳輸之上的協議和處理。在各實施例中,該協議定義指定用於協商RDMA連接以及用於例如使用經協商的連接來傳送SMB2數據的新消息。在一實施例中,用於將SMB2操作實現在RDMA傳輸之上的協議是SMB直通(SMB Direct)協議。然而,其他實施例提供其他SMB協議、SMB協議版本或其他數據操作協議,而不偏離本公開的精神和範圍。根據一實施例,新的SMB直通消息可包括新的頭部信息,該新的頭部信息可包括但不限於,以下各項中的一個或多個:CreditsRequested(請求的積分)、CreditsGranted(授予的積分)、Flag(標誌)、Reserved(保留的)、RemainingDataLength(剩餘數據長度)、DataOffset(數據偏移)、和DataLength(數據長度)。由於RDMA傳輸支持接收僅由接收方固定的大小的消息,而SMB2消息的大小可以在從大約一百字節到超過兆字節的非常大消息的非常大的範圍內改變,因此頭部信息被使用。SMB2協議被修改以識別RDMA能力的存在,而SMB直通協議將新的層添加到聯網棧,以允許多個單獨的RDMA消息被邏輯地串接成單個請求或響應以適應RDMA消息的固定大小限制以及SMB2消息收發所固有的不確定大小要求兩者。對SMB2協議的改變以及對SMB直通協議的添加允許數據在各對等體的存儲器之間的直接傳送。在各實施例中,SMB2伺服器可使用RDMA來進行從客戶機的存儲器讀取或向客戶機的存儲器寫入,以執行對數據的直接放置。伺服器執行到客戶機的RDMA寫以完成SMB2讀,並執行RDMA讀以完成SMB2寫。儘管SMB直通協議允許SMB/SMB2數據在對等體的存儲器之間的直接傳送,但根據各實施例,SMB直通協議可適合於其他協議。根據各實施例,SMB直通協議的雙向、對等特性使其本身適於多種類型的數據傳送操作。

RDMA傳輸還再次用僅由接收方固定的值來限制任何時刻可被處理的消息的數目。為了符合RDMA的這個要求,各實施例為各對等體提供在指定發送方可向接收方發送的RDMA消息的數目的協議頭部中交換或分配每一相互對等體所請求的並向每一相互對等體授予的「積分」(其為數值)。積分是動態的,並由每一對等體獨立地管理。用於管理積分並使足夠的積分可用於執行SMB2交換的規則由在此公開的各實施例中的協議來定義。

在各實施例中,提供獨立、雙向的積分可準許每一個對等體發送請求和響應,而無需接收對等體的顯式協商或先驗知識和同意。與RDMA相關聯的順序發送可準許交換出乎意料的大的消息,而不會引起RDMA處理中的錯誤,也不會在這種情況發生時採取較不高效的協商傳送。

根據各實施例,附加消息可用於協商協議版本和其他參數。協商請求消息可包括例如以下欄位:CreditsRequested(請求的積分)、Reserved(保留的)、MinVersion(最小版本)、MaxVersion(最大版本)、OutboundSendSize(出站發送大小)、MaxInboundSendSize(最大入站發送大小)等。相應地,響應於該請求消息而發送的協商響應消息可包括例如CreditsRequested(請求的積分)、CreditsGranted(授予的積分)、Version(版本)、Reserved(保留的)、Status(狀態)、OutboundSendSize(出站發送大小)、InboundSendSize(入站發送大小)等欄位。這些參數支持對能力的協商、對資源的端到端優化、和與該協議的未來增強版本的兼容性。

提供本概述是為了以簡化的形式介紹將在以下具體實施例中進一步描述的一些概念。本概述並不旨在標識所要求保護的主題的關鍵特徵或必要特徵,也決不旨在用於限制所要求保護的主題的範圍。

附圖簡述

可以參考附圖來更容易地描述本發明的各實施例,附圖中相同的數字指示相同的項。

圖1示出了根據本公開的各實施例的用於通過RDMA來交換SMB2消息的環境或系統的示例邏輯表示。

圖2A描繪了根據本公開的各實施例的用於通過RDMA來發送SMB2消息的客戶機系統的示例邏輯表示。

圖2B示出了根據本公開的各實施例的用於通過RDMA來接收SMB2消息的伺服器系統的邏輯表示。

圖3A-3E示出了根據本公開的各實施例的在通過RDMA使用SMB2消息交換數據時發送或接收的消息的邏輯表示。

圖4A-4C描繪了解說根據本公開的各實施例的用於通過RDMA使用SMB2協商通信的過程的操作特性的流程圖。

圖5A-5D示出了解說根據本公開的各實施例的用於通過RDMA使用SMB2交換數據的過程的操作特性的流程圖。

圖6解說了描繪根據本公開的各實施例的用於使用RDMA直接數據傳送來交換數據的過程的操作特性的流程圖。

圖7描繪其上可以實現本公開的各實施例的示例計算系統。

詳細描述

本發明現將參考其中示出了各具體實施例的附圖來更完整地描述各示例實施例。然而,其它方面能以許多不同的形式來實現,並且在本發明中包括具體的實施例不應被解釋為將這些方面限於在此所述的各實施例。相反,包括附圖中描繪的各實施例是為了提供全面和完整且將預期的範圍完全地傳達給本領域技術人員的公開。虛線可用於示出可選組件或操作。

各實施例一般涉及用於通過RDMA連接來交換SMB2數據的系統、方法和協議。RDMA提供傳輸數據方面的優點。例如,RDMA作出從一個存儲器到另一設備或系統的存儲器的傳送。這些傳送並不涉及處理器,並且因此減少了傳輸數據時所涉及的開銷。此外,由於傳輸管理中不涉及處理器,因此RDMA用更少的時鐘周期來傳送數據。因此,RDMA提供低等待時間、高帶寬的連接。

一般來說,SMB的版本(諸如,SMB2)是用於在網絡上的各節點之間提供對文件和雜項通信的共享訪問的應用層網絡協議。SMB和SMB2因此是文件訪問操作協議的示例。SMB2允許在於客戶機和伺服器之間交換消息時傳送數據。此處的某些實施例的描述涉及SMB2。然而,在其他實施例中,SMB的任何版本或其他文件訪問操作協議可被使用,而不偏離本公開的精神和範圍。

一般由於操作中的差異,當前SMB2(或SMB)當前不通過RDMA來操作,而反倒使用TCP來傳輸數據。本文的各實施例創建了用於通過有RDMA能力的網絡協議來交換SMB2消息的系統和協議。首先,客戶機和/或伺服器(其可被統稱為對等體)使用SMB2的分量來發現彼此的能力或才能。在一實施例中,由客戶機發送詢問有關伺服器的信息的請求。響應伺服器可以用與以下有關的信息來回答:該伺服器所具有的網絡接口卡(NIC)的數目、這些NIC的網際網路協議(IP)地址、這些NIC的速度,這些NIC是否有RDMA能力和/或可能IP位址。在各實施例中,詢問客戶機可使用該信息來確定如何與該伺服器對接。

根據本公開的各實施例,如果伺服器有RDMA能力,則有RDMA能力的客戶機可隨後與該伺服器協商RDMA連接。新接口(在各實施例中稱為RDMA接口)是有RDMA能力的網絡適配器和其他系統組件(包括SMB客戶機)之間的接口。此外,新模塊被添加到被稱為SMB直通客戶機/伺服器的棧。首先,SMB直通客戶機可能響應於能力請求而通過保留存儲器緩衝區的至少一部分來預先發布用於從其他對等體接收消息的接收。SMB直通客戶機可隨後發送SMB直通協商請求包。SMB直通協商請求啟動在各對等體之間建立SMB直通連接的過程。根據各實施例,SMB直通協商請求包括定義RDMA連接將如何起作用的一個或多個欄位。

在各實施例中,SMB直通協商請求的部分是對「積分」的請求。各積分是對接收對等體的存儲器緩衝區中的空間的分配。由於RDMA直接從一個存儲器傳送到另一存儲器,接收對等體在存儲器緩衝區中保留髮送對等體可放置所傳輸的數據的空間。存儲器緩衝區被以塊(例如,1K字節塊)為單位進行分配。在各實施例中,分配是固定的,因為該塊大小在SMB直通連接已被建立後就不會改變。在其他實施例中,分配不是固定的,其中塊大小可改變。在分配是固定的情況下,到存儲器緩衝區的任何傳輸都不可超過塊大小。為了傳送具有大於塊大小的大小的SMB2數據,發送方發送被存儲在存儲器緩衝區的兩個或更多分配中的兩個或更多數據包。為了保留存儲器分配,發送對等體請求積分,其中所請求的積分的數目可以通過本地策略來管控,並且不一定受到消息的組合的影響。每一積分表示存儲器緩衝區的一個塊,並因此表示請求方可發送給其他對等體的消息。

在本公開的各實施例中,伺服器可以將響應(例如,SMB直通協商響應)發送給請求方。這個SMB直通協商響應還包括定義RDMA連接的各個欄位。響應於該請求,SMB直通協商響應將多個積分提供給客戶機。此外,SMB直通協商響應還可要求在客戶機的存儲器緩衝區中保留分配的積分。在各實施例中,SMB直通協商請求和SMB直通協商響應的交換建立RDMA連接。此後,可通過該連接來交換SMB2數據。

根據各實施例,通過RDMA連接來交換SMB2數據包括傳送至少一個數據包。如果正被發送的SMB2數據小於塊大小,則可以僅發送被稱為SMB直通數據傳送包的一個包。然而,根據一實施例,如果要被發送的SMB2數據大於塊大小,則兩個或更多個SMB直通數據傳送包可被發送。RDMA允許順序接收各數據包。因此,通信中接收到的第二數據包將被直接放置在第一接收到的數據包之後。為了利用RDMA的這個優點,SMB直通數據傳送包包括通告要被發送的SMB2數據的總數以及在本數據包之後還留下多少要被發送的數據的欄位。通過這種方式,SMB直通對等體可以確定SMB傳送何時完成,並且SMB2數據可被重新組裝。因此,SMB直通協議在各實施例中提供以低等待時間和低開銷進行SMB2數據的快速傳送,同時克服與通過RDMA傳送SMB2數據相關聯的問題。

圖1中示出了根據此處所公開的各實施例的用於通過RDMA連接交換SMB2數據的示例邏輯環境或系統100。連接對等體(也被稱為客戶機102和伺服器106)102和106可通過網絡104跨RDMA NIC(RNIC)108a和108b之間的RDMA連接來移動SMB2數據。連接對等體可以是例如參考圖7所描述的任何計算機系統。連接對等體在圖1中被示為客戶機/應用伺服器102和文件伺服器106。然而,這些對等體僅作為示例來提供。在這些實施例中,任何類型的客戶機或伺服器都可用作連接對等體。因此,RDMA連接可以例如在多個客戶機、多個伺服器、伺服器場、伺服器群集、消息伺服器之間或在客戶機和伺服器之間。客戶機/應用伺服器102和文件伺服器106僅出於理解本文所公開的各實施例的教示的目的而被作為示例來提供。

當通過網絡104移動SMB2數據時,該網絡104可以如例如參考圖7所描述的。網絡104(雖然被示為獨立的單個網絡)可以是本領域的普通技術人員常規上理解的任何類型的網絡。根據一實施例,網絡可以是全局網絡(例如,網際網路或全球資訊網,即縮寫為「Web」)。它也可以是區域網(例如,內聯網)或廣域網。根據各個實施例,通過網絡104的通信根據一個或多個基於標準數據包的格式(例如,H.323、IP、乙太網、和/或ATM)來進行。

此外,在各實施例中,RNIC 108(a和/或b)可以是支持RDMA的任何網絡接口卡、網絡適配器和/或網絡接口控制器。存在提供RNIC的若干廠商。例如,iWARP或InfiniBand是支持RDMA的網絡協議。RNIC可支持RDMA,其允許數據從存儲器110a到存儲器110b以及相反方向的直接傳送。這些數據傳送不需要或不包括處理器112a或112b的監督。因此,根據本公開的各實施例,RDMA傳送是高帶寬、低等待時間和低開銷的。處理器112和存儲器110可以如例如參考圖7所描述的。

儘管圖1示出了用於通過RDMA的SMB2數據交換的通用環境,圖2A描繪了根據此處所公開的各實施例的用於通過RDMA連接來發送或接收SMB2數據的示例對等體102。在這個示例中,對等體102是客戶機和/或應用伺服器。根據本公開的各實施例,客戶機102的各個組件可以包括軟體和/或硬體。然而,為了解說的目的,此後的各組件將被描述為軟體模塊。在各實施例中,客戶機102包括但不限於以下中的一個或多個:內核202a、至少一個用戶應用220、存儲器緩衝區222a、一個或多個計時器224a和/或一個或多個設置226a。在各實施例中,「內核」是在其中管理存儲器、文件和外圍設備,觸發和啟動應用以及分配系統資源的作業系統的核心。

在各實施例中,內核202a可包括但不限於以下中的一個或多個:文件應用編程接口(API)或等價物204、SMB2模塊(被示為SMB2客戶機208)、SMB直通模塊(被示為SMB直通客戶機214a)和RDMA接口216a。SMB直通模塊和RDMA接口216a被引入來執行在此描述的各方法和過程。這些模塊、組件和/或接口將被描述如下。

在各實施例中,文件API 204可以是內核202a和一個或多個用戶應用220之間的接口。在一示例實施例中,文件API 204是微軟作業系統中可用的API集合。幾乎所有的程序與該API交互以執行各種功能。文件API 204的各實施例提供對系統可用的各資源(諸如,舉例來說文件系統、設備和/或錯誤處理)的訪問。根據各實施例,文件API 204可提供對內核以及其他功能的訪問。在各實施例中,文件API 204還允許系統對各遠程文件執行使用各底層的文件訪問功能的各動作,這些底層的文件訪問功能進而使用各種聯網能力並允許遠程訪問。

在各實施例中,SMB2客戶機208管理在各應用和SMB2伺服器212b所提供的各接口之間的通信。由於各設備可以以可能與作業系統不匹配的速度操作,因此作業系統和設備驅動器之間的通信主要通過I/O請求包(IRP)來完成。這些數據包類似於例如網絡數據包或消息數據包。將這些數據包從作業系統傳遞到特定驅動器,並從一個驅動器傳遞到另一驅動器。在各實施例中,SMB2客戶機208可以將各I/O請求重定向到各網絡資源,並組成各SMB消息以執行通過網絡的通信。SMB2客戶機208通過RDMA將SMB數據包傳送到SMB直通客戶機214a以交換SMB數據包或數據。類似地,根據一實施例,SMB2伺服器212b也可使用各IRP來發送來自SMB2客戶機208對伺服器的存儲的文件請求。

在各實施例中,SMB直通模塊214是從內核202中的SMB直通網絡提供商接口(NPI)創建的實例。SMB直通模塊214將API(稱為SMB直通NPI)展示給SMB2客戶機和SMB2伺服器模塊。SMB2客戶機/伺服器模塊使用這個SMB直通NPI來作出通過SMB直通連接發送或接收數據的請求。根據各實施例,SMB直通模塊214實現SMB直通協議,並位於SMB2客戶機/伺服器模塊和底層的RDMA接口之間。SMB直通NPI允許SMB直通協議。SMB直通NPI可創建和破壞SMB直通連接,通過SMB直通連接發送和接收數據、註冊/註銷存儲器、通過SMB直通連接執行從對等體的RDMA讀數據操作/到對等體的RDMA寫數據操作、在SMB直通連接被對等體斷開連接時接收通知、跨SMB直通連接編組/取消編組供傳輸的SMB2數據包及其他操作。為了完成這些任務,創建可管理髮送按照RDMA協議存儲的SMB2數據以及從存儲器緩衝區222檢索按照RDMA協議存儲的SMB2數據的SMB直通模塊214。因此,SMB直通模塊214將數據從僅僅SMB2數據轉換成RDMA,並從RDMA轉換回SMB2。在本公開的各實施例中,SMB直通模塊214與另一新模塊通信(即,RDMA接口216)以執行這些操作。

根據各實施例,SMB直通模塊214執行若干函數。SMB DirectReceiveEvent(SMB直通接收事件)回調函數向SMB2客戶機208或SMB2伺服器212b通知已在SMB直通端點上接收了消息。SMB DirectDisconnectEvent(SMB直通斷開連接事件)事件回調函數向SMB2客戶機208或SMB2伺服器212b通知端點上的連接已被斷開連接。SMB DirectAcceptEvent(SMB直通接受事件)事件回調函數向SMB2伺服器212b通知監聽端點上的傳入連接已被接受。SMB DirectListen(SMB直通監聽)函數創建監聽給定的本地地址上的傳入連接的監聽器端點。SMB DirectCloseEndpoint(SMB直通關閉端點)函數關閉端點並釋放任何關聯資源。SMB DirectConnect(SMB直通連接)函數將端點連接到遠程SMB直通傳輸地址。SMB DirectDisconnect(SMB直通斷開連接)函數使端點與遠程SMB直通傳輸地址斷開連接。SMB DirectSend(SMB直通發送)函數將數據緩衝區發送到遠程SMB直通對等體。SMB DirectRegisterMemory(SMB直通註冊存儲器)函數允許SMB2客戶機208註冊供在RDMA讀/寫操作中使用的存儲器緩衝區。SMB DirectUnregisterMemory(SMB直通註銷存儲器)函數註銷先前經由SMB DirectRegisterMemory API註冊的存儲器緩衝區。SMB DirectRdmaRead(SMB直通RDMA讀)函數使得RDMA直接從與該端點連接的遠程對等體的存儲器中讀數據。SMB DierctRdmaRead(SMB直通RDMA寫)函數使得RDMA將數據直接寫入與該端點連接的遠程對等體的存儲器中。這些函數及其操作將結合圖6來解釋。

在一實施例中,RDMA接口216是與各RNIC的廠商專用的RDMA功能對接的新接口。RDMA接口216可給予對RDMA設備的各功能的訪問。RDMA設備的各功能可包括監聽埠以接收SMB直通數據包,並將SMB2數據提供給SMB直通模塊214。在一實施例中,RDMA設備可包括用於管理通過RDMA連接的通信的內核模式RDMA模塊。此外,RDMA設備可包括RDMA訪問層和擴展以用於對正發送RDMA消息的埠進行訪問和監聽。根據各實施例,代理驅動器可以與RNIC的硬體驅動器對接。

在各實施例中,用戶應用220可以是處理器為用戶或其他軟體執行的任何軟體。用戶應用220的示例包括web瀏覽器、電子郵件等。這些用戶應用220與內核202a對接以發送數據並特別地從遠程存儲位置(諸如文件伺服器106)接收數據。

在一實施例中,存儲器緩衝區222可以是如參考圖7描述的任何類型的存儲器。存儲器緩衝區222可被用來接收SMB直通消息和/或這些消息中承載的SMB2數據,並可被用來在傳輸傳出SMB直通消息之前準備(stage)那些消息。因此,根據各實施例,可將存儲器緩衝區222劃分成如此後描述的各塊。

在各實施例中,計時器224是可從預定時間倒計時到零的時鐘集合。因此,計時器224表示所存儲的數據以及由處理器執行的時鐘功能。計時器224的期滿可以觸發RDMA接口中的一個或多個功能,或者伴隨SMB直通模塊214的一個或多個功能。在其他實施例中,計時器可以從零計數到一閾值,或執行某種其他類型的計數。這些計時器中的一些可以包括SendCreditGrantTimer(發送積分授予計時器),SendCreditGrantTimer是在SendCreditCount(發送積分計數)達到零時啟動並在計時器部分224中操作的計時器。遠程連接的對等體必須直到這個計時器期滿才能授予附加的發送積分。SendCreditGrantTimer(發送積分授予計時器)還可以調節客戶機/伺服器等待該對等體向其授予附加的發送積分的時間量。根據各實施例,當客戶機/伺服器發現由於SendCreditsCount(發送積分計數)的值為零而無法向對等體發送數據包時,則客戶機/伺服器設置將在預定秒數內期滿的計時器。如果計時器在發送積分變得可用之前期滿,則客戶機/伺服器將該連接斷開連接。在一實施例中,空閒連接計時器調節客戶機/伺服器等待對等體發送數據包的時間量。如果在過去的預定秒數內沒有從對等體接收到數據包,則客戶機/伺服器向該對等體發送保活請求,並設置KeepAliveResponse(保活響應)計時器。根據本公開的各實施例,如果在KeepAliveResponse計時器期滿之前沒有接收到響應,則該連接被斷開連接。

根據本公開的各實施例,還可以為通過SMB直通連接的任何SMB直通數據傳送設置KEEPALIVE_REQUESTED(已請求保活)標誌。在一實施例中,KEEPALIVE_REQUESTED標誌是對接收對等體儘快對發送方作出響應,使得發送方知道該接收方仍被連接並且是可作出響應的請求。一個或多個系統可嘗試在沒有消息交換的情況下使該連接過期。因此,具有KEEPALIVE_REQUESTED標誌的消息可以維護該連接。在替換實施例中,設有KEEPALIVE_REQUESTED標誌的消息可被用於請求或接收積分。

在一實施例中,設置226存儲對與通過RDMA交換SMB消息相關的數據進行存儲和檢索。設置226可被存儲在如參考圖7所描述的任何類型的存儲器或存儲設備中。作為一示例,這些設置可包括被設置之後的多少秒內積分補充計時器期滿、對等體願意從另一對等體接收的最大大小的SMB直通數據傳送包是什麼、或者對等體將授予另一對等體的發送積分的數目的限制是什麼等。

在各實施例中,SMB_DIRECT_ENDPOINT(SMB_直通_端點)結構可以是表示SMB直通端點的不透明結構。SMB直通端點在功能上與例如網絡套接字類似。根據一實施例,SMB2客戶機208或SMB2伺服器212b可能不直接訪問該結構的各成員,而是通過SMB直通模塊214來訪問該結構的各成員。SMB_DIRECT_ENDPOINT結構可包括若干操作的數據。MwReleaseList(存儲器窗口釋放列表)是可被釋放回到該遠程連接的對等體的存儲器窗口的列表。這些存儲器窗口與已完成的各RDMA讀/寫操作相關聯。ReceiveCreditCount(接收積分計數)是要被授予遠程連接的對等體的接收積分的數目。該端點的主機可具有至少這個數目的在該端點上待處理的接收區。SendCreditCount(發送積分計數)是該端點的主機當前具有的發送積分的數目。遠程連接的對等體可具有至少這個數目的在其端點上待處理的接收。PendingRdmaReadCount(待處理RDMA讀計數)是這個端點上已被發起但尚未完成的RDMA讀操作的數目。PendingRdmaReadLimit(待處理RDMA讀限制)是該端點上可同時待處理的RDMA讀操作的最大數目。在各實施例中,DeferredInitiatorOpQueue(被推遲的發起方操作隊列)是因用於發出各發起方操作的端點資源當前不可用而被推遲的這些發起方操作的隊列。NdKQp(NDK隊列對)是表示接收以及發起方請求隊列的隊列對對象。NdkReceiveCq(NDK接收完成隊列)是NDK接收完成隊列。將各接收請求完成排隊在該隊列中。NdkReceiveQueueCapacity(NDK接收隊列容量)是該端點上可同時待處理的各接收請求的最大數目。NdkInitiatorCq(NDK發起方完成隊列)是NDK發起方完成隊列。例如,發送、綁定、快速註冊、讀、寫和無效請求完成被排列在這個隊列中。在各實施例中,NdkInitiatorQueueCapacity(NDK發起方隊列容量)是該端點上可同時待處理的發送、綁定、快速註冊、讀、寫和無效請求的最大數目。

圖2B描繪了根據此處所公開的各實施例的用於通過RDMA連接來發送或接收SMB2數據的示例對等體106。在這個示例中,對等體106是文件伺服器。文件伺服器106的各個組件可包括軟體和/或硬體。儘管各實施例將這些組件描述為軟體模塊,其他實施例提供其他類型的模塊。在各實施例中,文件伺服器106包括但不限於以下中的一個或多個:內核202b、NTFS 232、存儲器緩衝區222b、一個或多個計時器224b和/或一個或多個設置226b。這些功能中的一些與圖2A中描述的那些功能相同或相似。

根據各實施例,內核202b(和/或如參考圖2A所描述的)可包括但不限於以下中的一個或多個:輸入/輸出(I/O)管理器206b、SMB2伺服器212b、SMB直通伺服器214b和RDMA接口216b。這些功能中的一些與圖2A中描述的那些功能相同或相似。

在各實施例中,SMB2伺服器212b是為各伺服器實現伺服器側的SMB2協議的驅動器。其他實施例提供其他類型的伺服器。SMB2伺服器212b可啟動並使用SMB來交換數據,並供應該數據或從I/O管理器206b接收該數據。在各實施例中,SMB2伺服器212b通過網絡連接發送或接收SMB2數據。SMB2伺服器212b用於通過供伺服器的網絡來通信。因此,根據各實施例,SMB2伺服器212b提供SMB2數據以供傳輸,或通過網絡傳輸接收SMB2數據。

在各實施例中,新技術文件系統(NTFS)232可以是標準文件系統。NTFS包括支持元數據和使用先進的數據結構來改善性能、可靠性和盤空間利用,以及諸如安全性訪問控制列表(ACL)和文件系統通信等附加擴展。NTFS用於組織並存儲一個或多個客戶機的文件數據。可通過與客戶機的通信(諸如通過RDMA的SMB2數據傳送)來將這些文件數據提供給客戶機。

根據各實施例,SMB直通創建RDMA連接以交換SMB2數據。該協議通過協商過程創建RDMA連接。在對等體102和106協商了RDMA連接後,對等體102或106中的任一方可通過RDMA連接發送SMB2數據。

根據各實施例,第一SMB直通協商請求包300在圖3A中被示出。相應地,在各實施例中,相關聯的SMB直通協商響應請求包336在圖3B中被示出。此外,根據各實施例,用於傳送數據的SMB直通數據傳送包338在圖3C中被示出。每一消息或數據包可以例如被創建、傳送、存儲和/或接收。在各實施例中,數據包或消息可各自包括存儲不同數據的部分或欄位。

轉至圖3A,根據本公開的各實施例的SMB直通協商請求包300被示出。SMB直通協商請求包300可包括但不限於以下欄位中的一個或多個,例如:MinVersion(最小版本)302、MaxVersion(最大版本)304、Reserved(保留的)306、CreditsRequested(請求的積分)308、PreferredSendSize(偏好的發送大小)310、MaxReceiveSize(最大接收大小)312、和/或MaxSMB2MessageSize(最大SMB2消息大小)314.SMB直通協商請求包300可包括比圖3A中示出的那些欄位更多或更少的欄位,如省略號316所表示的。

在一實施例中,MinVersion欄位302可包括客戶機/請求方102支持的最低SMB直通協議版本的值。MaxVersion欄位304可存儲客戶機/請求方102支持的最高SMB直通協議版本。這個值可等於或大於MinVersion欄位302的值。在各實施例中,客戶機/請求方支持在MinVersion欄位302中的值和MaxVersion欄位304中的值之間的範圍中(包括)的所有協議版本。根據一實施例,Reserved欄位306僅是針對將來的未知要求的保留欄位,並且沒有被客戶機使用。

根據各實施例,CreditsRequested欄位308包括客戶機/請求方102正請求的來自伺服器/接收方106的發送積分的數目的值。在各實施例中,CreditsRequested欄位308中的值大於零(0),以確保SMB2數據可在後續消息中被發送。然而,根據各實施例,CreditsRequested欄位308中的值可以是任何數字,並可基於平均使用來設置。在各替換實施例中,CreditsRequested欄位308中的值可至少基於要被發送的SMB消息的大小。在又一些實施例中,請求積分時可考慮其他因素或附加因素。同樣,在各實施例中,大型消息可使用RDMA來傳送。

PreferredSendSize欄位310可包括客戶機/請求方102希望能夠向伺服器/接收方106傳送的最大SMB直通數據傳送包338的大小(可能以字節為單位)。MaxReceiveSize欄位312包括客戶機/請求方102將接受的來自伺服器/接收方106的最大SMB直通數據傳送消息的大小(可能以字節為單位)。在各實施例中,這個值可等於客戶機102所設置的存儲器緩衝區222a的塊或預定分配。因此,沒有單個SMB2數據傳送會超過該存儲器分配。在各實施例中,這個值大於或等於閾值128,該閾值128至少為數據傳送包和小型SMB2消息中的SMB直通頭部的大小。根據一實施例,MaxSmb2MessageSize欄位314可以包括客戶機/請求方將接受的來自伺服器/接收方106的最大SMB2協議消息的大小(可能以字節為單位)。這個值被客戶機102預先確定並設置。在各實施例中,MaxSmb2MessageSize欄位314中的值可以不大於存儲器緩衝區222a的總大小。通過這種方式,沒有SMB消息可溢出存儲器緩衝區222a。然而,根據一實施例,MaxSmb2MessageSize欄位314的值可以小於如用戶所確定的存儲器緩衝區222a中的存儲器量。

轉至圖3B,根據各實施例的SMB直通協商響應包336被示出。SMB直通協商響應包336可被對等體106發送以完成對RDMA連接的協商。SMB直通協商響應包336可包括但不限於以下欄位中的一個或多個,例如:MinVersion(最小版本)302b、MaxVersion(最大版本)304b、PreferredVersion(偏好的版本)318、Reserved(保留的)306b、CreditsRequested(請求的積分)308b、CreditsGranted(授予的積分)320a、Status(狀態)322、PreferredSendSize(偏好的發送大小)310b、MaxReceiveSize(最大接收大小)312b和/或MaxSMB2MessageSize(最大SMB2消息大小)314b。SMB直通協商響應包336可包括比圖3B中示出的那些欄位更多或更少的欄位,如省略號324所表示的。

根據各實施例,MinVersion欄位302b可包括伺服器/接收方106支持的最低SMB直通協議版本的值。MaxVersion欄位304b可存儲伺服器/接收方106支持的最高SMB直通協議版本。這個值可等於或大於MinVersion欄位302b的值。在各實施例中,伺服器/接收方106支持在MinVersion欄位302b中的值和MaxVersion欄位304b中的值之間的範圍內(包括)的所有協議版本。PreferredVersion欄位318存儲常用SMB直通協議版本的值。在各實施例中,PreferredVersion欄位318的值在由客戶機的SMB直通協商請求包300的MinVersion欄位302a和MaxVersion欄位304a所指定的範圍之內。在其他實施例中,PreferredVersion欄位318的值在由伺服器的SMB直通協商響應包336的MinVersion欄位302b和MaxVersion欄位304b所指定的範圍之間。根據各實施例,Reserved欄位306b僅是針對將來的未知要求的保留欄位,並且沒有被伺服器使用。

根據各實施例,CreditsRequested欄位308b包括伺服器/接收方106正請求的來自客戶機/請求方102的發送積分的數目的值。在各實施例中,CreditsRequested欄位308b中的值大於零(0),以確保SMB2數據可在後續消息中被發送。然而,CreditsRequested欄位308b中的值可以是任何數字,並可基於平均使用來設置。在各替換實施例中,CreditsRequested欄位308b中的值基於要被發送的SMB消息的大小或者可基於其他因素。根據各實施例,大型消息可在一個積分被請求時被發送。CreditsGranted欄位320a包括從伺服器/接收方106向客戶機/請求方102授予的積分的數目。在各實施例中,CreditsGranted欄位320a的值大於零(0),以允許客戶機/請求方102發送下一SMB直通消息。

在各實施例中,狀態欄位322包括至少一個標誌或值。在一實施例中,狀態欄位322包括一個或兩個值,即狀態成功或狀態不被支持。成功標誌指定伺服器/接收方106已接受了客戶機/請求方的SMB直通協商請求包300。不被支持標誌指定伺服器/接收方106已拒絕了客戶機/請求方102的SMB直通協商請求包300。

根據各實施例,PreferredSendSize欄位310b可包括伺服器/接收方106希望能夠向客戶機/請求方102傳送的最大SMB直通數據傳送包338的大小(可能以字節為單位)。在各實施例中,PreferredSendSize欄位310b小於或等於SMB直通協商請求包300中的MaxReceiveSize欄位312a。因此,伺服器/接收方106所發送的數據包大小可以不大於客戶機/請求方102的存儲器緩衝區222a分配。

在各實施例中,MaxReceiveSize欄位312b包括伺服器/接收方10b將接受的來自客戶機/請求方102的最大SMB直通數據傳送消息的大小(可能以字節為單位)。這個值可以等於伺服器/接收方106所設置的存儲器緩衝區222b的塊或預定分配。因此,在各實施例中,沒有SMB2數據傳送將超過該存儲器分配。在各實施例中,這個值大於或等於閾值128,該閾值128至少是數據傳送包中的SMB直通頭部的大小。MaxSmb2MessageSize欄位314b可包括伺服器/接收方10b將接受的來自客戶機/請求方102的最大SMB2協議消息的大小(可能以字節為單位)。這個值由伺服器/接收方106預先確定並設置。在各實施例中,MaxSmb2MessageSize欄位314b中的值可以不大於存儲器緩衝區222b的總大小。通過這種方式,沒有SMB消息可溢出存儲器緩衝區222b。然而,根據一實施例,MaxSmb2MessageSize欄位314b的值可以小於如用戶所確定的存儲器緩衝區222b中的存儲器量。

根據在此公開的各實施例的SMB直通數據傳送包338在圖3C中示出。SMB直通數據傳送包338可被發送以跨在協商期間建立的RDMA連接來傳送SMB2數據。客戶機/請求方102或伺服器/接收方106中的任一方可發送或接收SMB2數據。由此,客戶機/請求方102和伺服器/接收方106兩者一般被稱為接收方和發送方。SMB直通數據傳送包338可包括但不限於以下欄位中的一個或多個,例如:CreditsRequested(請求的積分)308c、CreditsGranted(授予的積分)320b、Reserved(保留的)306c、RemainingDataLength(剩餘數據長度)326、DataOffset(數據偏移)328、DataLength(數據長度)330和/或SMB2數據332。根據各實施例,SMB直通數據傳送包338可包括比圖3C中示出的那些欄位更多或更少的欄位,如省略號334所表示的。

在各實施例中,CreditsRequested欄位308c包括發送方正請求的來自接收方的發送積分的數目的值。在各實施例中,CreditsRequested欄位308c中的值大於零(0),以確保SMB2數據可在後續消息中被發送。然而,CreditsRequested欄位308c中的值可以是任何數字,並且可基於所預測的將來使用(即,還要多少數據包來完成SMB2數據的傳送)來設置。CreditsGranted欄位320b包括從發送方向接收方授予的積分的數目。在各實施例中,CreditsGranted欄位320b的值可以是零,因為對等體沒有義務履行對等體對積分的請求。然而,對等體可以在CreditsGranted欄位320b中提供積分以允許客戶機/請求方102發送下一SMB直通消息。根據在此公開的各實施例,Reserved欄位306c僅是針對將來的未知要求的保留欄位,並且沒有被客戶機使用。

在各實施例中,RemainingDataLength欄位326可包括接收方還需要接收的經分段的SMB2消息的字節數。因此,這個欄位中除零以外的任何值均向接收方指示具有更多數據的另一SMB直通數據傳送包338將被發送。根據各實施例,如果SMB直通數據傳送包338承載完整的SMB2消息或為承載經分段的SMB2數據的兩個或更多個SMB直通數據傳送包338中的最後一個,則RemainingDataLength欄位326中的值為零(0)。RDMA能夠順序發送各消息。由此,重新組裝各消息被簡化了,因為各順序消息按被接收的嚴格次序來重新組裝。因此,各實施例例如放棄了對頭部中的消息標識符的需要,或者放棄了對其他更複雜的重新組裝技術的使用。

在一實施例中,DataOffset欄位328包括從SMB直通數據傳送包338的開始處到所封裝的SMB2協議消息的前8位元組的對齊字節的偏移的以字節為單位的值。在各實施例中,如果DataLength欄位330的值為零,則DataOffset欄位328也被設置為零。根據一實施例,如果DataLength的值不是零,則DataOffset欄位328為某一值,並且可大於或等於24位元組,24位元組是該頭部中的其他欄位的大小。DataLength欄位330可包括SMB2數據欄位332中所封裝的SMB2協議消息的以字節為單位的大小。在各實施例中,如果SMB直通數據傳送包338沒有封裝SMB2協議消息,則DataLength欄位330的值被設為零。根據各實施例,SMB2數據欄位包括任何SMB2協議消息。

根據在此公開的各實施例,SMB2讀/寫請求340在圖3D中被示出。SMB2讀/寫請求340可以被封裝在SMB直通數據傳送包338中以執行直接的RDMA讀/寫。直接的RDMA讀/寫僅發送未經編碼的應用數據。根據本公開的各實施例,SMB2讀/寫請求340在伺服器106將執行到客戶機102的RDMA寫的情況下可以是SMB2讀請求,並在伺服器106將執行從客戶機102的RDMA讀的情況下可以是SMB2寫請求。無論如何,SMB2讀/寫請求340中的各欄位是類似的。應注意,伺服器106執行客戶機102所請求的RDMA傳送。SMB2讀/寫請求340可包括但不限於以下欄位中的一個或多個,例如:Channel(信道)342、ChannelInfoOffset(信道信息偏移)346和ChannelInfoLength(信道信息長度)348。在一實施例中,這些欄位可包括用於完成RDMA數據傳送的控制(steering)信息。根據一實施例,Reserved欄位344僅是針對將來的未知要求的保留欄位,並且沒有被使用。SMB2讀/寫請求340可包括比圖3D中示出的那些欄位更多或更少的欄位,如省略號351所表示的。所示的這些欄位出於說明的目的被提供,並且不旨在進行限制。

在各實施例中,Channel欄位342包括數據被尋找到的信道的值。RDMA連接可包括若干信道。根據各實施例,信道信息可包括對等體向RDMA設備提供來完成該傳送的信息。例如,如圖3E中所示出的,信道信息可包含一個或多個令牌、偏移、和各存儲器片段的長度,以及其他RDMA專用的信息。

在一實施例中,ChannelInfoOffset欄位346和ChannelInfoLength欄位348是指向數據包中的偏移、令牌和長度信息的指針。這些指針給出這些信息可位於SMB2讀或寫請求中的位置。在各實施例中,標誌350包括用於控制或改變RDMA直通數據傳送的行為的任何信息。

轉至圖3E,根據在此所公開的各實施例,RDMA信道描述符352被示出。RDMA信道描述符352可通常在信道欄位342中被封裝在SMB直通請求中。RDMA信道描述符352可包括但不限於以下欄位中的一個或多個,例如:Offset(偏移)354、Token(令牌)356和Length(長度)358。在一實施例中,這些欄位為用於完成RDMA數據傳送的控制信息。RDMA信道描述符352可包括比圖3E中示出的那些欄位更多或更少的欄位,如省略號360所表示的。所示出的這些欄位出於說明的目的被提供。為了完成直接數據傳送,RDMA基於信道欄位342中的信息被定向到具有將被讀或寫的數據以及該數據的長度的存儲器。由於直通數據傳送僅發送應用數據,因此該信息有助於確保合適的傳送。

根據一實施例,Offset 354是數據開始之處的以字節或比特為單位的值。Offset 354可以從存儲器塊起始地址開始測量,該存儲器塊起始地址可以使用Token 356中提供的信息來定位。Length 358是數據片段有多長的以比特或字節為單位的值。這一控制信息指導例如直接數據傳送。

根據此處所公開的一實施例,圖2A和圖2B中描繪的各個軟體功能模塊的交互被進一步示出在圖4A-4C中描繪的用於協商RDMA連接的各操作步驟400中。圖4A示出了根據本公開的各實施例的數據包408和424在客戶機102和伺服器106之間的傳送的表示400A。根據本公開的各實施例,圖4B以客戶機102的角度進行,而圖4C以伺服器106的角度進行。應注意,過程400被描述為客戶機請求RDMA連接並且伺服器106作出響應。然而,根據各實施例,伺服器106作出請求並且客戶機作出響應的相反情況可以為真。此外,該方法可例如在多個客戶機之間和/或在多個伺服器之間進行。

轉至圖4B,示出了根據一實施例的用於通過RDMA使用SMB2協商連接的示例操作步驟400B。過程400B在開始操作402B處被發起,並且過程400B前進到客戶機預先發布接收區404。在各實施例中,RDMA接口216a自動地檢測RNIC 108a/108b並利用RNIC 108a/108b以查看它們是否可用並被合適地配置。接著,在一實施例中,SMB直通NPI被SMB直通模塊214展示。SMB直通客戶機214a可以打開RDMA適配器的處理程序以形成針對SMB2客戶機208的RDMA連接。在一實施例中,SMB直通客戶機214a隨後通過RDMA接口216a請求RDMA連接。SMB直通客戶機214a還可創建存儲器緩衝區222a中的分配,並確定對於初始發送積分要請求什麼,以及對於接收積分什麼將被允許。在各實施例中,存儲器緩衝區222a中的分配可以具有預定大小。根據各實施例,存儲器緩衝區222a中的存儲器總量也可被確定。

返回到圖4B,SMB直通客戶機214a可隨後構建406SMB直通協商請求包300來發送到RDMA接口216a。SMB直通協商請求包300在例如圖3A中被描述。由此,SMB直通客戶機214a設置了SMB直通協商請求包300中的各欄位。因此,SMB直通客戶機214a確定客戶機102可支持的SMB直通的最小版本和最大版本。SMB直通客戶機214a確定要請求的積分數。在各實施例中,要請求的積分數可基於要發送的已知的將來SMB消息、基於將來可能發生的預測的SMB流量、基於對SMB的歷史使用、或依據某一其他方法。發送大小用內部函數和速度考慮來確定。最大接收大小可與存儲器緩衝區分配的大小掛鈎。最後,最大SMB消息大小被確定並被設置(一般,最大SMB消息大小大到足以允許對等體發送大型SMB2數據包,但並不大到會使用所有存儲器)。根據本公開的各實施例,該收集的信息被輸入到SMB直通協商請求包300中。

接著,SMB直通客戶機214a發送408B SMB直通協商請求包300。在一實施例中,SMB直通客戶機214a通過發送操作請求RDMA接口216a發送SMB直通協商請求包300。RDMA接口216a與RDMA接口216b通信,並將SMB直通協商請求包300發送給伺服器106。通過發送SMB直通協商請求包300,SMB直通客戶機214a啟動協商請求期滿計時器410。協商請求期滿計時器可具有預訂的值,並從該值到零倒計時。SMB直通客戶機214a隨後等待對SMB直通協商請求包300的響應。如果確定411協商請求期滿計時器在接收到對SMB直通協商請求包300的響應之前期滿,則過程400B以否繼續前進至結束操作432B,在操作432B該連接被停止。

轉到圖4C的開始操作402C,在各實施例中,伺服器106預測SMB直通協商請求包300並且預先發布接收區412。根據各實施例,SMB2伺服器212b可監聽活動,並自動發現RDMA在RNIC 108b的埠上可用並被綁定在該埠上。SMB2伺服器212b打開監聽器端點,並確定在RNIC 108b上RDMA可用。接著,SMB2伺服器212b隨後開始與SMB直通伺服器214b的通信。SMB直通伺服器214b可打開RDMA連接,並接收RDMA適配器處理程序。SMB直通伺服器214b隨後通過RDMA接口216b請求RDMA連接。SMB直通伺服器214b可隨後接受RDMA連接,由此向客戶機102通知該連接請求成功了。來自RDMA接口216a的這個成功指示觸發客戶機發送協商請求。

根據各實施例,SMB直通伺服器214b還可創建存儲器緩衝區222b中的分配,並確定對於初始發送積分要請求什麼,以及對於接收積分什麼將被允許。存儲器緩衝區222b中的分配可以具有預定大小。根據本公開的各實施例,存儲器緩衝區222b中的存儲器總量也可被確定。

返回到圖4C,SMB直通伺服器214b可隨後啟動協商請求期滿計時器414。在各實施例,伺服器106處的協商請求期滿計時器可具有預定值,並從該值到零倒計時。SMB直通伺服器214b隨後等待以接收SMB直通協商請求包300。在等待時,SMB直通伺服器214b監視RDMA連接,並確定416該協商請求期滿計時器是否在接收SMB直通協商請求包300之前期滿。如果協商請求計時器期滿,則過程400C以否前進至結束操作432C,在操作432C該連接被停止。

然而,如果SMB直通協商請求包300在協商請求期滿計時器的期滿之前到達RNIC 108b及RDMA接口216b,則過程400C以是前進至通過RDMA接口216b來接收並確認408C SMB直通協商請求包300,並將該數據包放置在存儲器緩衝區222b中。接著,SMB直通伺服器214b被通知該數據,並確定SMB直通協商請求包300是否有效418。

在各實施例中,為了確認SMB直通協商請求包300,SMB直通伺服器214b從該SMB直通協商請求包300讀數據,並確定以下,例如:MaxVersion欄位304的值是否小於MinVersion欄位302的值或是否該範圍中的值都不被支持;CreditsRequested欄位308的值是否為零;MaxReceiveSize欄位312的值是否小於預定閾值(例如,128位元組);或者,MaxSmb2MessageSize欄位314的值是否小於預定閾值。如果以上各項中的任一項為真,則SMB直通協商請求包300不是有效的,並且過程400C以否前進至結束操作432C,在操作432C,SMB直通伺服器214b斷開連接。如果所有這些檢查都不為真,則過程400C以是前進至處理SMB直通響應420,在該處理中,SMB直通協商請求包300被SMB直通伺服器214b發送到SMB直通客戶機214a。

在各實施例中,在處理SMB直通協商請求包300時,SMB直通伺服器214b將設置ProtocolVersion(協議版本)設為等於客戶機102和伺服器106所共享的最大協議版本。SMB直通伺服器214b還確定要授予多少積分。在各實施例中,要授予的積分數取決於存儲器緩衝區222b中的可用空間或其他因素。在作出這些確定後,SMB直通伺服器214b生成422SMB直通協商響應包336。在一實施例中,SMB直通伺服器214b設置SMB直通協商響應包336中的各欄位。例如,PreferredVersion欄位被設置成設置ProtocolVersion中的值。根據一實施例,CreditsGranted 320a被設置成SMB直通伺服器214b所確定的積分數。以與SMB直通協商請求包300類似的方式來填充其他欄位。SMB直通協商響應包336被隨後發送424C到客戶機。在各實施例中,SMB直通伺服器214b將SMB直通協商響應包336發送給RDMA接口216b來發送。

返回到圖4B,根據各實施例,SMB直通客戶機214a可確定411該響應是否在協商期滿計時器的期滿之前被接收到。如果該響應在該計時器的期滿之前被接收到,則過程400B以是前進至確認424B SMB直通協商響應包336。RDMA接口216a將消息接收到存儲器緩衝區222a中。SMB直通客戶機214a讀SMB直通協商響應包336並隨後確認該消息。為了確認SMB直通協商響應包336,SMB直通客戶機214a確定428以下,例如:根據本公開的各實施例,Status欄位322是否不是STATUS_SUCCESS(狀態_成功);PreferredVersion欄位318是否不包含處於由客戶機的SMB直通協商請求包300的MinVersion欄位302和MaxVersion欄位304所指定的範圍內的值;CreditsRequested欄位308b是否為零;CreditsGranted欄位320a是否為零;PreferredSendSize欄位310b是否大於由客戶機的SMB直通協商請求包330的MaxReceiveSize欄位312所指定的值;或者,MaxReceiveSize欄位312b是否小於預定閾值(例如,128位元組)。如果以上中的任一個為真,則SMB直通協商響應包336不是有效的,並且過程400B以否前進到結束操作432B,在操作432B,SMB直通客戶機214a斷開連接。根據此處所公開的各實施例,如果所有這些檢查都不為真,則過程400B以是前進至處理SMB直通響應430,在該處理中,SMB直通協商響應包336被SMB直通客戶機214a處理。

在各實施例中,在處理SMB直通協商響應包336時,SMB直通客戶機214a完成以下,例如:將在設置226中的該連接的PeerTargetSendCreditsCount(對等體目標發送積分計數)設置設為等於CreditsRequested欄位308b;將在SMB直通連接屬性中的該連接的SendCreditsCount(發送積分計數)設置設為等於CreditsGranted欄位320a;將在設置226中的該連接的MaxSendSize(最大發送大小)設置設為等於MaxReceiveSize(最大接收大小)欄位312b;將在設置226中的該連接的ReceiveSize設置設為等於PreferredSendSize欄位310b;將在設置226中的該連接的MaxOutboundFragmentedMessageSiz(最大出站經分段消息的大小)設置設為等於MaxReceiveSize欄位312b;以及,將該連接的空閒連接計時器設為在預定時間量(例如,幾小時、幾分鐘等)內期滿並啟動該計時器。一旦執行了以上步驟,RDMA連接協商就完成了,並且客戶機102和伺服器106可啟動交換SMB直通數據傳送包。過程400B隨後在結束操作432B終止。

根據此處所公開的一實施例,圖2A和圖2B中所描繪的各個軟體功能模塊的交互還被示出在圖5A-5D中所描繪的用於通過所建立的RDMA連接來交換SMB2數據的操作步驟500中。根據本公開的各實施例,在請求和響應通信中,通過將SMB2數據封裝成SMB直通數據傳送包338的數據載荷來通過所建立的SMB直通連接在客戶機102和伺服器106之間傳送該SMB2數據。請求和響應通信可用於例如控制信道通信、交換文件元數據、或用於其他過程。圖5A示出了根據本公開的各實施例的數據包516/518、530、532和546在客戶機102和伺服器106之間的傳送的表示500A。圖5B和圖5C採用客戶機102的角度,而圖5D採用伺服器106的角度。應該注意,過程500被描述成客戶機獨立地或者響應於來自伺服器的請求而將SMB2數據發送給伺服器106。然而,伺服器106對請求作出響應並將數據發送回客戶機102的相反情況可以為真。因此,在各實施例中,此處所描述的各過程適用於伺服器發送請求並要求積分的情況。此外,該方法可以例如在多個客戶機之間或者在多個伺服器之間進行。

轉至圖5B,示出了根據此處公開的各實施例的用於通過RDMA使用SMB2交換數據的示例操作步驟500B。開始操作502被發起,並且過程500B前進到客戶機102建立RDMA連接504。根據本公開的各實施例,建立RDMA連接可以如參考圖4A-4C所描述的。在一實施例中,SMB直通客戶機214a設置若干連接屬性,包括將MaxSendSize設置設為等於MaxReceiveSize欄位312b,將該連接的ReceiveSize設置設為等於PreferredSendSize欄位310b,以及將在設置226中的該連接的MaxOutboundFragmentedMessageSize設置設為等於MaxReceiveSize欄位312b。根據各實施例,通過這種方式,客戶機102建立了可以向伺服器106發送的數據包的大小。

返回到圖5B,根據各實施例,SMB直通客戶機214a可確定將SMB2消息傳輸到伺服器106所需的SMB直通數據傳輸包的數目。為了作出該確定,SMB直通客戶機214a可首先檢索在協商期間設置的MaxSendSize(被指定為R)。SMB直通客戶機214a隨後可確定要發送的SMB2協議消息的大小;在各實施例中,該值被設為「S」。SMB直通客戶機214a還確定SMB直通數據傳送包338的頭部所消耗的字節數(在各實施例中被指定為P)以及為使SMB直通數據傳送包338的有效載荷在8位元組對齊的邊界上開始的邊距(例如,DataOffset 328等)。在各實施例中,SMB直通客戶機214a隨後確定S是否小於或等於(R-P),並且根據各實施例,如果如此,則可通過將S除以(R-P)來確定數據包的數目。

過程500B隨後前進至由SMB直通客戶機214a確定分段是否被使用510。在一實施例中,在SMB2協議消息不「容納」到單個SMB直通數據傳送包338中時,分段被使用。換言之,S大於(R–P)嗎?如果不要使用分段,則過程500B以否前進至發送一個SMB直通數據傳送包518B。另一方面,如果分段被使用,則過程500B以是前進至初始化各傳送緩衝區字節512。

返回步驟518,根據各實施例,SMB2協議消息可以被傳送,而無需進行分段。用於傳送數據包的存儲器緩衝區222a的一部分被初始化。在各實施例中,前P個字節被初始化以設置SMB直通數據傳送包338的頭部信息,並添加為零的邊距字節以確保SMB2載荷為8位元組對齊的。因此,根據各實施例,在該緩衝區中,DataOffset欄位328被設為P,DataLength欄位330被設為S,且RemainingDataLength欄位326被設為零(0)。有關積分的信息或對積分的請求被存儲在CreditsRequested欄位308c或CreditsGranted欄位320b中。因此,客戶機102可以在SMB直通數據傳送包338中請求或授予更多積分。在各實施例中,SMB直通數據傳送包的發送方必須將CreditsRequested欄位設為至少為一(1)。存儲器緩衝區222a中的接著的S個字節被初始化,並且SMB2協議消息被存儲在SMB數據欄位332中。在SMB直通數據傳送包338被組裝後,SMB直通客戶機214a將該數據包發送518B給RDMA接口216a以通過RDMA連接將其發送到伺服器106。過程500B隨後通過頁面連接符B 522前進到結束操作548C,並且過程500B終止。

返回步驟512,根據各實施例,在步驟512,在S大於(R-P)的情況下,SMB2協議消息被劃分成兩個或更多個部分。這些部分隨後被拍成序列以在一系列RDMA發送操作中被發送,這些RDMA發送操作中的每一個操作承載SMB2協議消息的一部分(被稱為片段)。為了將SMB2協議消息劃分成片段,第一有效載荷的大小被設為X,X等於或小於(R-P)。根據一實施例,X表示將至少由第一RDMA發送操作來傳送的SMB2協議消息的字節數。正如步驟518B一樣,用於傳送數據包的存儲器緩衝區222a的一部分被初始化。在各實施例中,前P個字節被初始化以設置SMB直通數據傳送包338的頭部信息以及邊距字節。接著,DataOffset欄位328被設為P,DataLength欄位330被設為X,並且RemainingDataLength欄位326被設為(S–X)514。在各實施例中,RemainingDataLenght欄位326指示SMB2協議消息中還剩多少字節要被傳送。在各實施例中,當SMB2協議消息的最後一個片段被傳送時,(S-X)將為零(0)。在最後一個數據包中,RemainingDataLength欄位326隨後被設為零,這指示SMB直通數據傳送包338承載SMB2協議消息的最後一個片段。有關積分的信息或對積分的請求被存儲在CreditsRequested欄位308c或CreditsGranted欄位320b中。因此,在各實施例中,客戶機102在SMB直通數據傳送包338中請求或授予更多積分。存儲器緩衝區222a的接著的X個字節隨後被初始化。根據此處所公開的各實施例,SMB2協議消息的片段可隨後被存儲在SMB2數據欄位332中。

在將SMB直通數據傳送包338與SMB2協議消息的前X個未經傳送的字節組裝在一起後,SMB直通數據傳送包338被發送516B至伺服器。在各實施例中,SMB直通客戶機214a將SMB直通數據傳送包338發送516B到RDMA接口216a以通過RDMA連接發送到伺服器106。過程500B隨後通過頁面連接符A 520前進到可選步驟526,在步驟526,SMB直通客戶機214a確定526是否要發送包含另一片段的另一SMB直通數據傳送包338。因此,在各實施例中,SMB直通客戶機214a確定在發送了最後一個數據包之後,(S-X)是否為0。如果(S-X)為0或小於零,則意味著最後一個片段已經在最後一個SMB直通數據傳送包338中被發送,過程500B以否前進到結束操作548C,並且過程500B終止。然而,如果(S-X)大於0,則過程500B以是前進到確定是否存在足夠的發送積分528。在各實施例中,步驟526可以是可選的(如圖所示),因為傳輸這些片段的SMB直通數據傳送包338可以在存儲器緩衝區222a中被預先準備,並被順序地發送。當緩衝區222a為空時,過程500B終止。隨後不存在確定下一數據包是否要被發送的需要。應注意,根據各實施例,在SMB2協議消息被分段時,承載這些片段的RDMA發送操作被順序並單調地發送,並且可能不會受到與該經分段的SMB2協議消息無關的其他RDMA發送操作的幹擾。根據一實施例,在接收方處RDMA傳送排序將保留這些片段的順序,使得接收對等體可重新構造原始消息。

返回到步驟528,SMB直通客戶機214a確定528是否存在用於發送下一片段的足夠積分。本質上,SMB直通客戶機214a確定是否還留存一個發送積分。如果存在一發送積分,則過程500B通過頁面連接符C 524以是前進到步驟512。在各實施例中,RDMA傳輸具有由接收方在發送方可發送數據包之前預先發布的接收緩衝區。這個規則需要發送方和接收方之間的協調,以確保發送方不會在接收方已預先發布接收區之前嘗試發送數據包。根據本公開的各實施例,SMB直通使用發送積分的系統來實現所需的協調。

在一實施例中,從伺服器106或客戶機102授予的發送積分表示該伺服器106或客戶機102上的單個預先發布的接收。對等體被授權用一個發送積分執行一個RDMA發送操作。客戶機102還可以通過設置CreditsRequested欄位308c或者以分開的發送積分請求(根據一實施例,其不會在傳輸經分段的SMB2數據的一組SMB直通數據傳送包338的中間被發送)的形式來向伺服器106提供與客戶機102需要多少發送積分來高效地支持其工作負載有關的信息。發送積分在SMB直通數據傳送包338的CreditsGranted欄位320b中被授予。因此,SMB直通客戶機214a可通過將CreditsRequest欄位308c中的值設置成較高的數字(可能覆蓋所有將來的經分段數據包)來請求更多的發送積分。根據一實施例,SMB直通客戶機214a可隨後通過等待從伺服器106發送的SMB直通數據傳送包338來等待530C以接收發送積分,該SMB直通數據傳送包338不具有數據但在該SMB直通數據傳送包338的CreditsGranted欄位320b中包括發送積分。SMB直通客戶機214a可以通過設置計時器224a中的SendCreditesGrantedTimer(發送積分授予計時器)以在查詢532C處確定積分是否被接收。如果SendCreditsGrantedTimer在積分被授予之前期滿547,則過程500B以「是」前進至使傳送操作失敗或者終止,並且過程500B隨後在「結束」操作548C處終止。然而,如果積分被授予532C,則過程500B通過頁面連接符C 524以「是」前進到步驟512。根據一實施例,如果沒有設置計時器和/或該計時器尚未期滿547,則過程500B以「否」前進並且不使傳送操作失敗或終止,而改為繼續等待530C以接收發送積分。

轉至圖5D和過程500D的開始操作502D,在伺服器106處,SMB直通數據傳送包338被接收516D。在一實施例中,RDMA接口216b接收SMB直通數據傳送包338並將其發送到SMB直通伺服器214b。首先,SMB直通伺服器214b讀頭部信息。SMB直通伺服器214b前進到查詢536以確定RemainingDataLength欄位326是否為除零以外的某個數。在一實施例中,如果RemainingDataLength欄位326為零,則SMB直通數據傳送包338是唯一數據包,並且過程500D以「否」前進到處理SMB數據包數據544,此處SMB直通伺服器214b處理該數據包數據並將SMB2協議消息發送到SMB2伺服器212b。如果RemainingDataLength欄位326是除零以外的某個數,則過程500D以「是」前進到分配重新組裝緩衝區538。

在步驟538,在一實施例中,SMB直通伺服器214b分配存儲器緩衝區222b的一部分以便在該緩衝區222b中重新組裝SMB2協議消息。因此,SMB直通伺服器214b可分配存儲器緩衝區222b中的足夠塊來接受當前SMB直通數據傳送包338中的以及即將到來的SMB直通數據傳送包338中的數據,這基於DataLength欄位330的值以及RemainingDataLength欄位326的值。根據本公開的各實施例,SMB直通伺服器214b可隨後從SMB2數據欄位332中讀SMB2數據,並將該數據複製到所分配的緩衝區540中。

接著,一實施例為SMB直通伺服器214b提供等待並接收546D下一SMB直通數據傳送包338。在一實施例中,SMB2數據欄位332中的數據還被複製到存儲器緩衝區222b中的下一部分。在一替換實施例中,SMB直通伺服器214b可以可選地確定此下一SMB直通數據傳送包338是否是包含經分段的數據542的最後一個數據包。為了作出該確定,SMB直通伺服器214b檢查RemainingDataLength欄位326是否為零。如果RemainingDataLength欄位326為零,則SMB直通伺服器214b理解沒有更多數據包將被接收,並且過程500D以「是」前進到處理來自存儲器緩衝區222b的SMB2協議消息544。過程500D隨後在「結束」操作548D終止。另一方面,根據一實施例,如果RemainingDataLength欄位326為除零以外的某個數,則SMB直通伺服器214b理解另一(另一些)數據包將被接收,並且過程500D以「否」前進到接收546D下一SMB直通數據傳送包338。

根據此處所公開的一實施例,圖2A和圖2B中描繪的各個軟體功能模塊的交互被進一步示出在圖6中描繪的用於執行RDMA直通數據傳送的各操作步驟600中。圖6示出了根據本公開的各實施例的在客戶機102和伺服器106之間的數據傳送的表示。

如圖6中所示出的,過程600在開始操作602處被發起,並且SMB2客戶機208創建604SMB2讀/寫請求340。應用220可以請求要被傳送給伺服器106的數據或要從伺服器106讀取的數據。根據本公開的各實施例,數據傳送可以被SMB2客戶機208定向到利用RDMA直通數據傳送,使得SMB2伺服器106唯一地執行實際的RDMA請求。為了開始該傳送,SMB2客戶機208註冊目標存儲器緩衝區,以提供或接收未經編碼的應用數據,並隨後生成將通過RDMA發送並執行的SMB讀/寫命令。該命令可被包括在SMB2讀/寫請求340中,並被發送至SMB直通客戶機214a,該SMB直通客戶機214a將SMB2讀/寫請求340封裝606在SMB直通數據傳送包中。在各實施例中,SMB2讀/寫請求340被存儲在SMB直通數據傳送包中的SMB2數據欄位332中。SMB直通數據傳送包可隨後通過RDMA接口216被發送608到伺服器106。在一實施例中,伺服器106接收SMB Diret數據傳送包,並從SMB2數據欄位332中讀取SMB2讀/寫請求340。SMB直通伺服器214b可隨後從SMB2讀/寫請求340中讀取包括信道342、ChannelInfoOffset(信道信息偏移)346和ChannelInfoLength(信道信息長度)348在內的數據。該信息可將SMB直通伺服器214b定向到RDMA信道描述符352中的控制信息610。通過該控制信息,SMB直通伺服器214b可通過將未經編碼的應用數據發送612到客戶機102的緩衝區中的存儲器位置或從該存儲器位置檢索612未經編碼的應用數據來啟動直通數據傳送。過程600隨後在「結束」操作614處終止。

圖4A-4C、圖5A-5D以及圖6分別示出了根據此處所公開的各實施例的用於通過RDMA使用文件訪問協議協商通信以及通過RDMA使用文件訪問協議交換數據的示例操作特徵。在各實施例中,所描繪的各操作步驟可被組合到其他步驟中和/或被重新安排。此外,可使用例如更少或更多的步驟。

一般來說,積分是本發明各實施例的優點。發送積分表示已被預先發布來接收對等體上的傳入數據的緩衝區。由此,發送積分表示已被提交給對等體使得該對等體可使用其來傳送數據的有限接收方資源(存儲器、存儲器區域等)。在各實施例中,由於RDMA的特性,接收區一旦被發布後就不可被取消。對於要被釋放的與接收區相關聯的資源,這些資源被用於服務於傳入發送。在其中接收對等體開始在各資源上慢速運行並想要回收這些資源中它已專用於尚未解決的接收區的一些資源的各實施例中,這造成可能的問題。根據此處所公開的各實施例,由於接收區無法被取消,因此回收這些資源取決於對等體的協作。

根據一實施例,對於SMB直通中的這一問題的解決方案被稱為發送積分撤銷。向對等體傳送的SMB直通數據傳送包具有指定多少附加的發送積分已被授予對等體的CreditsGranted欄位。在替換實施例中,通過在SMB直通數據傳送包338中設置CreditRevocation(積分撤銷)標誌(未示出),CreditsGranted欄位320b的含義改變為對等體可保持的發送積分的數目。例如,如果CreditRevocation標誌被設置且CreditsGranted欄位320b的值為十(10),則十(10)為接收方可保留的積分數。如果接收方當前持有多於十(10)個發送積分,則接收方執行一系列RDMA發送操作來將所撤銷的發送積分用完,使得接收方最終具有十(10)個或更少的發送積分。被執行來將所撤銷的發送積分用完的發送操作可包括發送空SMB直通數據傳送包338(不具有數據有效載荷的數據包)。根據各實施例,在接收到傳入的空SMB直通數據傳送包338後,撤銷發送積分的對等體可以根據其認為合適的釋放這些資源或重新使用它們。

儘管發送積分允許兩個對等體使它們的發送和接收操作同步,在各實施例中這些對等體嘗試避免發送積分死鎖。想像其中對等體Y具有來自對等體X的單個發送積分並且對等體X具有來自對等體Y的單個發送積分的場景。在這個場景中,每一對等體被授權在任何時刻對其對等體執行單次發送。想像X和Y兩者都使用該過程中的它們的單個發送積分來同時執行發送操作,但由兩個對等體傳送的SMB直通數據傳送包338沒有向對等體授予附加發送積分。所得的狀態被稱為發送積分死鎖。X和Y兩者都已使用了其最後的發送積分。為了能夠向對等體發送附加的數據包,每一對等體需要附加的發送積分。然而,發送積分是經由SMB直通數據傳送包338來授予的,並且任一方都不可執行任何進一步的發送操作。結果是任一對等體都不可傳送任何附加的數據包,並且不存在它們可獲取進一步發送積分的機制。因此,死鎖已發生。

根據本公開的各實施例,這個問題的解決方案只是一規則。根據一實施例,在SMB直通對等體使用了它的最後一個發送積分時,正被發送的SMB直通數據傳送數據包338向該對等體授予至少一個(1)附加發送積分。如果兩個對等體都遵循這個規則,則死鎖不會發生,因為每一對等體將總是能夠通過授予附加的發送積分來對另一方作出響應。

最後,圖7示出可在其上實現本文公開的各實施例的示例計算機系統700。根據此處所公開的各實施例,描繪了諸如例如客戶機/應用伺服器102或文件伺服器106之類的、具有至少一個處理器702的用於如此處所示的交換消息數據的計算機系統700。系統700具有存儲器704,包括例如系統存儲器、易失性存儲器和非易失性存儲器。在其最基本的配置中,計算系統700在圖7中由虛線706示出。另外,系統700還可包括另外的存儲(可移動和/或不可移動),其中包括但不限於磁碟、光碟或磁帶。在圖7中通過可移動存儲708和不可移動存儲710示出這樣的附加存儲。

如這裡所使用的術語計算機可讀介質可以包括計算機存儲介質。計算機存儲介質可包括以用於存儲諸如計算機可讀指令、數據結構、程序模塊、或其他數據等信息的任何方法或技術實現的易失性和非易失性、可移動和不可移動介質。系統存儲器704、可移動存儲708和不可移動存儲710都是計算機存儲介質(即,存儲器存儲)的示例。計算機存儲介質可以包括,但不限於,RAM、ROM、電可擦除只讀存儲器(EEPROM)、快閃記憶體或其他存儲器技術、CD-ROM、數字多功能盤(DVD)或其他光存儲、磁帶盒、磁帶、磁碟存儲或其他磁性存儲設備、或可用於存儲信息且可以由計算系統700訪問的任何其他介質。任何這樣的計算機存儲介質都可以是系統700的一部分。圖7中的說明不意圖以任何方式限制本公開的範圍。

如這裡所使用的術語計算機可讀介質還包括通信介質。通信介質由諸如載波或其他傳輸機制等已調製數據信號中的計算機可讀指令、數據結構、程序模塊或其他數據來體現,並包括任何信息傳遞介質。術語「已調製數據信號」可以描述以對該信號中的信息進行編碼的方式設定或者改變其一個或多個特徵的信號。作為示例而非限制,通信介質包括諸如有線網絡或直接線連接等有線介質,以及諸如聲學、射頻(RF)、紅外線和其他無線介質等無線介質。

系統700還可包含允許該設備與其它設備通信的通信連接716。此外,系統700還可具有輸入設備714,諸如鍵盤、滑鼠、筆、語音輸入設備、觸摸輸入設備等等。還可包括輸出設備712,諸如顯示器、揚聲器、印表機等等。所有這些設備在本領域中是公知的並且不必在此詳細討論。上述設備是示例且可以使用其他設備。

以上參考附圖描述了本發明的各實施例,可以理解,可以對本發明做出本領域技術人員易於想到且被包含在所公開並如所附權利要求書所定義的本發明的精神和範圍內的眾多修改。儘管出於本發明的目的描述了各實施方式,但可以做出落入本發明的範圍內的各種改變和修改。

同樣地,雖然本發明使用了對結構特徵、方法動作和含有這些動作的計算機可讀介質專用的語言,但是應該理解,在所附權利要求書中定義的本發明不必限於此處描述的具體結構、動作、特徵或介質。例如,儘管在各實施例的各描述方面中使用了特定名稱或命名約定(諸如,API、例程等的名稱),但可以對這樣的名稱和/或命名約定作出多種修改,這些修改被涵蓋在本公開的精神和範圍內。上述特定結構、特徵、動作、名稱、命名約定和/或介質是作為實現權利要求的示例形式而公開的。各實施例的各方面允許多個客戶機/應用伺服器、多個文件伺服器、多個網絡、多個連接對等體等。或者,在其他實施例中,使用具有單個伺服器和單個網絡的單個客戶機計算機。所屬領域技術人員將認識到在本公開的範圍和精神內的其他實施例或改進。因此,這些具體結構、動作、或介質是作為實現所要求保護的本發明的示例性實施例而公開的。本發明由所附權利要求書進行定義。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀