專利名稱:在共享緩沖區(qū)中在系統(tǒng)和存儲器之間傳送數(shù)據(jù)的制作方法
技術領域:
本發(fā)明涉及一種用于在共享緩沖區(qū)中在系統(tǒng)和存儲器之間傳送數(shù)據(jù)的方法、系統(tǒng)和程序。
背景技術:
在網(wǎng)絡備份環(huán)境中,客戶系統(tǒng)可以將數(shù)據(jù)備份在存儲設備中并和備份服務器協(xié)調該備份。例如,國際商業(yè)機器公司(“IBM”)Tivoli存儲管理器產品為客戶和服務器系統(tǒng)提供軟件以備份客戶數(shù)據(jù)(IBM和Tivoli是IBM的注冊商標)??蛻魴C器可以包括多個程序組件,所述程序組件處理在客戶的應用和存儲設備之間傳送的數(shù)據(jù)。每個組件從前一組件使用的緩沖區(qū)中讀取數(shù)據(jù)并接著執(zhí)行存儲器復制操作以將數(shù)據(jù)復制到分配給該組件的緩沖區(qū)。作為當數(shù)據(jù)在組件分配的緩沖區(qū)中傳遞時處理數(shù)據(jù)的一部分,程序組件可以將首部信息加入該數(shù)據(jù)。程序組件可從前一組件的緩沖區(qū)讀取數(shù)據(jù),處理該數(shù)據(jù),將新的首部加入該數(shù)據(jù),接著將這個數(shù)據(jù)和新的首部寫入分配到該組件的緩沖區(qū)。在處理數(shù)據(jù)的組件鏈中的下一程序組件可進行同樣的處理。
發(fā)明內容
提供了一種在共享緩沖區(qū)中在系統(tǒng)和存儲器之間傳送數(shù)據(jù)的方法、系統(tǒng)和程序。在本發(fā)明的第一方面,應用從組件請求緩沖區(qū)。該組件分配一緩沖區(qū)并將在緩沖區(qū)中用于應用數(shù)據(jù)的第一偏移和在緩沖區(qū)中用于第一首部的第二偏移返回該應用。應用在緩沖區(qū)中的第一偏移處寫入應用數(shù)據(jù);并在緩沖區(qū)中的第二偏移處寫入第一首部。第二首部被寫入緩沖區(qū)的第三偏移處。
根據(jù)本發(fā)明的第二方面,第一組件從第二組件請求緩沖區(qū)。第二組件分配一緩沖區(qū)并將在緩沖區(qū)中用于應用數(shù)據(jù)的第一偏移和在緩沖區(qū)中用于第一首部的第二偏移返回該應用。第二組件在緩沖區(qū)中的第一偏移處寫入應用數(shù)據(jù)并在緩沖區(qū)中的第二偏移處寫入第一首部。第二首部被寫入緩沖區(qū)的第三偏移處。
現(xiàn)在將僅作為示例并參考下面的附圖來描述本發(fā)明的實施例,其中圖1例示了網(wǎng)絡計算環(huán)境的一實施例。
圖2例示了緩沖區(qū)格式的一實施例。
圖3、4和5例示了將數(shù)據(jù)從應用傳送到存儲設備的操作的一實施例。
具體實施例方式
在下列的描述中將參考附圖,所述附圖形成本說明書的一部分并例示了本發(fā)明的一些實施例??梢岳斫獾氖?,可以利用其他的實施例并可以對結構和操作進行變化而不背離本發(fā)明的范圍。
圖1例示了具有包括存儲器4的存儲客戶2的網(wǎng)絡計算環(huán)境。存儲客戶2包括作為程序組件的應用6例如數(shù)據(jù)庫應用等、存儲管理器應用程序接口(API)8、虛擬服務器10、存儲代理12和提供寫入存儲設備16的接口的存儲設備驅動器14。存儲管理器API 8管理在緩沖池20中的緩沖區(qū)18。
在一個實施例中,存儲設備驅動器14通過網(wǎng)絡22例如存儲區(qū)域網(wǎng)(SAN)傳送數(shù)據(jù)以將其寫入存儲設備16。在另一個可選實施例中,客戶2可以通過總線接口,例如外設部件互連(PCI)總線、小型計算機系統(tǒng)接口(SCSI)總線等,連接到存儲設備16。
在一個實施例中,虛擬服務器10可以通過第二網(wǎng)絡28例如局域網(wǎng)(LAN)將關于寫入存儲設備16的數(shù)據(jù)的信息傳送至具有存儲管理器服務器26的服務器24。這樣,通過第一網(wǎng)絡例如SAN傳輸去往和來自存儲器的數(shù)據(jù),而通過另一網(wǎng)絡例如局域網(wǎng)發(fā)送關于被傳送的數(shù)據(jù)的控制信息。在另一可選實施例中,數(shù)據(jù)以及用于數(shù)據(jù)傳送操作的信息和命令可以在同一網(wǎng)絡上傳輸,而不是如圖1所示的在分開的網(wǎng)絡上傳輸。服務器26在管理備份數(shù)據(jù)集的備份數(shù)據(jù)庫頂端中維護關于存儲在存儲設備16中的數(shù)據(jù)的信息。
存儲管理器API 8將緩沖池20中的緩沖區(qū)18分配給客戶2中的組件以用于存儲在應用6和存儲設備16之間傳送的數(shù)據(jù)。圖2例示了組件6、8、10、12和14添加到緩沖區(qū)18的數(shù)據(jù),包括應用數(shù)據(jù)40和由應用6寫入的應用首部44、由存儲管理器API 8寫入的API首部46、指示如何處理存儲管理器API 8寫入的緩沖區(qū)的動詞(verb)信息48。在一個實施例中,存儲代理12可以用設備特定信息4蓋寫動詞信息48,以使存儲設備驅動器14能夠將數(shù)據(jù)傳送到存儲設備16。在描述的實施例中,例如組件6、8、10、12和14的組件將指向緩沖區(qū)內容包括該組件寫入緩沖區(qū)的任何首部或者其他信息的指針傳送至例如組件8、10、12和14的下一組件,以處理該緩沖區(qū)內容。這樣,緩沖區(qū)18由組件共享,因此處理緩沖區(qū)中的數(shù)據(jù)并添加首部信息的每個組件不必分配在其中復制內容的另外的緩沖區(qū)。相反,每個組件可以處理數(shù)據(jù)并添加首部和其他信息給相同的共享緩沖區(qū),因而不需要執(zhí)行去往和來自分開的緩沖區(qū)的數(shù)據(jù)的存儲器復制操作。
圖3、4和5例示了例如組件6、8、10、12和14的組件執(zhí)行的操作,以在組件之間傳送數(shù)據(jù)以便傳送到存儲設備16。參照圖3,應用6通過從存儲管理器API 8請求(在塊102)的一個或多個緩沖區(qū)18,來啟動(在塊100)將應用數(shù)據(jù)傳送到存儲設備16的操作。該請求可以包括應用6打算寫入的首部的最大長度,如果應用6將不寫入首部,則該長度可以為零。作為響應,存儲管理器API 8分配(在塊104)在緩沖池20中被指示為自由緩沖區(qū)18的一個或多個緩沖區(qū)18給應用。第一組件或存儲管理器API 8計算(在塊106)用于應用數(shù)據(jù)40的第一偏移,以在第一偏移之前的緩沖區(qū)18中提供足夠量的空間,以便在從第一偏移寫入應用數(shù)據(jù)40之后寫入第一首部和第二首部,例如應用首部42和API首部44。第一偏移可以在緩沖區(qū)18中提供用于由請求中指示的首部的長度的足夠的空間。因此第一偏移尋址應用數(shù)據(jù)40在緩沖區(qū)18中的何處開始。第一組件8還計算(在塊108)第二偏移以在第二偏移之前的緩沖區(qū)中提供足夠量的空間,以便在寫入應用數(shù)據(jù)40和應用首部42之后,寫入第二首部,例如API首部44。這樣,偏移被計算為允許一個組件在由前一組件寫入的數(shù)據(jù)之前寫入數(shù)據(jù),由此允許組件在先前寫入的應用數(shù)據(jù)40和首部之前添加首部。另外,在緩沖區(qū)18的頂端可以有數(shù)據(jù)結構,該數(shù)據(jù)結構具有關于所有的首部,例如首部48、46、44和數(shù)據(jù)40的信息,包括在緩沖區(qū)18中的偏移和每個首部的長度,以使得任何組件6、8、10、12和14能夠確定首部和數(shù)據(jù)在緩沖區(qū)18中的位置。
在描述的實施例中,存儲管理器API 8可能想要確保數(shù)據(jù)保持在固定的邊界區(qū)域例如4K邊界上。當應用6輸入/輸出(I/O)到存儲設備16時,被緩沖區(qū)18傳遞到內核以進行輸入/輸出。為了實現(xiàn)直接存儲器尋址(DMA),內核可將緩沖區(qū)18“釘”(pin)到物理存儲器4(而不是虛擬存儲器),從而輸入/輸出設備(PCI總線、SCSI總線、SAN等)能訪問數(shù)據(jù)并將其發(fā)送到適當?shù)脑O備。這種“釘”住緩沖區(qū)18防止了當輸入/輸出傳送在進行中時(在總線上),其他的應用使用該數(shù)據(jù)。
如果(在塊110)指針應用數(shù)據(jù)40不是一固定數(shù)(例如,4千字節(jié)(Kb))的倍數(shù),那么第一組件(存儲管理器API 8)計算(在塊112)第一和第二偏移以在第一偏移處寫入的應用數(shù)據(jù)之前維持空白空間(empty space),使得空白空間和應用數(shù)據(jù)占據(jù)固定數(shù)或4Kb的倍數(shù)。例如,第二偏移可以包含從第一偏移的偏移,其等于需要在4Kb邊界上排列應用數(shù)據(jù)40的空白空間42的量和將在第二偏移開始寫入的首部例如應用首部44的長度。第一組件8將第一和第二偏移以及用于所分配的緩沖區(qū)18的句柄(handle)返回到應用6(在塊114)。
響應于所述偏移,應用6在緩沖區(qū)18中的第一偏移處寫入(在塊116)應用數(shù)據(jù)40,并在緩沖區(qū)18中的第二偏移處寫入(在塊118)第一首部,例如應用首部44。應用首部44的寫入可以是可選的。在寫入之后,應用6將緩沖區(qū)句柄傳遞(在塊120)給第一組件(存儲管理器API 8)。
參照圖4,當接收(在塊130)到來自應用6的緩沖區(qū)句柄時,第一組件(存儲管理器API 8)計算(在塊132)第三偏移,以在第三偏移之前的緩沖區(qū)中提供足夠量的空間,以便在寫入應用數(shù)據(jù)40和第一首部(應用首部44)之后寫入第二首部(API首部46)。在一個實施例中,如果(在塊134)第一首部(應用首部44)是固定數(shù)例如4Kb的倍數(shù),那么存儲管理器API 8選擇(在塊136)第三偏移以在第一首部之前維持空白空間,使得第一首部和空白空間占據(jù)固定數(shù)(4Kb)的倍數(shù)。第二首部(API首部46)被寫入(在塊138)到緩沖區(qū)18中的第三偏移處。存儲管理器API 8還將第三首部(動詞首部48)寫入(塊140)緩沖區(qū)中的第四偏移處,指示緩沖區(qū)內容是否將被傳送到存儲設備16或服務器24。存儲管理器API 8指示將打算用于存儲設備16的數(shù)據(jù)傳送到存儲設備16,并將備份命令和相關信息傳送到管理客戶2備份操作的服務器24。存儲管理器API 8接著將指向第三首部的指針傳遞(在塊142)至第二組件例如虛擬服務器10。
響應于接收到指向第三首部的指針,虛擬服務器10判定(在塊144)第三首部例如動詞首部48是否指示將緩沖區(qū)內容發(fā)送到存儲設備16或服務器24。如果(在塊144)該內容是打算用于服務器24,那么虛擬服務器10通過網(wǎng)絡28將緩沖區(qū)內容傳輸(在塊146)到服務器24。否則,如果(在塊144)該內容是打算用于存儲設備16,那么虛擬服務器10將指向緩沖區(qū)18的第二指針發(fā)送(在塊148)至第三組件例如存儲代理12。
參照圖5,響應于接收到(在塊150)第二指針,第三組件(存儲代理12)將用于將緩沖區(qū)內容傳送到第一設備的設備信息寫入(在塊152)到第三首部。該設備特定信息替換第一組件(存儲管理器API 8)寫入的第二首部信息。存儲代理12接著將指向緩沖區(qū)18的第三指針發(fā)送(在塊154)至存儲設備驅動器14。作為響應,存儲設備驅動器14使用第三指針訪問緩沖區(qū)18內容和將其傳送到存儲設備16中的存儲介質,例如磁存儲介質(例如,硬盤驅動器、磁帶等)、光存儲介質或本領域已知的其他適當?shù)姆且资源鎯橘|。
在其他實施例中,某些首部可以不被寫入。例如,如果應用6或存儲管理器API 8沒有寫入一個首部44、46,那么第二首部會包含動詞數(shù)據(jù)48?;蛘?,組件可以寫入需要進一步的偏移計算的另外的首部。此外,任一被寫入的首部之上的偏移可考慮在先前寫入的首部的之上添加空白空間,以確??瞻卓臻g和寫入的首部落在4Kb邊界上。這樣,在空白空間42之后的偏移處寫入的首部44從該偏移延伸到空白空間42的起始處。
在一個實施例中,第一偏移比第二偏移大,第二偏移比第三偏移大,而第三偏移比第四偏移大。這樣,處理數(shù)據(jù)的每個隨后的組件可以向一偏移處的數(shù)據(jù)寫入首部,以將該附加的首部放置在寫入緩沖區(qū)的先前寫入的應用數(shù)據(jù)和首部之上。
在另一實施例中,應用6可以從存儲設備16請求數(shù)據(jù)。作為響應,存儲設備驅動器14訪問數(shù)據(jù)并將該數(shù)據(jù)返給存儲代理12。存儲代理12(或某其他組件)接著可以從存儲管理器API 8請求緩沖區(qū)18以添加取回的數(shù)據(jù)。接著,組件可以執(zhí)行偏移計算以提供偏移,以便在緩沖區(qū)18中提供空間以允許組件將對取回的應用數(shù)據(jù)的首部添加至緩沖區(qū)18,從而將指向緩沖區(qū)的指針最終傳遞給應用6以訪問數(shù)據(jù)。
在描述的實施例中,不同的組件共享緩沖區(qū)并從該相同緩沖區(qū)訪問數(shù)據(jù)和將首部信息寫入這個相同的緩沖區(qū),以及將指向緩沖區(qū)的指針傳遞至另外的組件,使得另外的組件能訪問該緩沖區(qū)。
在另外的實施例中,應用可以從存儲管理器API 8請求多個緩沖區(qū),接著將應用數(shù)據(jù)40和應用首部44數(shù)據(jù)并行地寫入多個緩沖區(qū),接著將對緩沖區(qū)的句柄傳遞給存儲管理器API 8來進一步處理。
另外的實施例細節(jié)描述的操作可以實現(xiàn)為使用標準編程和/或工程技術來產生軟件、固件、硬件或其任何組合的方法、裝置或者制造物品。這里使用的術語“制造物品”是指在硬件邏輯(例如,集成電路芯片、可編程門陣列(PGA)、專用集成電路(ASIC)等)或計算機可讀介質中實現(xiàn)的代碼或邏輯,所述計算機可讀介質例如為磁存儲介質(例如,硬盤驅動器、軟盤、磁帶等)、光存儲器(CD-ROM、光盤等)、易失性和非易失性存儲設備(例如,EEPROM、ROM、PROM、RAM、DRAM、SRAM、固件、可編程邏輯等)。在計算機可讀介質中的代碼可以由處理器訪問和執(zhí)行。優(yōu)選實施例在其中實現(xiàn)的編碼還可以經過傳輸介質或通過網(wǎng)絡從文件服務器訪問。在這種情況下,該代碼在其中實現(xiàn)的制造物品可以包含傳輸介質,例如網(wǎng)絡傳輸線,無線傳輸介質,通過空間、無線電波、紅外信號傳播的信號等。因此,“制造物品”可以包含其中包含該代碼的介質。另外地,“制造物品”可以包含其中包含、處理和執(zhí)行該代碼的硬件和軟件組件的組合。當然,本領域技術人員會認識到,可以對該配置進行多種修改而不會背離本發(fā)明的范圍,而且“制造物品”可以包含本領域已知的任何信息承載介質。
圖3-5例示的操作示出以某種次序發(fā)生的某些事件。在其他可選實施例中,某些操作可以不同的次序執(zhí)行、被修正或移除。而且,步驟可以被添加到上述的邏輯而仍符合描述的實施例。此外,在此描述的操作可以順序發(fā)生,或者某些操作可以并行處理。還有,操作可以由單個處理單元或分布的處理單元執(zhí)行。
為了例示和描述的目的,給出了對本發(fā)明的各種實施例的以上描述。這種描述并非旨在是窮舉的或將本發(fā)明限制于所公開的精確形式。根據(jù)上述示教可以進行多種修改和變化。本發(fā)明的范圍旨在不是受到這種具體的描述的限制,而是由所附的權利要求限制。上述的說明書、示例和數(shù)據(jù)提供了對本發(fā)明的組成的制造和使用的完整描述。因為可以實現(xiàn)本發(fā)明的許多實施例而不會背離本發(fā)明的精神和范圍,所以本發(fā)明在于隨后所附的權利要求。
權利要求
1.一種方法,包括由應用從組件請求緩沖區(qū);由該組件分配緩沖區(qū);由該組件將在該緩沖區(qū)中用于應用數(shù)據(jù)的第一偏移和在該緩沖區(qū)中用于第一首部的第二偏移返回給該應用;由該應用在該緩沖區(qū)中的該第一偏移處寫入應用數(shù)據(jù);由該應用在該緩沖區(qū)中的該第二偏移處寫入第一首部;以及將第二首部寫入該緩沖區(qū)中的第三偏移。
2.根據(jù)權利要求1所述的方法,其中所述第一偏移比所述第二偏移大,并且所述第二偏移比所述第三偏移大。
3.根據(jù)權利要求1所述的方法,其中所述組件將所述第二首部寫入所述緩沖區(qū),還包括將第三首部寫入在該緩沖區(qū)中的第四偏移,所述第一偏移比所述第二偏移大,所述第二偏移比所述第三偏移大,而所述第三偏移比所述第四偏移大。
4.根據(jù)權利要求1所述的方法,其中所述組件包含第一組件,進一步包括由第二組件用用于將緩沖區(qū)內容傳送到存儲設備的信息替換所述第二首部。
5.根據(jù)權利要求1所述的方法,其中所述組件包括第一組件,并且在所述第三偏移處的所述第二首部指示包含所述應用數(shù)據(jù)和首部的緩沖區(qū)內容將被傳送到第一設備或第二設備,還包括由所述第一組件將指向所述第二首部的指針傳遞給至第二組件;由所述第二組件處理所述第二首部以判定是否將緩沖區(qū)內容發(fā)送到第一設備或第二設備;以及響應于判定所述第二首部指示將緩沖區(qū)內容發(fā)送到所述第一設備,將用于將緩沖區(qū)內容傳送到所述第一設備的設備信息寫入所述第二首部,其中所述設備信息替換由所述第一組件寫入的所述第二首部信息。
6.根據(jù)權利要求5所述的方法,其中所述第一設備包括存儲設備,進一步包括響應于判定緩沖區(qū)內容將被發(fā)送到所述存儲設備,由用于所述存儲設備的存儲設備驅動器使用所述第二首部中的所述設備信息,將緩沖區(qū)內容從所述緩沖區(qū)傳送到所述存儲設備。
7.根據(jù)權利要求6所述的方法,其中由所述第一組件傳遞的指針包括第一指針,還包括響應于判定緩沖區(qū)內容將被發(fā)送到所述存儲設備,由所述第二組件發(fā)送指向緩沖區(qū)的第二指針至第三組件,其中所述第三組件將所述設備信息寫入所述第二首部;以及由所述第三組件將指向緩沖區(qū)的第三指針發(fā)送至所述存儲設備驅動器,其中所述存儲設備驅動器使用所述第三指針將緩沖區(qū)的內容寫入所述存儲設備中的存儲介質。
8.根據(jù)權利要求7所述的方法,其中所述第一組件包括存儲管理器的應用程序接口(API),而所述第三組件包括存儲代理。
9.根據(jù)權利要求5所述的方法,其中所述第二設備包括存儲服務器,還包括響應于判定所述第二首部指示將緩沖區(qū)內容發(fā)送到所述存儲服務器,由所述第二組件將緩沖區(qū)內容發(fā)送到所述存儲服務器。
10.根據(jù)權利要求1所述的方法,進一步包括由所述組件計算所述第一偏移,以在所述第一偏移之前的緩沖區(qū)中提供足夠量的空間,以便在從所述第一偏移寫入所述應用數(shù)據(jù)之后寫入所述第一首部和第二首部;以及由所述組件計算所述第二偏移,以在所述第二偏移之前的緩沖區(qū)中提供足夠量的空間,以便在寫入所述應用數(shù)據(jù)和所述第一首部之后寫入所述第二首部。
11.根據(jù)權利要求10所述的方法,進一步包括由所述組件計算所述第三偏移以在所述第三偏移之前的緩沖區(qū)中提供足夠量的空間,以便在寫入所述應用數(shù)據(jù)和第一首部之后寫入所述第二首部。
12.根據(jù)權利要求1所述的方法,進一步包括判定所述應用數(shù)據(jù)是否是固定數(shù)的倍數(shù),其中響應于判定所述應用數(shù)據(jù)不是該固定數(shù)的倍數(shù),所述第一和第二偏移被選擇以在所述第一偏移處寫入的所述應用數(shù)據(jù)之前維持空白空間,使得所述空白空間和應用數(shù)據(jù)占據(jù)該固定數(shù)的倍數(shù),其中所述第一首部從所述第二偏移延伸到所述空白空間的起始處。
13.根據(jù)權利要求12所述的方法,進一步包括判定所述第一首部是否是固定數(shù)的倍數(shù),其中響應于判定所述第一首部不是固定數(shù)的倍數(shù),所述第三偏移被選擇以在所述第一首部之前維持空白空間,使得所述第一首部和空白空間占據(jù)該固定數(shù)的倍數(shù),其中所述第二首部從所述第三偏移延伸到在所述第一首部之前的所述空白空間的起始處。
14.根據(jù)權利要求12所述的方法,其中所述固定數(shù)包括4千字節(jié),且其中如果在所述第一偏移處寫入緩沖區(qū)的所述應用數(shù)據(jù)沒有對準在緩沖區(qū)中的4千字節(jié)邊界上,則所述應用數(shù)據(jù)不是所述固定數(shù)的倍數(shù)。
15.根據(jù)權利要求1所述的方法,進一步包括由所述應用請求多個緩沖區(qū);由所述組件將所述多個緩沖區(qū)返回到所述應用;由所述應用將應用數(shù)據(jù)和第一首部并行地寫入所述多個緩沖區(qū)。
16.一種系統(tǒng),包括處理器;該處理器可訪問并具有緩沖區(qū)的存儲器;以及計算機可讀介質中的包括應用和組件的代碼,其中所述處理器執(zhí)行所述代碼以執(zhí)行權利要求1到15中任一項的組件和應用方法的步驟。
17.一種計算機程序,包括與包含緩沖區(qū)的存儲器通信的應用和組件,其中所述應用和組件能夠被執(zhí)行以完成根據(jù)權利要求1到15中的任一項的方法的步驟。
全文摘要
提供了一種用于在共享緩沖區(qū)中在系統(tǒng)和存儲器之間傳送數(shù)據(jù)的方法、系統(tǒng)和程序。應用從組件請求緩沖區(qū)。該組件分配一緩沖區(qū)并將緩沖區(qū)中用于應用數(shù)據(jù)的第一偏移和緩沖區(qū)中用于第一首部的第二偏移返回該應用。該應用在緩沖區(qū)中的第一偏移處寫入應用數(shù)據(jù);并在緩沖區(qū)中的第二偏移處寫入第一首部。第二首部被寫入緩沖區(qū)的第三偏移。
文檔編號G06F9/54GK101073062SQ200580042164
公開日2007年11月14日 申請日期2005年11月17日 優(yōu)先權日2004年12月10日
發(fā)明者M·J·安格林, A·H·霍赫貝格, J·維克斯涅 申請人:國際商業(yè)機器公司