專利名稱:卸載讀和寫的制作方法
卸載讀和寫
背景技術:
用于傳輸數據的一個機制是將來自源位置的文件的數據讀入主存儲器并且將來自主存儲器的數據寫到目的地位置。盡管在一些實施例中,這可能對于相對較少的數據可接受地起作用,然而隨著數據的增加,讀數據和將數據傳輸到另一個位置花費的時間增加。 此外,如果通過網絡訪問數據,那么網絡可能在將數據從源位置傳輸到目的地位置時施加附加的延遲。此外,與存儲布置復雜性結合的安全性問題可能使數據傳輸復雜化。本文要求保護的主題并不限于解決任何缺點或者僅在上面描述的環(huán)境之類的環(huán)境中操作的實施例。相反地,該背景技術部分僅僅提供來說明其中可以實施本文描述的一些實施例的一個示例性技術領域。
發(fā)明內容
簡而言之,本文描述的主題的各方面涉及卸載讀和寫。在各方面中,尋求傳輸數據的請求器發(fā)送表示數據的請求。作為響應,請求器接收一個或多個表示數據的令牌。然后, 請求器可以將這些令牌中的一個或多個提供給部件,請求寫由所述一個或多個令牌表示的數據。在一些示例性應用中,部件可以使用所述一個或多個令牌以識別數據并且然后可以在沒有與請求器的附加交互的情況下讀數據或者邏輯地寫數據。令牌可以通過請求或者基于其他因素而被無效。本發(fā)明內容部分被提供來簡要地標識在下面的具體實施方式
部分中進一步描述的主題的一些方面。本發(fā)明內容部分并非意在標識要求保護的主題的關鍵或基本特征,也非意在用來限制要求保護的主題的范圍。除非上下文另有明確說明,短語“本文描述的主題”指的是在具體實施方式
部分中描述的主題。措詞“各方面”應當理解為“至少一個方面”。標識具體實施方式
部分中描述的主題的各方面并非意在標識要求保護的主題的關鍵或基本特征。上面描述的各方面以及本文描述的主題的其他方面通過實例的方式進行說明并且不受限于附圖,在附圖中,相似的附圖標記表示相似的元件,并且在附圖中。
圖1為表示本文描述的主題的各方面可以結合于其中的示例性通用計算環(huán)境的框圖2-5為表示其中本文描述的主題的各方面可以操作的系統(tǒng)部件的示例性布置的框圖;以及
圖6-8為通常表示依照本文描述的主題的各方面可能出現的示例性動作的流程圖。
具體實施例方式定義
當在本文中使用時,措詞“包括”及其變體應當被理解為開放式措詞,其意為“包括,但不限于”。措詞“或者”應當理解為“和/或”,除非上下文另有明確規(guī)定。措詞“基于”應當被理解為“至少部分地基于”。措詞“一個實施例”和“實施例”應當理解為“至少一個實施例”。措詞“另一個實施例”應當理解為“至少一個其它實施例”。其他的顯式的和隱式的定義可以包含在下文中。在本文中,有時使用措詞“第一”、“第二”、“第三”等等。特別是在權利要求書中, 這些措詞的使用并非意在暗示排序,而是相反地用于標識的目的。例如,短語“第一數據”和 “第二數據”并不一定意為第一數據在物理上或邏輯上位于第二數據之前,或者甚至在第二數據之前請求或操作第一數據。相反地,這些短語用來標識可能地截然不同或者非截然不同的數據集合。即,第一數據和第二數據可以指的是不同的數據、相同的數據、一些相同的數據和一些不同的數據等等。第一數據可以是第二數據的子集(潛在地為真子集),或者反之亦然。應當指出的是,盡管本文中有時使用短語“存儲裝置的數據”和“存儲裝置中的數據”,但是并不意在使用這些短語將提及的數據限制為物理上存儲在存儲裝置中的數據。相反地,這些短語意在將數據限制為邏輯上位于存儲裝置中的數據,即使該數據物理上不在存儲裝置中。例如,(下文中描述的)存儲抽象可以執(zhí)行優(yōu)化,其中相當多的零值(或其他數據值)并不實際地存儲在潛在的存儲介質上,而是相反地由表示零值的縮短的數據(例如值和長度)表示。下文中提供了其他的實例。示例件操作環(huán)境
圖1示出了其上可以實現本文描述的主題的各方面的適當計算系統(tǒng)環(huán)境100的實例。 計算系統(tǒng)環(huán)境100僅僅是適當計算環(huán)境的一個實例并且并非意在暗示關于本文描述的主題的各方面的使用或功能范圍的任何限制。也不應當將計算環(huán)境100解釋為具有與示例性操作環(huán)境100中示出的任何一個部件或者部件組合有關的任何依賴性或要求。本文描述的主題的各方面可以與許多其他通用或專用計算系統(tǒng)環(huán)境或配置一起操作??梢赃m合于與本文描述的主題的各方面一起使用的公知計算系統(tǒng)、環(huán)境或配置的實例包括個人計算機,服務器計算機,手持式或者膝上型設備,多處理器系統(tǒng),基于微控制器的系統(tǒng),機頂盒,可編程消費電子器件,網絡PC,小型計算機,大型計算機,個人數字助理 (PDA),游戲設備,打印機,包括機頂盒、媒體中心的電器或者其他電器,汽車嵌入式或者附接計算設備,其他移動設備,包括上面的系統(tǒng)或設備中的任何一個的分布式計算環(huán)境等等。本文描述的主題的各方面可以在由計算機執(zhí)行的諸如程序模塊之類的計算機可執(zhí)行指令的一般上下文中加以描述。通常,程序模塊包括例程、程序、對象、部件、數據結構等等,其執(zhí)行特定的任務或者實現特定的抽象數據類型。本文描述的主題的各方面也可以在分布式計算環(huán)境中實施,在分布式計算環(huán)境中,任務由通過通信網絡鏈接的遠程處理設備執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于包括存儲器存儲設備的本地和遠程計算機存儲介質中。參照圖1,用于實現本文描述的主題的各方面的示例性系統(tǒng)包括計算機110形式的通用計算設備。計算機可以包括能夠執(zhí)行指令的任何電子設備。計算機110的部件可以包括處理單元120、系統(tǒng)存儲器130以及將包括系統(tǒng)存儲器的各種系統(tǒng)部件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若干類型的總線結構中的任何總線結構,包括存儲器總線或存儲控制器、外圍總線以及使用各種各樣的總線架構中的任何總線架構的本地總線。舉例而言且非限制性地,這樣的架構包括工業(yè)標準架構(ISA)總線、微通道架構 (MCA)總線、增強ISA (EISA)總線、視頻電子標準協(xié)會(VESA)本地總線、也稱為夾層總線的外圍部件互連(PCI)總線、外圍部件互連擴展(PCI-X)總線、高級圖形端口(AGP)和高速PCI (PCIe)。計算機110典型地包括各種各樣的計算機可讀介質。計算機可讀介質可以是可以由計算機110訪問的任何可用介質,并且包括易失性和非易失性介質以及可移除和不可移除介質。舉例而言且非限制性地,計算機可讀介質可以包括計算機存儲介質和通信介質。計算機存儲介質包括以任何方法或技術實現的易失性和非易失性的、可移除和不可移除的介質,其用于存儲諸如計算機可讀指令、數據結構、程序模塊或其他數據之類的信息。計算機存儲介質包括RAM、R0M、EEPR0M、閃存或者其他存儲器技術、CD-ROM、數字多功能盤(DVD)或者其他光盤存儲裝置、磁帶盒、磁帶、磁盤存儲裝置或者其他磁性存儲設備或者可以用來存儲希望的信息且可以由計算機110訪問的任何其他介質。通信介質典型地在諸如載波或其他傳輸機制之類的調制數據信號中含有計算機可讀指令、數據結構、程序模塊或其他數據,并且包括任何信息輸送介質。術語“調制數據信號”意為這樣的信號,該信號使其一個或者多個特性被設置或改變以使得在該信號中編碼信息。舉例而言且非限制性地,通信介質包括諸如有線網絡或直接有線連接之類的有線介質以及諸如聲音、RF、紅外和其他無線介質之類的無線介質。上面的任意組合也應當包含在計算機可讀介質的范圍內。系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質,例如只讀存儲器(ROM) 131和隨機存取存儲器(RAM) 132。包含例如在啟動期間幫助在計算機 110內的元件之間傳輸信息的基本例程的基本輸入/輸出系統(tǒng)133 (BIOS)典型地存儲在 ROM 131中。RAM 132典型地包含可由處理單元120立即訪問和/或當前操作的數據和/ 或程序模塊。舉例而言且非限制性地,圖1示出了操作系統(tǒng)134、應用程序135、其他程序模塊136和程序數據137。計算機110也可以包括其他可移除/不可移除的、易失性/非易失性計算機存儲介質。僅僅舉例而言,圖1示出了從不可移除的非易失性磁性介質進行讀或者向其寫的硬盤驅動器141、從可移除的非易失性磁盤152進行讀或者向其寫的磁盤驅動器151以及從諸如CD-ROM或其他光學介質之類的可移除的非易失性光盤156進行讀或者向其寫的光盤驅動器155??梢杂迷谒鍪纠圆僮鳝h(huán)境中的其他可移除/不可移除的易失性/非易失性計算機存儲介質包括磁帶盒、閃存卡、數字多功能盤、其他光盤、數字視頻帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅動器141可以通過接口 140連接到系統(tǒng)總線121,并且磁盤驅動器151 和光盤驅動器155可以通過諸如接口 150之類的用于可移除的非易失性存儲器的接口連接到系統(tǒng)總線121。上面討論且在圖1中示出的驅動器及其關聯的計算機存儲介質提供了對于計算機可讀指令、數據結構、程序模塊和用于計算機110的其他數據的存儲。在圖1中,例如,硬盤驅動器141被示為存儲操作系統(tǒng)144、應用程序145、其他程序模塊146和程序數據147。 應當指出的是,這些部件可以與操作系統(tǒng)134、應用程序135、其他程序模塊136和程序數據 137相同或不同。操作系統(tǒng)144、應用程序145、其他程序模塊146和程序數據147被給予與其在RAM 132中的相應相對物不同的編號以便說明至少它們是不同的拷貝。
用戶可以通過諸如鍵盤162和通常稱為鼠標、軌跡球或觸摸板的指向設備161之類的輸入設備將命令和信息輸入到計算機110中。其他輸入設備(未示出)可以包括麥克風、操縱桿、游戲板、碟形衛(wèi)星天線、掃描儀、觸敏屏、書寫板等等。這些和其他輸入設備經常通過耦合到系統(tǒng)總線的用戶輸入接口 160連接到處理單元120,但是可以通過諸如并行端口、游戲端口或者通用串行總線(USB)之類的其他接口和總線結構連接。監(jiān)視器191或者其他類型的顯示設備也經由諸如視頻接口 190之類的接口連接到系統(tǒng)總線121。除了監(jiān)視器之外,計算機也可以包括其他的外圍輸出設備,例如揚聲器197 和打印機196,其可以通過輸出外圍接口 195連接。計算機110可以通過使用到一個或多個遠程計算機(例如遠程計算機180)的邏輯連接而操作于聯網環(huán)境中。遠程計算機180可以是個人計算機、服務器、路由器、網絡PC、對等設備或者其他公共網絡節(jié)點,并且典型地包括上面描述的與計算機110有關的元件中的許多或全部,盡管在圖1中僅僅示出了存儲器存儲設備181。圖1中繪出的邏輯連接包括局域網(LAN) 171和廣域網(WAN) 173,但是也可以包括其他網絡。這樣的聯網環(huán)境在辦公室、 企業(yè)范圍計算機網絡、內聯網和因特網中是司空見慣的。當使用于LAN聯網環(huán)境中時,計算機110通過網絡接口或適配器170連接到LAN 171。當使用于WAN聯網環(huán)境中時,計算機110可以包括用于通過諸如因特網之類的WAN 173 建立通信的調制解調器172或者其他構件??梢栽趦炔炕蛲獠康恼{制解調器172可以經由用戶輸入接口 160或其他適當機構連接到系統(tǒng)總線121。在聯網環(huán)境中,描繪的與計算機 110有關的程序模塊或者其部分可以存儲在遠程存儲器存儲設備中。舉例而言且非限制性地,圖1將遠程應用程序185示為駐留在存儲器設備181上。應當理解的是,所示的網絡連接是示例性的并且可以使用建立計算機之間的通信鏈接的其他構件。卸載讀和寫
如前面所提到的,一些傳統(tǒng)的數據傳輸操作可能不是高效的或者甚至工作于當今的存儲環(huán)境中。圖2-5為表示其中本文描述的主題的各方面可以操作的系統(tǒng)部件的示例性布置的框圖。圖2-5中示出的部件是示例性的并且并非意在包括可能需要或包括的所有部件。 在其他實施例中,結合圖2-5描述的部件和/或功能可以包含于其他的部件(示出或未示出)中或者置于子部件中,而不脫離本文描述的主題的各方面的精神或范圍。在一些實施例中,結合圖2-5描述的部件和/或功能可以跨多個設備而分布。轉向圖2,系統(tǒng)205可以包括請求器210、數據訪問部件215、令牌管理器225、存儲裝置220和其他部件(未示出)。系統(tǒng)205可以經由一個或多個計算設備實現。這樣的設備可以包括例如個人計算機,服務器計算機,手持式或者膝上型設備,多處理器系統(tǒng),基于微控制器的系統(tǒng),機頂盒,可編程消費電子器件,網絡PC,小型計算機,大型計算機,手機,個人數字助理(PDA),游戲設備,打印機,包括機頂盒、媒體中心的電器或者其他電器,汽車嵌入式或者附接計算設備,其他移動設備,包括上面的系統(tǒng)或設備中的任何一個的分布式計算環(huán)境等等。在系統(tǒng)205包括單個設備的情況下,可以被配置成充當系統(tǒng)205的示例性設備包括圖1的計算機110。在系統(tǒng)205包括多個設備的情況下,所述多個設備中的一個或多個可以包括圖1的相似地或者不同地配置的計算機110。
數據訪問部件215可以用來向存儲裝置220傳輸數據和傳輸來自存儲裝置220的數據。數據訪問部件215可以包括例如以下一個或多個1/0管理器,過濾器,驅動器,文件服務器部件,存儲區(qū)域網絡(SAN)或其他存儲設備上的部件以及其他部件(未示出)。SAN可以例如實現為暴露邏輯存儲目標的設備,實現為包括這樣的設備的通信網絡等等。在一個實施例中,數據訪問部件可以包括被給予檢查請求器210與存儲裝置220 之間的I/O的機會并且能夠改變、完成或放棄該I/O或者基于此執(zhí)行其他動作或不執(zhí)行動作的任何部件。例如,在系統(tǒng)205駐留在單個設備上的情況下,數據訪問部件215可以包括請求器210與存儲裝置220之間的I/O堆棧中的任何對象。在系統(tǒng)205由多個設備實現的情況下,數據訪問部件215可以包括容納請求器210的設備上的部件,提供對存儲裝置220 的訪問的設備上的部件,和/或其他設備上的部件等等。在另一個實施例中,數據訪問部件215可以包括由部件使用的任何部件(例如服務、數據庫等等),即使數據不流經使用的部件,I/O也通過所述部件。當在本文中使用時,措詞部件應被理解為包括設備的全部或者部分、一個或多個軟件模塊或者其部分的集合、一個或多個軟件模塊或者其部分的某種組合以及一個或多個設備或者其部分等等。在一個實施例中,存儲裝置220為能夠存儲數據的任何存儲介質。存儲裝置220 可以包括易失性存儲器(例如緩存)和非易失性存儲器(例如永久性存儲裝置)。措詞數據應當廣泛地理解為包括可以由一個或多個計算機存儲元件表示的任何東西。邏輯上,數據可以在易失性或非易失性存儲器中表示為一系列1和0。在具有非二進制存儲介質的計算機中,數據可以依照存儲介質的能力而表示??梢詫祿M織成不同類型的數據結構,包括簡單的數據類型,例如數字、字母等等;分等級的、鏈接的或者其他相關的數據類型;包括多個其他數據結構或簡單數據類型的數據結構等等。數據的一些實例包括信息、程序代碼、程序狀態(tài)、程序數據、命令、其他數據等等。存儲裝置220可以包括硬盤存儲裝置、固態(tài)或者其他非易失性存儲裝置、諸如RAM 之類的易失性存儲器、其他存儲裝置、以上的某種組合等等,并且可以跨多個設備(例如多個SAN、多個文件服務器、異構設備的組合等等)分布。用來實現存儲裝置220的設備可以物理上定位在一起(例如在單個設備上、在數據中心處等等)或者在地理上分布。存儲裝置 220可以布置在分層存儲布置或者非分層存儲布置中。存儲裝置220可以在外部、內部或者包括在實現系統(tǒng)205的一個或多個設備的內部和外部的部件。存儲裝置220可以是格式化 (例如具有文件系統(tǒng))或者是非格式化的(例如原始的)。在另一個實施例中,存儲裝置220可以實現為存儲抽象而不是直接物理存儲裝置。存儲抽象可以包括例如文件、卷、盤、虛擬盤、邏輯單元、數據流、交替數據流、元數據流等等。例如,存儲裝置220可以由具有多個物理存儲設備的服務器實現。在該實例中,服務器可以給出允許數據訪問部件訪問存儲裝置的數據的接口,該存儲裝置使用服務器的物理存儲設備或者其部分中的一個或多個實現。這種抽象層次可以重復到任何任意的深度。例如,向數據訪問部件215提供存儲抽象的服務器也可以依靠存儲抽象以訪問和存儲數據。在另一個實施例中,存儲裝置220可以包括向可以持續(xù)存在或者非持續(xù)存在于非易失性存儲裝置中的數據提供視圖的部件。
數據訪問部件215中的一個或多個可以駐留于容納請求器210的裝置上,而數據訪問部件215中的一個或多個其他的數據訪問部件可以駐留于容納存儲裝置220或者提供對存儲裝置220的訪問的裝置上。例如,如果請求器210是在個人計算機上執(zhí)行的應用,那么數據訪問部件215中的一個或多個可以駐留于個人計算機上容納的操作系統(tǒng)中。作為另一個實例,如果存儲裝置220由存儲區(qū)域網絡(SAN)實現,那么數據訪問部件215中的一個或多個可以實現管理和/或提供對存儲裝置220的訪問的存儲操作系統(tǒng)。當請求器210和存儲裝置220在單個裝置中容納時,數據訪問部件215中的全部或許多也可以駐留在該裝置上。為了發(fā)起存儲裝置220的數據的(下文描述的)卸載讀,請求器210可以使用預定義的命令(例如經由API)發(fā)送獲得表示數據的令牌的請求。作為響應,數據訪問部件215中的一個或多個可以通過提供一個或多個表示該數據或者其子集的令牌而響應請求器210。例如,出于各種原因,可能希望的是返回表示比原始請求的數據更少的數據的令牌。當返回令牌時,它可能以令牌表示的數據的長度或者甚至多個范圍返回。該長度可能小于原始請求的數據的長度。數據訪問部件215中的一個或多個可以在卸載讀或卸載寫時操作于比與令牌關聯的請求的長度更小的長度。實際操作的數據的長度在本文中有時稱為“有效長度”。操作于比請求的長度更小的長度出于各種原因而可能是所希望的??梢苑祷赜行чL度,使得請求器或者其他數據訪問部件知道所述命令實際操作多少字節(jié)。數據訪問部件215可以響應于卸載讀或寫而以各種方式起作用,包括例如
1.分區(qū)數據訪問部件可以在將卸載讀或寫請求轉發(fā)到下一個較低的數據訪問部件之前調節(jié)該請求的偏移。2. RAID數據訪問部件可以分解卸載讀或寫請求并且將片段轉發(fā)到相同或不同的數據訪問部件。在RAID-O的情況下,接收的請求可以沿著條紋邊界分解(得到更短的有效長度),而在RAID-I的情況下,可以將整個請求轉發(fā)到超過一個數據訪問部件(得到用于相同數據的多個令牌)。3.緩存數據訪問部件可以寫出它的緩存的包括要由卸載讀請求獲得的數據的部分。4.緩存數據訪問部件可以使它的緩存的包括要由卸載寫請求覆蓋的數據的那些部分無效。5.數據驗證數據訪問部件可以使要由卸載寫請求覆蓋的數據的任何緩存的校驗和無效。6.加密數據訪問部件可以放棄卸載讀或寫請求。7.快照數據訪問部件可以拷貝要由卸載寫請求覆蓋的位置的數據。這可以部分地完成,使得用戶可以在以后“回到”該文件的“先前版本”(如果必要的話)。快照數據訪問部件本身可以使用卸載讀和寫命令以便將(要覆蓋的)位置的數據拷貝到備份位置。在該實例中,快照數據訪問部件可以被認為是(下文所描述的)“下游請求器”。上面的實例并不預期是包括一切的或者詳盡的?;诒疚牡慕虒?,本領域技術人員可以認識到其中可以應用本文的教導而不脫離本文描述的主題的各方面的精神或范圍的其他方案。
如果數據訪問部件215放棄卸載讀或寫,那么可以返回錯誤碼,其允許另一個數據訪問部件或者請求器嘗試用于讀或寫數據的另一個機制。可以例如在初始化期間執(zhí)行能力發(fā)現。當存儲裝置或者甚至較低層的數據訪問部件不支持特定的操作時,可以通過較高層的數據訪問部件或者請求器執(zhí)行其他的動作以實現相同的結果。例如,如果(下文描述的)存儲系統(tǒng)不支持卸載讀和寫,那么數據訪問部件可以管理令牌并且維持數據的視圖,使得較高層的數據訪問部件不知道存儲裝置或者較低層的數據訪問部件并不提供該能力。請求器可以包括發(fā)端請求器或者下游請求器。例如,請求器可以包括這樣的應用, 該應用請求令牌,使得該應用可以執(zhí)行卸載寫。這種類型的請求器可以稱為發(fā)端請求器。作為另一個實例,請求器可以包括從客戶端接收拷貝命令的服務器應用(例如,服務器消息塊 (SMB)服務器)。該客戶端可能通過拷貝命令請求將數據從源存儲裝置拷貝到目的地存儲裝置。SMB服務器可以接收該請求并且轉而使用卸載讀和寫以便執(zhí)行拷貝。在這種情況下,請求器可以稱為下游請求器。當在本文中使用時,除非另有規(guī)定或者由上下文顯然可知,措詞請求器應當被理解為包括發(fā)端請求器和下游請求器。發(fā)端請求器是最初發(fā)送卸載讀或寫的請求的請求器。 換言之,措詞請求器預期覆蓋其中在該請求器上方存在該請求器對其作出響應以便發(fā)起卸載讀的附加部件的情況,以及其中該請求器主動地最初發(fā)起卸載讀或寫的情況。例如,發(fā)端請求器可以是希望將數據從源傳輸到目的地的應用。這種類型的發(fā)端請求器可以將一個或多個卸載讀和寫請求發(fā)送給數據訪問部件215以便傳輸數據。下游請求器是發(fā)出一個或多個卸載讀或寫以便滿足來自另一個請求器的請求的請求器。例如,數據訪問部件215中的一個或多個可以充當下游請求器并且可以發(fā)起一個或多個卸載讀或寫以便滿足從另一個請求器做出的請求。上面參照RAID-0、分區(qū)和快照數據訪問部件給出了下游請求器的一些實例,但是這些實例并不預期是包括一切的或者詳盡的。在一個實施例中,令牌包括難于猜測的隨機或偽隨機數。猜測該數字的難度可以根據數字的大小以及用來產生該數字的機制來選擇。該數字表示存儲裝置220上的數據, 但是可以比該數據小得多。例如,請求器可以請求用于100吉字節(jié)文件的令牌。作為響應, 請求器可以接收例如512字節(jié)或者其他大小的令牌。只要令牌有效,該令牌就表示數據。在一些實現方式中,令牌可以表示數據,因為它在令牌綁定到數據時邏輯地存在。措詞“邏輯地”被使用,因為數據可能不全部駐留在存儲裝置中或者甚至不持續(xù)存在。例如,一些數據可能處于需要在可以提供令牌之前清除的緩存中。作為另一個實例,一些數據可以從其他數據導出。作為另一個實例,可能需要組合或者以其他方式操縱來自完全不同的源的數據以便創(chuàng)建由令牌表示的數據。綁定可以發(fā)生在接收到對于令牌的請求之后以及返回令牌的同時或者之前。在其他的實現方式中,令牌表示的數據可以改變。令牌有效期間數據是否可以改變的行為可以與請求器協(xié)商或者在部件之間協(xié)商。這在下文中更詳細地加以描述。令牌可以到期并且因而變得無效或者可以在到期之前被明確地無效。例如,如果令牌表示的文件關閉,容納請求器210的計算機關機,具有令牌表示的數據的卷被卸除,令牌的預期使用完成等等,那么可以發(fā)送消息以便明確地使令牌無效。在一些實現方式中,使令牌無效的消息可以被看作強制性的,并且被遵循。在其他實現方式中,使令牌無效的消息可以被看作可以遵循或者可以不遵循的提示。在使令牌無效之后,它不再可以用來訪問數據。令牌可以由保護令牌表示的數據的相同安全機制保護。例如,如果用戶有權打開和讀取文件,那么這可以允許用戶獲得允許用戶將文件拷貝到別處的令牌。如果通道被保護以便讀取文件,那么可以經由保護的通道傳遞令牌。如果可以將數據提供給另一個實體, 那么正如可以將數據傳遞到其他實體那樣可以將令牌傳遞到其他實體。接收實體可以使用令牌以獲得數據,正如如果數據實體本身被發(fā)送給接收實體,那么接收實體可以使用數據本身一樣。令牌可能是不可改變的。換言之,如果以任何方式改變令牌,那么它可能不再可用來訪問令牌表示的數據。 在一個實施例中,提供僅僅一個表示數據的令牌。然而,在另一個實施例中,可以提供多個令牌,每個令牌表示數據的部分。在又一個實施例中,數據的部分或者全部可以由多個令牌表示。這些令牌可以封裝在另一個數據結構中或者單獨地提供。在封裝的情況下,當不高級的請求器尋求對數據執(zhí)行操作(例如卸載寫、令牌無效)時,該請求器可以簡單地將數據結構傳遞回數據訪問部件。更高級的請求器210可能能夠在封裝的數據結構中重新布置令牌,與其他令牌分開地使用各個令牌以便執(zhí)行數據操作,或者在傳遞回多個令牌時采取其他動作。在接收到令牌之后,請求器210可以請求邏輯地寫由令牌表示的數據的全部或者部分。在本文中,有時該操作稱為卸載寫。請求器210可以通過與一個或多個偏移和長度一起將令牌發(fā)送給數據訪問部件215而這樣做。為了進行卸載寫,對于每個涉及的令牌而言,可以表示令牌相對偏移以及目的地相對偏移。任一偏移或者兩個偏移可以是隱含的或者明確的。令牌相對偏移可以表示例如相距令牌表示的數據的開始的字節(jié)(或者其他單位)數。目的地相對偏移可以表示相距目的地上的數據的開始的字節(jié)(或者其他單位)數。長度可以表示在偏移處開始拷貝的字節(jié)(或者其他單位)數。數據訪問部件215中的一個或多個可以接收令牌、驗證該令牌表示存儲裝置上的數據,并且如果這樣的話,則依照容納潛在的存儲裝置220的存儲系統(tǒng)的能力邏輯地寫由該令牌表示的數據的部分。容納潛在的存儲裝置220的存儲系統(tǒng)可以包括一個或多個SAN、 專用文件服務器、通用服務器或者其他計算機、網絡電器、適合于實現圖1的計算機110的任何其他設備等等。例如,如果存儲裝置220經由諸如SAN之類的存儲系統(tǒng)容納并且請求器210正請求使用表示SAN上存在的數據的令牌對SAN進行卸載寫,那么SAN可以利用SAN的專有機制以便邏輯地寫數據而無需對數據進行另一次物理拷貝。例如,引用計數或者另一機制可以用來表示數據的邏輯拷貝數。例如,引用計數可以在塊水平下使用,其中可以通過增加塊的引用計數將塊邏輯地復制在SAN上。作為另一個實例,可以經由諸如文件服務器之類的存儲系統(tǒng)容納存儲裝置220,所述存儲系統(tǒng)可以具有在執(zhí)行卸載寫時有用的其他機制,使得卸載寫并不涉及物理地拷貝數據。作為又一個實例,可以經由“啞”存儲系統(tǒng)容納存儲裝置220,所述“啞”存儲系統(tǒng)響應于卸載寫而將數據從該存儲系統(tǒng)的一個位置物理地拷貝到另一個位置。上面的實例并不預期是包括一切的或者詳盡的。事實上,從請求器的觀點來看,存儲系統(tǒng)如何實現與卸載寫相應的數據傳輸可能是不相關的。如前面所指出的,存儲系統(tǒng)的數據傳輸操作可能經過時間延遲。在一些方案中,可能根本不發(fā)生數據傳輸操作。例如,存儲系統(tǒng)可以快速地響應卸載寫已經完成,但是可能接收到在存儲系統(tǒng)實際地開始數據傳輸之前修整潛在的存儲裝置的命令。在這種情況下,可以取消存儲系統(tǒng)處的數據傳輸操作。請求器210可以與一個或多個其他實體共享令牌。例如,請求器可以將令牌發(fā)送給其上容納請求器210的裝置外部的裝置上容納的應用。該應用然后可以以請求器210可能具有的相同方式使用令牌以便寫數據。圖5中示出了該方案。轉到圖5,使用數據訪問部件215,請求器210請求并且獲得表示存儲裝置220上的數據的令牌。請求器210然后將該令牌傳遞給請求器510。請求器510于是可以通過經由數據訪問部件515發(fā)送令牌而寫數據。數據訪問部件215和515中的一個或多個可以相同。例如,如果在相同的裝置上容納請求器210和510,那么所有數據訪問部件215和515對于這兩個請求器而言可以是相同的。如果在不同的裝置上容納請求器210和510,那么一些部件可以相同(例如實現容納存儲裝置220或者提供對存儲裝置220的訪問的裝置的部件),而其他部件可以不同(例如不同裝置上的部件)。返回圖2,在一個實施例中,數據訪問部件215中的一個或多個可以包括令牌管理器(例如令牌管理器225)或者向該令牌管理器查閱。令牌管理器可以包括一個或多個部件, 所述部件可以產生或者獲得表示存儲裝置220上的數據的令牌,將這些令牌提供給授權的請求器,響應使用令牌寫數據的請求,并且確定何時使令牌無效。如下文中更詳細地描述的,令牌管理器可以跨多個設備而分布,使得在邏輯上相同的令牌管理器用來既在卸載讀中獲得令牌,又在卸載寫中使用該令牌。在這種情況下,令牌管理器的分布式部件可以根據需要彼此通信以便獲得關于令牌的信息。在一個實施例中,令牌管理器可以產生令牌,將令牌存儲到將令牌與存儲裝置220上的數據關聯的令牌存儲裝置中,并且驗證在令牌存儲裝置中找到從請求器接收的令牌。令牌管理器225可以將令牌與識別可以在何處找到數據的數據關聯。該數據也可以在令牌管理器225跨多個設備而分布的情況下使用以便從令牌管理器225的分布式部件獲得令牌信息(令牌表示什么數據,令牌是否到期,其他數據等等)。令牌管理器225也可以將令牌與數據的長度關聯,以便部分地確保在與令牌關聯的數據末端過去之后請求器不能夠獲得數據。如果存儲裝置220上的數據被改變或刪除,令牌管理器225可以根據令牌管理器 225如何配置而采取各種動作。例如,如果被配置成保留令牌表示的數據,那么令牌管理器 225可以確保維持令牌產生時存在的數據的拷貝。一些存儲系統(tǒng)可以具有用于甚至在數據改變時維持這樣的拷貝的復雜的機制。在這種情況下,令牌管理器225可以指示存儲系統(tǒng) (存儲裝置220可以是該存儲系統(tǒng)的一部分)維持原始數據的拷貝達一定時間段或者直到另有別的指示。在其他情況下,存儲系統(tǒng)不可以實現用于維持原始數據的拷貝的機制。在這種情
1況下,令牌管理器225或者數據訪問部件215中的另一個可以維持原始數據的拷貝達一定時間段或者直到另有別的指示。應當指出的是,維持原始數據的拷貝可能涉及維持邏輯拷貝而不是原始數據的復制拷貝。邏輯拷貝包括可以用來創(chuàng)建準確的拷貝的數據。例如,邏輯拷貝可以包括改變日志以及數據的當前狀態(tài)。通過逆當前狀態(tài)地應用改變日志,可以獲得原始的拷貝。作為另一個實例,寫時拷貝技術可以用來維持可以用來重建原始數據的邏輯拷貝。上面的實例并不預期是限制性的,因為本領域技術人員將會理解的是,存在其中可以在不脫離本文描述的主題的各方面的精神或范圍的情況下實現邏輯拷貝的許多方式。令牌管理器225可以被配置成在數據改變時使令牌無效。在這種情況下,結合允許改變與令牌關聯的數據,令牌管理器225可以指示令牌不再有效。這可以例如通過在令牌存儲裝置中刪除令牌或者將令牌標記為無效而完成。如果令牌管理器225由存儲系統(tǒng)的部件實現,那么可以將一個或多個故障代碼傳遞給一個或多個其他數據訪問部件并且傳遞給請求器210。令牌管理器225可以管理令牌的到期。例如,令牌可以具有存活時間。在存活時間到期之后,可以使令牌無效。在另一個實施例中,令牌可以根據各種因素而保持有效,這些因素包括
1.存儲約束。維持數據的原始拷貝可能消耗超過閾值的空間。在這一點上,可以使一個或多個令牌無效以便收回該空間。2.存儲器約束。通過維持多個令牌而消耗的存儲器可能超過閾值。在這一點上, 可以使一個或多個令牌無效以便收回存儲器空間。3.令牌數。系統(tǒng)可以允許設定數量的活動令牌。在達到最大數量的令牌之后,令牌管理器可以在提供另一個令牌之前使現有的令牌無效。4.輸入/輸出(I/O)開銷。具有太多令牌的IO開銷可能使得令牌管理器可以使一個或多個令牌無效以便降低IO開銷。5. IO成本/延遲??梢曰趶脑吹侥康牡氐臄祿鬏數某杀?延遲而使令牌無效。例如,如果成本超過閾值,那么可以使令牌無效。類似地,如果延遲超過閾值,那么可以使令牌無效。6.優(yōu)先級。特定的令牌具有相對于其他令牌的優(yōu)先級。如果要使令牌無效,那么可以使較低優(yōu)先級的令牌無效??梢曰诟鞣N策略(例如用途、關于令牌的明確的或隱含的知識、請求器的請求、其他策略等等)調節(jié)令牌的優(yōu)先級。7.存儲提供器請求。存儲提供器(例如SAN)可以請求減少活動令牌的數量。作為響應,令牌管理器可以適當地使一個或多個令牌無效。可以在基于令牌的一個或多個卸載寫成功之前的任何時間或者甚至在其之后的任何時間使令牌無效。在一個實施例中,令牌僅僅包括表示數據的值。在另一個實施例中,令牌也可以包括其他數據或者與其他數據關聯。該其他數據可以包括例如可以用來確定可以從其獲得數據的存儲設備、存儲系統(tǒng)或者其他實體的數據,網絡存儲系統(tǒng)的識別信息,路由數據和提示,關于訪問控制機制的信息,關于令牌表示的數據的校驗和,數據的類型(例如系統(tǒng)、元數據、數據庫、虛擬硬盤驅動器等等),數據的訪問模式(例如順序的、隨機的)、使用模式(例如經常、有時、很少被訪問等等),數據的希望的對齊,卸載寫期間用于優(yōu)化數據的放置(例如在具有不同類型的存儲設備的混合環(huán)境中)的數據等等。上面的實例并不預期是包括一切的或者未遺漏可能包含于令牌中或者與令牌關聯的其他數據。事實上,基于本文的教導,本領域技術人員可以認識到可以在不脫離本文描述的主題的各方面的精神或范圍的情況下利用令牌傳遞的其他數據。當遇到文件碎片邊界、RAID條紋邊界、卷跨越邊界等等時,對存儲裝置的讀/寫請求可以在內部導致將對存儲堆棧的較低層的讀請求的分解。該分解可能發(fā)生,是因為源/ 目的地跨該分解而不同,或者偏移轉化跨該分解而不同。該分解可以由分解器通過不完成需要分解的請求,直到得到的分解的IO全部完成而隱藏。這種將分解隱藏到存儲堆棧中的分解層內是便利的,因為存儲堆棧中的上面的層無需知道該分解。在一個實施例中,利用本文描述的基于令牌的方法,分解可以是可見的。 特別地,如果分解由于源/目的地跨分解而不同的原因發(fā)生,那么(下文描述的)卸載提供器可以跨分解而不同。例如,在數據被復制(或者甚至不被復制)的情況下,可以存在多個提供對于數據的訪問的卸載提供器。作為另一個實例,可以存在多個面朝SAN的文件服務器。 除了 SAN之外,服務器或者數據訪問部件中的一個或多個可以被認為是卸載提供器。卸載提供器是提供對于與存儲裝置——源或目的地關聯的數據的訪問的邏輯實體(可能地包括跨多個設備散布的多個部件)。訪問在本文中使用時可以包括讀數據、寫數據、刪除數據、更新數據、包括以上兩個或更多的組合等等。邏輯上,卸載提供器能夠執(zhí)行卸載讀或寫。物理上,卸載提供器可以包括數據訪問部件215中的一個或多個并且也可以包括令牌管理器225。卸載提供器可以傳輸來自源存儲裝置的數據,將數據寫到目的地存儲裝置,并且維持在接收到與數據關聯的令牌時提供的數據。在一些實現方式中,卸載提供器可以指示在將數據邏輯地寫到目的地存儲裝置之后完成卸載寫命令。此外,卸載提供器可以指示完成卸載寫命令,但是將物理地寫與卸載寫關聯的數據推遲到方便的時候。當分解數據時,卸載提供器可以提供對于請求的數據的一部分的訪問,但是不提供對于請求的數據的另一部分的訪問。在這種情況下,可以為分解點之前的部分和分解點之后的部分提供單獨的令牌。存儲堆棧的層中或者卸載提供器中的其他依賴于實現方式的約束可能出于其他原因導致令牌不能跨越分解范圍。由于請求器可以看見從讀返回的令牌,在該實施例中,分解可以對于請求器可見。以下是處理分解的兩個示例性方法
1.讀請求可以返回超過一個令牌,其中每個令牌與請求的數據的不同范圍關聯。如先前所提到的,這些多個令牌可以在單個數據結構中返回。當請求器尋求寫數據時,它可以傳遞整個數據結構,或者如果以高級的方式起作用的話,僅僅傳遞數據結構中的一個或多個令牌。2.如果返回單個令牌,那么該令牌可以表示原始請求的數據的縮短的范圍。請求器于是可以使用該令牌以便在縮短范圍的長度極限內執(zhí)行一個或多個卸載寫。當請求卸載寫時,也可以截斷請求的寫的長度。為了進行讀和寫,請求器可以做出對于開始于先前的請求未處理的偏移處的另一范圍的請求。通過這種方式,請求器可以在請求器的整個需要的范圍內工作。
上面的方法僅僅是示例性的?;诒疚牡慕虒?,本領域技術人員可以認識到可以在不脫離本文描述的主題的各方面的精神或范圍的情況下利用的用于處理分解的其他方法。在相同的堆棧中可以存在多個卸載提供器。對于從卸載讀請求返回的給定范圍 (在范圍截斷的情況下,可能地為唯一的范圍),可以存在愿意提供令牌的多個卸載提供器。 在一個實施例中,這些用于相同數據的多個令牌可以被返回給請求器并且在卸載寫中由該請求器使用。例如,請求器可以選擇這些令牌之一以用于卸載寫中。通過僅僅將一個令牌傳遞給卸載提供器,請求器可以以此方式確定用來從中獲得數據的源卸載提供器。在另一個實例中,請求器可以將所述令牌中的兩個或更多個傳遞給目的地卸載提供器。該目的地卸載提供器于是可以選擇與令牌關聯的從中獲得令牌表示的數據的源卸載提供器中的一個或多個。在另一個實例中,可以返回多個令牌以便允許批量數據的卸載拷貝以及除了批量數據之外的其他輔助數據的卸載拷貝。輔助數據的一個實例是關于數據的元數據。例如, 文件系統(tǒng)卸載提供器可以規(guī)定卸載寫請求包括在目的地堆棧上成功地使用的兩個令牌(例如主要數據令牌和元數據令牌)以便總體卸載拷貝成功。形成對照的是,用于在堆棧中支持多個批量數據卸載提供器的目的的多個令牌可以要求僅僅一個令牌用在目的地堆棧上以便卸載寫成功。當多個卸載提供器可用來將數據從源傳輸到目的地時,請求器可能能夠選擇可用卸載提供器中的一個或多個特定的卸載提供器。在一個實施例中,這可能涉及使用N跳命令,其中“N跳”表示跳過頭N個卸載提供器。在另一個實施例中,可能存在用來識別特定卸載提供器的另一種機制(例如卸載提供器的ID)。在又一個實施例中,選擇許多令牌之一可以用來選擇卸載提供器以便拷貝數據,因為一些卸載提供器可能不能夠拷貝令牌表示的數據,而其他卸載提供器可能能夠這樣做。在其中超過一個卸載提供器可用來拷貝令牌表示的數據的一些實施例中,可以自動地選擇第一個、最后一個、隨機的、最少加載的、最有效的、最低延遲的或者以其他方式確定的卸載提供器。令牌可以表示開始于硬盤或者其他存儲介質的特定扇區(qū)的數據。令牌表示的數據可以是扇區(qū)的確切的整數倍,但是在許多情況下不會這樣。如果令牌在文件操作中用于其長度末端之后的數據,那么返回的數據可能為空、0或者無數據的某種其他指示。因此,如果請求器試圖在令牌表示的數據末端之后拷貝,那么請求器不可能通過該機制獲得物理上正好駐留在數據末端之后的數據。令牌可以用來卸載大文件的補零。例如,令牌可以表示空、0或者另一個“無數據” 文件。通過在卸載寫中使用這種令牌,該令牌可以用來初始化文件或者其他數據。圖3為大體表示其中由容納存儲裝置的設備容納令牌管理器的系統(tǒng)的部件的示例性布置的框圖。如圖所示,系統(tǒng)305包括圖2的請求器210和存儲裝置220。圖3的數據訪問部件215分為駐留在容納請求器210的設備330上的數據訪問部件310和駐留在容納存儲裝置220的設備335上的數據訪問部件315。在其中存儲裝置220在設備335的外部的另一個實施例中,可以存在提供對于存儲裝置220的訪問的附加的數據訪問部件。
設備335可以被認為是卸載提供器,因為該設備包括提供令牌以及給定令牌時寫數據所需的部件。令牌管理器320可以如先前所述地產生令牌和使令牌有效。例如,當請求器210 要求用于存儲裝置220上的數據的令牌時,令牌管理器320可以產生表示數據的令牌。該令牌然后可以經由數據訪問部件310和315發(fā)送回請求器210。結合產生令牌,令牌管理器320可以在令牌存儲裝置325中創(chuàng)建條目。該條目可以將令牌與數據關聯,該數據指示在存儲裝置220上的何處可以找到由令牌表示的數據。該條目也可以包括管理令牌時使用的其他數據,例如何時使令牌無效、令牌的存活時間、其他數據等等。當請求器210或者任何其他實體將令牌提供給令牌管理器320時,令牌管理器可以在令牌存儲裝置325中執(zhí)行查找以便確定令牌是否存在。如果令牌存在且有效,那么令牌管理器320可以將位置信息提供給數據訪問部件315,使得這些部件可以根據請求邏輯地寫數據。在多個物理設備提供對于存儲裝置220的訪問的情況下,令牌管理器320和/或令牌存儲裝置325可以具有由這些物理設備中的一個或多個容納的部件。例如,令牌管理器320可以跨設備復制令牌狀態(tài),可以具有其他令牌部件查閱的集中式令牌部件,可以具有其中在按需基礎上從對等令牌管理器提供令牌狀態(tài)的分布式系統(tǒng)等等。邏輯上,令牌管理器320管理令牌。物理上,令牌管理器320可以由單個設備容納或者可以具有分布在兩個或者更多設備上的部件。令牌管理器320可以在與容納存儲裝置 220的任何設備分開的設備上被容納。例如,令牌管理器320可以作為數據訪問部件315可以調用來產生令牌和使令牌有效以及提供與其關聯的位置信息的服務而存在。在一個實施例中,令牌存儲裝置325可以存儲在存儲裝置220上。在另一個實施例中,令牌存儲裝置325可以與存儲裝置220分開。圖4為大體表示依照本文描述的主題的各方面操作的系統(tǒng)的部件的另一個示例性布置的框圖。如圖所示,裝置405容納請求器210以及數據訪問部件310和虛擬化層430。 數據訪問部件310以堆疊的方式布置,并且包含包括部件415、420、425和其他部件(未示出)的N個部件。數量N是可變的并且可以從裝置到裝置變化。請求器210經由應用編程接口(API)410訪問數據訪問部件310中的一個或多個。 虛擬化層430指示請求器或者任何所述數據訪問部件可以駐留在虛擬環(huán)境中。虛擬環(huán)境是由計算機仿真或模擬的環(huán)境。虛擬環(huán)境可以仿真或模擬物理機器、操作系統(tǒng)、一個或多個接口的集合、上面所述的部分、上面所述的組合等等。當仿真或模擬機器時,該機器有時稱為虛擬機。虛擬機是對于在虛擬機上執(zhí)行的軟件而言看起來為物理機器的機器。軟件可以將文件保存在諸如虛擬硬盤驅動器、虛擬軟盤等等之類的虛擬存儲設備中,可以從虛擬⑶讀取文件,可以經由虛擬網絡適配器通信等等??梢岳每赡茉谘b置405本地或者遠程的物理介質備份虛擬硬盤驅動器、軟盤、 CD或其他虛擬存儲設備中的文件。虛擬化層430可以將數據布置在物理介質上并且以這樣的方式將數據提供給虛擬環(huán)境使得訪問數據的一個或多個部件不知道它們正在虛擬環(huán)境中訪問數據??梢栽趩蝹€計算機上容納超過一個虛擬環(huán)境。換言之,兩個或更多虛擬環(huán)境可以在單個物理計算機上執(zhí)行。對于在每個虛擬環(huán)境中執(zhí)行的軟件而言,虛擬環(huán)境看起來具有其自己的資源(例如硬件),即使單個計算機上容納的虛擬環(huán)境可能與彼此以及與主機操作系統(tǒng)物理地共享一個或多個物理設備。源存儲裝置435表示請求器210從中請求令牌的存儲裝置。目的地存儲裝置440 表示請求器請求使用令牌向其寫數據的存儲裝置。在實現方式中,源存儲裝置435和目的地存儲裝置440可以實現為單個存儲裝置(例如具有多個卷的SAN)或者兩個或更多存儲裝置。在源存儲裝置435不支持維持原始數據的拷貝的情況下,部件415-425中的一個或多個可以操作來在令牌的壽命期間維持原始數據的拷貝。當源存儲裝置435和目的地存儲裝置440實現為兩個單獨的存儲裝置時,附加的部件(例如存儲服務器或其他部件)可以將數據從源存儲裝置435傳輸到目的地存儲裝置 440,而不涉及裝置405。然而,在一個實施例中,甚至當源存儲裝置435和目的地存儲裝置 440實現為兩個單獨的存儲裝置時,數據訪問部件310中的一個或多個也可以用來將數據從源存儲裝置435拷貝到目的地存儲裝置440。請求器210可能知道或者不知道、被通知或者未被通知如何執(zhí)行潛在的拷貝。在請求器210與源存儲裝置435和/或目的地存儲裝置440之間可以存在多個路徑。在一個實施例中,本文描述的令牌方法與采用的路徑無關,只要指示表示的數據(例如經由令牌管理器而可用)的信息可用。換言之,如果請求器210具有經過虛擬化層430的路徑、不經過虛擬化層430的網絡路徑、SMB路徑或者到源或目的地存儲裝置的任何其他路徑,那么請求器210可以使用這些路徑中的一個或多個以便發(fā)出到目的地存儲裝置440的卸載寫。換言之,采用的到源存儲裝置的路徑以及采用的到目的地存儲裝置的路徑可以相同或者不同。在卸載寫中,令牌與一個或多個偏移和數據長度一起傳遞以便寫到目的地存儲裝置440。數據訪問部件(不一定為數據訪問部件310之一)接收令牌,使用該令牌以獲得來自令牌管理器的位置信息,并且可以開始將數據從源存儲裝置435邏輯地寫到目的地存儲裝置440。部件415-425中的一個或多個或者另一個部件(未示出)可以實現令牌管理器。以下是可以與本文描述的主題的各方面一起使用的一些數據結構的一些示例性定義
#define FSCTL_0FFL0AD_READ CTL_C0DE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_READ_ACCESS) //153 用來表示卸載讀 typedef struct _FSCTL_0FFL0AD_READ_INPUT { ULONG Size; ULONG Flags;
ULONG TokenTimeToLive; // (例如以毫秒為單位) ULONG Reserved; UL0NGL0NG FileOffset; UL0NGL0NG CopyLength; } FSCTL_0FFL0AD_READ_INPUT, *PFSCTL_OFFLOAD_READ_INPUT; typedef struct _FSCTL_0FFL0AD_READ_0UTPUT {ULONG Size; ULONG Flags;
UL0NGL0NG TransferLength; UCHAR Token [512] ; //可以大于或小于512 } FSCTL_0FFL0AD_READ_0UTPUT, *PFSCTL_0FFL0AD_READ_0UTPUT; #define FSCTL_0FFL0AD_WRITE CTL_C0DE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_WRITE_ACCESS) // 154 用來表示卸載寫 typedef struct _FSCTL_OFFLOAD_WRITE_INPUT { ULONG Size; ULONG Flags; UL0NGL0NG FileOffset; UL0NGL0NG CopyLength; ULONGLONG TransferOffset; UCHAR Token[512]; } FSCTL_OFFLOAD_WRITE_INPUT, *PFSCTL_OFFLOAD_WRITE_INPUT; typedef struct _FSCTL_OFFLOAD_WRITE_OUTPUT { ULONG Size; ULONG Flags;
ULONGLONG Lengthffritten; } FSCTL_OFFLOAD_WRITE_OUTPUT, *PFSCTL_OFFLOAD_WRITE_OUTPUT;
Il當“或”入動作時,該標志表示給定動作是非破壞性的 Il如果設置了該標志,那么不理解該動作的存儲堆棧部件 Il應當轉發(fā)給定請求
#define DeviceDsmActionFlag—NonDestructive 0x80000000 #define IsDsmActionNonDestructive(_Action) ((BOOLEAN)((_Action & DeviceDsmActionFlag—NonDestructive) != 0)) typedef ULONG DEVICE—DATA—MANAGEMENT—SET—ACTION;
#define DeviceDsmAction_OffIoadRead(3 | DeviceDsmActionFlag
NonDestructive)
#define DeviceDsmAction OffloadWrite 4
Il跨所有動作的全局標志
typedef struct _DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset ;// 例如以字節(jié)為單位
ULONGLONG LengthInBytes; // 例如多個扇區(qū)大小 } DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE;用于實現本文描述的主題的各方面的示例性IOCTL數據結構可以如下定義
// 用于 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 的輸入結構 Il 1. ParameterBlockOffset 或 ParameterBlockLength 白勺值為 0,表示
Il 參數塊不存在
Il 2. DataSetRangesOffset 或 DataSetRangesLength 的值為 O,表示 Il DataSetRanges ±夬不存在。如果DataktRanges ±夬存在,那么 // 它包含鄰近的DEVICE_DATA_SET_RANGE結構 Il 3. 緩沖器的總大小至少為
//sizeof (DEVICE_MANAGE_DATA_SET_ATTRIBUTES)+ParameterBlockLength+
DataSetRangesLength
typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES {
丨結構的大小
DEVICE_MANAGE_DATA_SET_ATTRIBUTES Action;
Il跨所有動作的全局標志 Il與相應結構對齊的對齊
ULONG
DEVICE DATA MANAGEMENT SET ACTION
ULONG ULONG
Flags; ParameterBlockOffset;
ULONG
ULONG
ULONG
ParameterBlockLength;
aSetRangesOffset;
DataSetRangesLength;
Il ο表示參數塊 //不存在 //對齊到 // DEVICE_DATA_SET_RANGE V結構對齊
‘O 表不 DataSetRanges 塊不存在
} DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES;
Il
H用于拷貝卸載動作的參數結構定義
2個步驟的卸載拷貝接口操作卸載讀和卸載寫
用于OffloadRead動作的輸入被設置成具有DSM結構中的范圍 OffloadRead的輸出參數為目標返回的令牌, 其將識別目標攝取的范圍的“時間點”快照令牌的格式可以對于請求器是不透明的并且特定于目標
注意512的令牌長度是示例性的。OffloadCopy的SCSI接口可以允許Il可協(xié)商的大小??梢詾榇笮】勺兊牧钆苿?chuàng)建新的動作 #defineDSM_0FFL0AD_MAX_T0KEN_LENGTH 512
Il保持為ULONG的倍數 typedef struct _DEVICE_DSM_OFFLOAD_READ_PARAMETERS { ULONGFlags;
ULONGTimeToLive; //令牌存活時間(例如以毫秒為單位);可以
//由請求器請求 } DEVICE_DSM_OFFLOAD_READ_PARAMETERS, *PDEVICE_DSM_OFFLOAD_READ_PARAMETERS; typedef struct _DEVICE_DSM_0FFL0AD_WRITE_PARAMETERS { ULONG Flags;
ULONG Reserved;//保留以供未來使用
UL0NGL0NG TokenOffset; //從令牌表示的數據拷貝的起始偏移 UCHAR Token [DSM_0FFL0AD_MAX_T0KEN_LENGTH] ;// 令牌
} DEVICE_DSM_OFFLOAD_WRITE_PARAMETERS, *PDEVICE_DSM_0FFL0AD_WRITE_PARAMETERS; typedef struct _ST0RAGE_0FFL0AD_READ_0UTPUT { ULONGOffloadReadFlags; // 出站標志
ULONGReserved;
UL0NGL0NG LengthProtected ;
數據長度
從最低MartingOffset開始的令牌表示的
ULONGTokenLength; //以字節(jié)為單位的令牌長度
UCHARToken[DSM_0FFL0AD_MAX_T0KEN_LENGTH];
Il成功創(chuàng)建的令牌 } ST0RAGE_0FFL0AD_READ_0UTPUT, *PST0RAGE_0FFL0AD_READ_0UTPUT;
Il
丨丨 ST0RAGE_0FFL0AD_READ_0UTPUT 標志定義
Il
#define ST0RAGE_0FFL0AD_READ_RANGE_TRUNCATED (0x0001) typedef struct _ST0RAGE_0FFL0AD_WRITE_0UTPUT {
ULONGOffloadffriteFlags; // 輸出標志
}
ULONGReserved;
UL0NGL0NG LengthCopied;
STORAGE OFFLOAD WRITE OUTPUT,
Il保留以供未來使用丨輸出參數從令牌表示的數據的開始拷貝的內容的長度
*PST0RAGE_0FFL0AD_WRITE_0UTPUT;
Il
Il ST0RAGE_0FFL0AD_WRITE_0UTPUT 標志定義-用在 OffloadWriteFlags 掩碼中Il執(zhí)行寫,但是在截斷的范圍上
#define STORAGE_OFFLOAD_WRITE_RANGE_TRUNCATED (0x0001)
Il
H用于雙向動作的DSM輸出結構
//
//輸出參數塊位于得到的緩沖器的包含于OutputBlockOffset字段中的偏移處 //偏移從緩沖器的開始計算,
//并且被調用者將依照特定于動作的結構模板的要求對齊它
//
//實例對于OffloadRead動作,為了獲得輸出結構的指針,調用器
//應當
//
// PST0RAGE_0FFL0AD_READ_0UTPUT pReadOut = // (PST0RAGE_0FFL0AD_READ_0UTPUT) ((UCHAR pOutputBuffer + // ((PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT)pOutputBuffer) // ->0utputBlock0ffset)
typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT { ULONG Size;
DEVICE DATA MANAGEMENT SET ACTION Action;
動作
結構的大小
ULONG ULONG
ULONG ULONG
ULONG ULONG
ULONG
Il請求和執(zhí)行的動作 Flags;//用于DSM動作的公共輸出標志
OperationStatus;//操作狀態(tài);用于卸載動作
// (用于更豐富語義的占位符,比如PENDING) ExtendedError;//擴展的錯誤信息
TargetDetailedError; //特定于目標的錯誤;可以用于卸載
ReservedStatus; OutputBlockOffset;
OutputBlockLength;
Il (SCSI感測代碼)
V保留字段
1對齊到相應結構對齊的特定動作
O表示輸出參數塊不存在
} DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT。
圖6-8為大體上表示依照本文描述的主題的各方面可能發(fā)生的示例性動作的流程圖。為了解釋簡單起見,結合圖6-8描述的方法被繪出且描述為一系列動作。應當理解和意識到的是,本文描述的主題的各方面不受限于所示的動作和/或動作順序。在一個實施例中,這些動作以下文描述的順序出現。然而,在其他實施例中,這些動作可以并行地、以另一順序地出現,和/或具有本文未給出和描述的其他動作。此外,不是所有示出的動作可能被需要用來實現依照本文描述的主題的各方面的方法。此外,本領域技術人員將理解和認識到的是,該方法可替換地可以經由狀態(tài)圖表示為一系列相互聯系的狀態(tài)或者表示為事件。轉向圖6,在框650處,動作開始。在框610處,接收表示存儲裝置的數據的請求。 該請求與識別存儲裝置的部分的描述(例如位置和長度)一起傳遞。在這里,措詞“部分”可以是存儲裝置的全部或者少于全部。例如,參照圖2,請求器210可以請求用于存儲裝置220 上的數據的令牌。在進行該請求時,請求器210可以與長度一起發(fā)送數據的位置(例如文件名、打開文件的句柄、到文件的物理偏移、卷或原始盤等等)。在框615處,響應于該請求,接收令牌,該令牌表示當該令牌綁定到數據時邏輯地存儲在存儲裝置的部分中的數據。如先前所提到的,令牌可以表示比請求的更少的數據。例如,參照圖2,數據訪問部件215中的一個或多個可以將表示請求的數據或者其子集的令牌返回給請求器210。該令牌可以是與令牌表示的數據的大小無關的大小(例如特定的比特數或字節(jié)數)。令牌可以在數據結構中與其他令牌一起接收,其中數據結構中的每個令牌與數據的不同部分關聯,或者兩個或更多的令牌與數據的相同部分關聯。接收令牌可以伴隨令牌表示作為請求的數據的子集的數據的指示。該指示可以采取例如令牌表示的數據的長度的形式。在框620處,提供令牌以執(zhí)行卸載寫。該令牌可以與指示經由卸載提供器邏輯地寫數據的全部還是部分的信息一起提供。該信息可以包括例如目的地相對偏移、令牌相對偏移和長度。令牌相對偏移0以及等于令牌表示的數據的整個長度的長度可以指示拷貝數據的全部,而長度小于數據的整個長度的任何偏移可以指示拷貝少于整個數據。例如,參照圖2,請求器可以將令牌傳遞給數據訪問部件215,數據訪問部件可以將令牌傳遞給令牌管理器225以便獲得表示的數據的位置。在令牌管理器225為提供對于存儲裝置220的訪問的存儲系統(tǒng)的一部分(例如在SAN中)的情況下,可以將令牌提供給SAN 的數據訪問部件,其然后可以使用令牌以識別數據并且邏輯地寫由請求指明的數據。如先前所提到的,卸載提供器可以在發(fā)送請求的裝置的外部。此外,一旦卸載提供器接收到請求,卸載提供器可以與和發(fā)送請求的裝置的任何部件的附加交互無關地邏輯地寫數據。例如,參照圖3,一旦令牌和寫請求到達數據訪問部件315,那么設備335的部件可以根據請求邏輯地寫數據而無需來自設備330的任何附加幫助。在框625處,可以執(zhí)行其他動作(如果有的話)。應當指出的是,在框630處,在產生令牌后的任何時間,請求器(或者數據訪問部件中的另一個)可以明確地請求使令牌無效。 在一個實現方式中,如果在拷貝操作中間期間發(fā)送該請求,那么可以允許拷貝繼續(xù)到完成。 在另一個實現方式中,可以中止拷貝,可以引發(fā)錯誤,或者可以發(fā)生其他動作。轉向圖7,在框705處,動作開始。在框710處,接收表示存儲裝置的數據的請求。 該請求與識別數據所位于的存儲裝置的部分的描述一起傳遞??梢栽诖鎯^(qū)域網絡的部件處或者在另一個數據訪問部件處接收該請求。例如,參照圖3,數據訪問部件315中的一個或多個可以與識別存儲裝置220上的數據的偏移、長度、邏輯單位數、文件句柄等等一起接收對于令牌的請求。在框715處,產生令牌。產生的令牌可以表示邏輯地存儲(在例如圖3的存儲裝置220中)的數據。如先前所提到的,該數據可以是不改變的,或者根據實現方式被允許在令牌有效期間改變。如先前所表明的,該令牌可以表示請求的數據的子集。例如,參照圖3,令牌管理器320可以產生表示請求器210請求的存儲裝置220上的數據的令牌。在框720處,經由數據結構將令牌與表示的數據關聯。例如,參照圖3,令牌管理器 320可以在令牌存儲裝置325中存儲關聯,其將產生的令牌與表示的數據關聯。在框725處,將令牌提供給請求器。例如,參照圖3,令牌管理器或者數據訪問部件315之一可以將令牌提供給數據訪問部件310以便提供給請求器210。可以利用指示令牌表示的數據的大小的長度返回令牌。在框730處,可以執(zhí)行其他動作(如果有的話)。應當指出的是,在框735處,在產生令牌之后的任何時間,令牌管理器可以根據先前描述的各種因素使令牌無效。在一個實現方式中,如果在影響數據的寫操作期間使令牌無效,那么可以允許所述寫繼續(xù)到完成。在另一個實現方式中,可以中止寫,可以引發(fā)錯誤,或者可以發(fā)生其他動作。圖8為大體上表示依照本文描述的主題的各方面的當在卸載提供器處接收卸載寫時可能發(fā)生的示例性動作的框圖。在框805處,動作開始。在框810處,接收令牌。該令牌可以與指示是否邏輯地寫令牌表示的數據的全部或一些的數據一起接收。例如,參照圖3,數據訪問部件315之一可以接收來自圖3的數據訪問部件310之一的令牌。在框815處,就令牌是否有效做出確定。例如,參照圖3,令牌管理器320可以通過查閱令牌存儲裝置325而確定接收的令牌是否有效。如果令牌有效,那么在框820處動作繼續(xù);否則,在框817處請求可能被放棄并且動作繼續(xù)。在框817處,請求被放棄。例如,參照圖3,數據訪問部件315可以指示拷貝被放棄。在框820處,識別卸載拷貝請求的數據。例如,參照圖3,令牌管理器320可以查閱令牌存儲裝置325以便獲得與令牌關聯的數據的位置或者其他標識符。令牌可以包括指示容納令牌表示的數據的裝置的數據或者與該數據關聯。在框825處,執(zhí)行令牌表示的數據的邏輯寫。例如,參照圖3,設備335可以邏輯地寫令牌表示的數據。在框830處,可以執(zhí)行其他動作(如果有的話)。由前面的詳細描述可見,已經與卸載讀和寫有關地描述了各方面。盡管本文描述的主題的各方面容易經受各種的修改和可替換的構造,其特定的被說明的實施例在附圖中示出并且在上文中詳細地進行了描述。然而,應當理解的是,不存在將要求保護的主題的各方面限制為所公開的特定形式的意圖,而是相反地,意圖在于覆蓋落入本文描述的主題的各種方面的精神和范圍內的所有的修改、可替換的構造以及等效物。
權利要求
1.一種至少部分地由計算機實現的方法,該方法包括發(fā)送(610)用于表示存儲裝置的第一數據的請求,該請求與識別存儲裝置的部分的描述一起傳遞;響應于請求,接收(615)表示邏輯地存儲在存儲裝置的該部分中的第二數據的令牌,第二數據為第一數據的子集,潛在地為第一數據的真子集;以及與指示經由卸載提供器邏輯地寫第三數據的信息一起提供(620)令牌,所述卸載提供器可操作以使用令牌以便至少定位第三數據,該第三數據為第二數據的子集,潛在地為第二數據的真子集。
2.權利要求1的方法,其中發(fā)送包含存儲裝置的部分的描述的請求包括發(fā)送偏移和長度,該偏移表示第一數據在存儲裝置中的位置,該長度表示第一數據的大小。
3.權利要求1的方法,其中接收令牌包括接收當第二數據在令牌綁定到第二數據時存在的時候可用來獲得第二數據的數量、可由卸載提供器用來識別第二數據的數量、通過隨機或偽隨機機制產生的數量。
4.權利要求1的方法,其中接收令牌包括與數據結構中的其他令牌一起接收所述令牌,數據結構中的每個令牌可用來當第二數據的不同部分在令牌綁定到該不同部分時存在的時候獲得該不同部分。
5.權利要求1的方法,進一步包括接收一個或多個其他令牌,其中每一個令牌也表示第二數據,并且進一步包括與提供所述令牌一起提供所述其他令牌中的一個或多個。
6.一種具有計算機可執(zhí)行指令的計算機存儲介質,所述指令在被執(zhí)行時執(zhí)行動作,所述動作包括從請求器接收(710)表示邏輯地存儲到存儲裝置中的第一數據的請求,該請求與識別第一數據所位于的存儲裝置的部分的描述一起傳遞;產生(715)表示邏輯地存儲到存儲裝置的該部分中的第二數據的令牌,第二數據為第一數據的子集,潛在地為第一數據的真子集;經由數據結構將令牌與第二數據關聯(720),該令牌可用來當第二數據在令牌綁定到第二數據時存在的時候獲得第二數據;以及將令牌提供(725)給請求器。
7.權利要求6的計算機存儲介質,進一步包括與指示是否寫第二數據的全部或一些的第三數據一起接收令牌;確定令牌是否有效;如果令牌無效,那么放棄所述請求。
8.權利要求6的計算機存儲介質,其中接收表示邏輯地存儲到存儲裝置中的第一數據的請求包括在存儲區(qū)域網絡設備的數據訪問部件處接收該請求,其中產生表示第二數據的令牌包括通過存儲區(qū)域網絡設備的部件產生值,并且其中經由數據結構將令牌與第二數據關聯包括將條目置于表中,該條目包括當第二數據在于數據訪問部件處接收到請求之時或者之后以及在將令牌返回請求器之時或者之前存在時第二數據的標識符和令牌。
9.權利要求6的計算機存儲介質,進一步包括接收改變第一數據的請求以及響應于此使令牌無效。
10.權利要求6的計算機存儲介質,進一步包括基于存儲器約束、寫活動、盤約束、網絡帶寬約束、延遲約束和存活時間中的一個或多個使令牌無效。
11.權利要求6的計算機存儲介質,進一步包括接收改變第一數據的請求和響應于此做出改變以及當第二數據在令牌綁定到第二數據時存在的時候維持第二數據的邏輯拷貝。
12.計算環(huán)境中的系統(tǒng),包括請求器(210),其可操作來發(fā)送表示存儲裝置的第一數據的請求,該請求器進一步可操作來接收表示作為第一數據的子集、潛在地作為第一數據的真子集的第二數據的令牌, 該請求器進一步可操作來與指示邏輯地寫第二數據的全部或部分的第三數據一起提供令牌;令牌管理器(225),其可操作來產生令牌并且經由數據結構將令牌與第二數據關聯;以及卸載提供器(215),其可操作來與第三數據一起接收令牌,該卸載提供器進一步可操作來查閱令牌管理器以便確定令牌是否有效,第二數據至少在令牌有效的同時邏輯地維持為不變化的。
13.權利要求12的系統(tǒng),其中卸載提供器進一步可操作來在令牌有效的情況下邏輯地寫由第三數據指示的第二數據的全部或一些,第三數據也包括將寫的數據置于其中的目的地。
14.權利要求12的系統(tǒng),其中請求器包括在容納卸載提供器的裝置的外部的裝置的部件。
15.權利要求12的系統(tǒng),其中令牌管理器和卸載提供器都在存儲區(qū)域網絡的裝置上被容納。
全文摘要
本文描述的主題的各方面涉及卸載讀和寫。在各方面中,尋求傳輸數據的請求器發(fā)送表示數據的請求。作為響應,請求器接收一個或多個表示數據的令牌。然后,請求器可以將這些令牌中的一個或多個提供給部件,請求寫由所述一個或多個令牌表示的數據。在一些示例性應用中,部件可以使用所述一個或多個令牌以識別數據并且然后可以在沒有與請求器的附加交互的情況下讀數據或者邏輯地寫數據。令牌可以通過請求或者基于其他因素而被無效。
文檔編號G06F3/06GK102520877SQ201110285468
公開日2012年6月27日 申請日期2011年9月23日 優(yōu)先權日2010年9月23日
發(fā)明者D.L.格林, K.梅拉, M.J.史密斯, N.R.克里斯蒂安森, R.納加, V.薩多夫斯基 申請人:微軟公司