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