專利名稱:用于實現(xiàn)文件的寫入時復制的方法和系統(tǒng)的制作方法
技術領域:
一般來說,本發(fā)明涉及計算環(huán)境內的文件系統(tǒng)數(shù)據(jù)管理,具體來說,涉及用于實現(xiàn)各種計算環(huán)境內的文件系統(tǒng)數(shù)據(jù)文件的寫入時復制的技術。
背景技術:
許多類型的計算環(huán)境,包括通用計算機和數(shù)據(jù)處理系統(tǒng),都利用使用“虛擬內存”方案組織起來的存儲器。通用虛擬內存允許在計算環(huán)境中執(zhí)行的應用程序和/或進程如同它們具有沒有限制的內存量供它們處理那樣運行。在現(xiàn)實中,特定的應用程序或進程可用的存儲量受到計算環(huán)境中的存儲量的限制,并進一步受到共享該存儲器的同時執(zhí)行的程序的數(shù)量的限制。此外,虛擬內存方案隱藏了內存的實際物理地址,應用程序無法知道。應用程序使用邏輯地址訪問它們的存儲空間,邏輯地址被計算環(huán)境轉換為物理地址。
虛擬內存系統(tǒng)以叫做“塊”(或“頁”)的單元組織存儲量。這些塊在一個快速主存儲器和一個或多個較大的并且通常較慢的輔助、第三等存儲單元之間移動。這些塊的移動(常常叫做“交換”)對于在計算環(huán)境中執(zhí)行的應用程序或進程是透明的,使得應用程序或進程如同它們每一個都具有沒有限制的存儲量的情況下運行。
某些常規(guī)系統(tǒng)偶爾需要復制部分內存。這種復制可以是用戶啟動的或由操作系統(tǒng)啟動的。常規(guī)系統(tǒng)常常使用“懶惰的”復制方法來進行“快閃的復制”,在這種復制中,要被復制的存儲將被指定一個只讀狀態(tài),而實際復制被推遲到以后進行。如果進行嘗試以寫入到正本或副本中,那么內存將在此時復制,且正本和副本兩者都被給予讀寫的輸入/輸出(I/O)狀態(tài)。這樣,表面看來是立即就進行了復制,但實際復制被推遲到最后一刻。如果不執(zhí)行寫入,則不進行復制。因此,這種方法叫做“寫入時復制”或“虛擬復制”。
一般來說,寫入時復制操作在計算方面開銷比較大,因為一次寫入操作會導致兩次寫入操作。即,現(xiàn)有的數(shù)據(jù)塊需要從舊的物理塊復制到新的物理塊,然后在新物理塊上執(zhí)行實際更新/寫入操作。鑒于這種計算開銷,需要一種新穎的寫入時復制實現(xiàn)方式,該方式應該部分地消除雙重寫入要求。
發(fā)明內容
通過在計算環(huán)境中實現(xiàn)寫入時復制的方法,在一方面消除了現(xiàn)有技術的缺點,并提供了更多的優(yōu)點。該方法包括使用一個第一映射表執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用;使用第二映射表執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器時使用,其中,數(shù)據(jù)塊的寫入時復制是使用單一的寫入操作來實現(xiàn)的。
在另一方面,提供了有助于在客戶端-服務器計算環(huán)境中進行寫入時復制的方法。該方法包括在客戶端-服務器計算環(huán)境的文件系統(tǒng)服務器上維護文件的讀取映射表和寫入映射表,其中,讀取映射表用于執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用,寫入映射表用于執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器時使用,其中,通過使用讀取映射表和寫入映射表,可以使用單一的寫入操作實現(xiàn)數(shù)據(jù)塊的寫入時復制。
在另一個方面,提供了一個在具有許多客戶端的客戶端-服務器環(huán)境內實現(xiàn)文件的寫入時復制的方法。該方法包括使用客戶端-服務器環(huán)境的多個客戶端執(zhí)行文件的寫入時復制。執(zhí)行過程包括由多個客戶端中的第一客戶端對要被寫入時復制的文件的至少一個數(shù)據(jù)塊執(zhí)行寫入時復制;由多個客戶端中的第二客戶端對要被寫入時復制的文件的至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制。在增強的方面,執(zhí)行過程包括由第一客戶端使用單一的寫入操作對文件的至少一個數(shù)據(jù)塊執(zhí)行寫入時復制,由第二客戶端還是使用單一的寫入操作對至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制。
在再一個方面,提供了有助于在客戶端-服務器計算環(huán)境中進行文件的寫入時復制的方法。該方法包括從文件系統(tǒng)服務器對客戶端-服務器環(huán)境的共享存儲單元中存儲的文件實現(xiàn)寫入時復制進行控制,該控制過程包括允許客戶端-服務器環(huán)境的第一客戶端對文件中的一部分數(shù)據(jù)執(zhí)行寫入時復制操作,并允許客戶端-服務器環(huán)境的第二客戶端對文件中的不同部分的數(shù)據(jù)執(zhí)行寫入時復制操作,其中,文件系統(tǒng)服務器控制和促進文件的分布式寫入時復制的執(zhí)行。
還描述了各個其他特點和對上文描述的方法的增強,并在權利要求書中進行了闡述,同時描述了對應于上文概述方法的系統(tǒng)和計算機程序產(chǎn)品。
進一步,通過本發(fā)明的技術還可以實現(xiàn)其他特點和優(yōu)點。這里詳細描述了本發(fā)明的其他實施例和方面,均被視為權利要求所保護的本發(fā)明的一部分。
在本說明書結尾時在權利要求書中特別指出了并明確聲明了被視為本發(fā)明的主題。通過下面的結合附圖對本發(fā)明進行的詳細說明,可以更好地理解本發(fā)明的前述和其他目的、特點和優(yōu)點,其中圖1描述了包括并使用本發(fā)明的一個或多個方面的計算環(huán)境的一個實施例;圖2描述了其中范圍或偏移被轉換為虛擬/相對塊號的應用程序或進程的文件表示(200)的一個示例;圖3是其中圖2的虛擬/相對塊號被映射到文件系統(tǒng)的一個或多個存儲單元中的物理塊地址的文件系統(tǒng)映射表(300)的表示;圖4是在文件系統(tǒng)的存儲單元內圖3的物理塊地址的配置的表示;
圖5描述了在偏移5000開始并落在文件系統(tǒng)的存儲單元的物理塊D內的數(shù)據(jù)的四個字節(jié)的讀取的一個示例;圖6是根據(jù)本發(fā)明的一個方面的寫入操作和寫入時復制操作的一個實施例的流程圖;圖7是依據(jù)圖6的邏輯將數(shù)據(jù)塊從存儲單元讀取到本地緩沖區(qū)以便在寫入操作中使用的讀取過程的一個示例的流程圖;圖8是依據(jù)圖6的邏輯將修改的數(shù)據(jù)塊寫入到存儲單元以便在寫入操作中使用的寫入過程的一個示例的流程圖;圖9描述了根據(jù)本發(fā)明的一個方面的在寫入時復制文件時使用的讀取映射表(900)和寫入映射表(910)的一個示例;圖10是根據(jù)本發(fā)明的一個方面的依據(jù)圖6的邏輯在寫入時復制操作中使用的數(shù)據(jù)塊讀取過程的一個實施例的流程圖;圖11是根據(jù)本發(fā)明的一個方面的依據(jù)圖6的邏輯在寫入時復制操作中使用的修改的數(shù)據(jù)塊寫入過程的一個實施例的流程圖;圖12是根據(jù)本發(fā)明的一個方面的在寫入時復制文件時使用的讀取映射表(1200)和寫入映射表(1210)的另一個示例;圖13描述了包括并使用本發(fā)明的一個或多個方面的計算環(huán)境的另一個實施例;圖14是圖13的客戶端-服務器環(huán)境的客戶端1的一個實施例的根據(jù)本發(fā)明的一個方面的執(zhí)行文件的至少一個數(shù)據(jù)塊的寫入時復制操作的流程圖;圖15是圖13的客戶端-服務器環(huán)境的客戶端2的一個實施例的根據(jù)本發(fā)明的一個方面的執(zhí)行文件的至少另一個數(shù)據(jù)塊的寫入時復制操作的流程圖;圖16描述了根據(jù)本發(fā)明的另一個方面的在寫入時復制文件時使用的文件的讀取映射表(1600)和寫入映射表(1610)的另一個示例;以及圖17是根據(jù)本發(fā)明的一個方面的使用寫入時復制的數(shù)據(jù)保留應用程序的一個示例的流程圖。
具體實施例方式
概述這里在一個方面提供了一種用于在計算環(huán)境中實現(xiàn)寫入時復制的技術。此技術包括使用不同的轉換,即,讀取映射表和寫入映射表,來使用一次寫入操作實現(xiàn)文件中數(shù)據(jù)單元的寫入時復制操作。作為一個示例,通過使用第一虛擬塊到物理塊的映射從物理存儲器讀取文件的一個數(shù)據(jù)塊以便修改,然后使用第二虛擬塊到物理塊的映射,將該修改的數(shù)據(jù)塊寫入到物理存儲器,來實現(xiàn)寫入時復制,其中,第一虛擬塊到物理塊的映射和第二虛擬塊到物理塊的映射包括不同的映射。
在另一個方面,這里提供了用于跨客戶端-服務器環(huán)境的多個客戶端實現(xiàn)文件的分布式寫入時復制的技術。在這樣的環(huán)境內,多個客戶端的第一客戶端執(zhí)行文件的至少一個數(shù)據(jù)塊的寫入時復制,多個客戶端的第二客戶端執(zhí)行文件的至少另一個數(shù)據(jù)塊的寫入時復制。在一個實現(xiàn)方式中,客戶端可以包括異類操作系統(tǒng),使用一個寫入操作對正在被進行寫入時復制的文件內的數(shù)據(jù)塊執(zhí)行每個寫入時復制操作。此外,如上所述,可以使用第一映射轉換(例如,使用讀取映射表)和第二映射轉換(例如,使用寫入映射表)實現(xiàn)寫入時復制。本發(fā)明的這些和其他方面將在下面進行描述,并在隨后的權利要求書中進行敘述。
具體實施方式
圖1中描述了根據(jù)本發(fā)明的一個方面的包括并使用寫入時復制的計算環(huán)境的一個示例,一般表示為100。如圖所示,計算環(huán)境100包括至少一個中央處理單元102、內存104和一個或多個存儲單元或設備106。
已知,中央處理單元102是計算單元的控制中心,并提供用于執(zhí)行指令、中斷操作、計時功能、初始程序裝入和其他機器相關的功能的序列和處理設備。中央處理單元至少執(zhí)行一個操作系統(tǒng),該操作系統(tǒng)被公知地認為用于通過控制其他程序的執(zhí)行,控制與外圍設備進行的通信并控制計算機資源的使用來控制計算單元的操作。
中央處理單元(CPU)102連接到內存104,而可對該內存直接進行尋址,并由中央處理單元提供對數(shù)據(jù)的高速處理。內存104包括緩沖區(qū)或高速緩沖存儲區(qū)103,該緩沖區(qū)或高速緩沖存儲區(qū)由CPU102使用,如本文將進一步描述的。在另一個實施例中,緩沖區(qū)103可以駐留在CPU 102內。存儲單元106是輸入/輸出設備的一個示例。如這里所使用的,存儲單元106可以在計算單元以外或在計算環(huán)境100的計算單元內,并可以包括,主存儲器、磁存儲介質(例如,磁帶、磁盤)和直接訪問存儲設備等等。如圖所示,可以在CPU 102、內存104和存儲單元106之間傳輸數(shù)據(jù)。
在一個示例中,計算環(huán)境100是一個單一的系統(tǒng)環(huán)境,包括在AIX操作系統(tǒng)中運行的RS/6000計算機系統(tǒng)(RS/6000和AIX是由IBM公司提供的)。然而,本發(fā)明不僅限于這樣的環(huán)境。本發(fā)明的功能可以在許多類型的計算機環(huán)境和許多類型的計算機系統(tǒng)內使用。例如,計算機環(huán)境100可以包括分布式計算環(huán)境,并可以包括運行基于UNIX操作系統(tǒng)的UNIX作站。其他改進形式也是可以的,并被視為所聲明的發(fā)明的一部分。
眾所周知,文件是一個可用于存儲用戶/應用程序數(shù)據(jù)的計算環(huán)境的文件系統(tǒng)中的有名稱的對象。然后,此數(shù)據(jù)可以通過指定文件名、偏移和長度來進行訪問。對于用戶應用程序或進程,文件上的數(shù)據(jù)好像是連續(xù)的,但在存儲單元(如磁盤)內,數(shù)據(jù)表示可以是不同的。每個文件系統(tǒng)都維護了一個映射表,該映射表提供虛擬(相對)偏移塊號到物理塊號之間的映射或轉換,其中,塊可以是文件內的頁面或其他數(shù)據(jù)單元,單元的大小由文件系統(tǒng)指定。
在圖1的示例中,假設文件系統(tǒng)包括存儲單元,該存儲單元可以在計算環(huán)境的特定計算單元的外部或內部。圖2描述了文件表示200的一個示例,該文件表示將應用程序或進程數(shù)據(jù)范圍和偏移與一個給定文件的虛擬/相對塊號關聯(lián)。請注意,每個文件都有其自己的虛擬/相對塊號集。在此示例中,從0到4K字節(jié)的文件數(shù)據(jù)被映射到虛擬/相對塊號1,從4到8K字節(jié)的數(shù)據(jù)被映射到塊號2,從8到12K字節(jié)的數(shù)據(jù)被映射到塊號3,從12到16K字節(jié)的數(shù)據(jù)被映射到塊號4。再次聲明,這些編號只作為示例。
圖3描述了一個特定文件的文件系統(tǒng)映射表300的一個示例。在將文件的虛擬/相對塊號轉換為存儲單元的實際物理塊地址的過程中使用了表300。例如,顯示了虛擬/相對塊號1、2、3和4,它們映射到存儲單元400的物理塊地址A、D、G和L(參見圖4)。
作為示例,如果一個應用程序或進程希望從在偏移5000開始的一個特定的文件讀取4個字節(jié)的數(shù)據(jù),那么使用圖2和3的文件表示200和文件系統(tǒng)映射表300,讀取的實際數(shù)據(jù)從物理塊D發(fā)生,如圖5所示。這是因為,在偏移5000開始的4個字節(jié)的數(shù)據(jù)落在虛擬/相對塊號2內,如圖3所指出的,該虛擬/相對塊號轉換成存儲單元的物理塊地址D。
如最初所指出的,快閃復制操作可以快速地對存儲進行節(jié)省空間的復制。由于操作需要快速地進行,作為操作的一部分,最初沒有進行物理復制。稍后,任何修改適用的文件數(shù)據(jù)的企圖都會導致寫入時復制操作。在客戶端-服務器環(huán)境中,元數(shù)據(jù)寫入時復制通常由文件系統(tǒng)服務器來執(zhí)行,而由客戶端執(zhí)行文件數(shù)據(jù)寫入時復制。可以使用PageIn和PageOut線程將數(shù)據(jù)塊帶到客戶端上的高速緩存中,更新數(shù)據(jù),然后將數(shù)據(jù)寫回存儲單元中。如果如這里所描述的使用PageIn和PageOut的不同的轉換,那么,客戶端可以將潛在的寫入時復制數(shù)據(jù)讀取到其緩沖區(qū)中,將任何更新應用到緩沖區(qū)中的數(shù)據(jù)中,并通過PageOut線程將修改的數(shù)據(jù)寫入到存儲單元中的一個新位置。通過具有兩個映射表或轉換,如此提供了寫入時復制技術,該技術在一個實施例中,利用現(xiàn)有的PageIn(頁面調入)和PageOut(頁面調出)概念。
圖6是根據(jù)本發(fā)明的一個方面的寫入操作和寫入時復制操作的一個實施例的流程圖。寫入操作(600)從確定是否將寫入文件的數(shù)據(jù)的完整的塊(610)(或完全的頁)開始。如果執(zhí)行數(shù)據(jù)的部分塊寫入,那么將文件中的適用的數(shù)據(jù)塊從存儲單元讀取到本地緩沖區(qū)(620)(PageIn)。這后面跟著緩沖區(qū)中的數(shù)據(jù)塊的更新(630),然后將文件的修改的數(shù)據(jù)塊寫入到存儲單元中(640)。如果將要寫入文件的完整的數(shù)據(jù)塊,那么,邏輯將簡單地進入將數(shù)據(jù)的完整塊寫入到存儲單元(在圖6中表示為650)。已知,圖6的邏輯可以在操作系統(tǒng)內核內實現(xiàn)。圖7和8描述了使用圖6的邏輯實現(xiàn)寫入操作的進一步進程的示例。
圖7描述了將文件的數(shù)據(jù)塊從存儲單元讀取到緩沖區(qū)中的過程的一個實施例。應用程序輸入是要讀取700的文件數(shù)據(jù)的偏移和長度,用于計算虛擬塊號(710)(例如,使用圖2中描述的文件表示)。然后,過程將執(zhí)行子例程調用File·Get以將虛擬塊號映射到存儲單元內的文件數(shù)據(jù)的物理塊地址(720)。使用物理塊地址,將數(shù)據(jù)塊從存儲單元讀取到本地緩沖區(qū)中(730)。
圖8描述了將文件的數(shù)據(jù)塊寫入到存儲單元中的過程的一個示例。如圖所示,在File·Get映射進程中使用虛擬塊號800,例如使用圖3中描述的文件系統(tǒng)映射表來獲取虛擬到物理的映射(810)。然后,在將修改的數(shù)據(jù)塊從緩沖區(qū)寫入到存儲單元(820)時使用物理塊地址。在一個實施例中,圖7的塊讀取過程可以包括PageIn線程進程,而圖8的數(shù)據(jù)塊寫入過程可以包括PageOut線程進程。
優(yōu)選情況下,這里說明了一種用于實現(xiàn)寫入時復制而無需對圖6的高級別寫入邏輯流程中的任何更改的技術。這種技術使用兩個轉換或映射表集,對于將執(zhí)行寫入時復制的特定的數(shù)據(jù)的文件,被稱為讀取映射表和寫入映射表。在一個實施例中,這兩個映射表由文件系統(tǒng)維護,并且,每當在執(zhí)行寫入時復制時,由客戶端應用程序進行訪問。例如,這兩個映射表同時被提供到位于物理地址轉換邊界的文件系統(tǒng)驅動程序。
作為示例,圖9描述了讀取映射表900和寫入映射表910。讀取映射表900將虛擬塊號1、2、3和4分別映射到物理塊號A、D、G和L,而寫入映射表910將虛擬塊號1、2、3和4分別到物理塊號W、X、Y和Z。讀取映射表提供了第一虛擬到物理的轉換(用于讀取操作),而寫入映射表提供了第二虛擬到物理的轉換(用于寫入操作)。具體來說,作為一個示例,寫入時復制可以使用讀取表轉換(對于PageIn)和寫入表轉換(對于PageOut)來實現(xiàn)。
圖10描述了依據(jù)圖6的邏輯在寫入時復制操作中使用的數(shù)據(jù)塊讀取過程的一個實施例。如圖所示,應用程序指定了從該文件計算1010虛擬塊號的文件1000內的數(shù)據(jù)偏移量和長度(參見圖2)。然后,處理過程使用文件的讀取映射表(例如,圖9的表900)獲取虛擬到物理的讀取映射1020。然后,使用此物理讀取映射將文件的至少一個數(shù)據(jù)塊從存儲單元讀取到本地緩沖區(qū)1030。
圖11描述了依據(jù)圖6的邏輯在寫入時復制操作中使用的數(shù)據(jù)塊寫入過程的一個示例。虛擬塊號1100用于使用文件的寫入映射表(例如,圖9的表910)獲取虛擬到物理“寫入”映射1110。通過使用物理寫入映射,修改的數(shù)據(jù)塊被從本地緩沖區(qū)寫入到對應的存儲單元物理塊1120。如上所述,如果將對文件的完整的數(shù)據(jù)塊執(zhí)行寫入時復制,那么,修改的數(shù)據(jù)塊可以使用圖11的物理“寫入”映射直接寫入到存儲區(qū)中。在這樣的情況下,只使用文件的寫入映射表。
那些精通本技術的人將注意到,通過使讀取映射表和寫入映射表相同以便讀取、更新和寫入出現(xiàn)在存儲單元內的同一個物理塊地址中,通過使用圖6、10和11的邏輯,仍然可以執(zhí)行常規(guī)的寫入操作。然而,優(yōu)選情況下,對于寫入時復制,此邏輯也是相同的。當為一個文件請求了寫入時復制時,文件系統(tǒng)為該文件分配新的物理地址區(qū)并更新對應的寫入映射表。通過這樣做,寫入操作與讀取操作在不同的物理塊地址中進行,就是說,原始數(shù)據(jù)在存儲單元中保持不變。在寫入操作之后,依據(jù)特定的寫入時復制應用程序,可以更新文件的讀取映射表。
參考圖9的映射表,并使用圖5的示例,如果在偏移5000處對文件的4個字節(jié)的數(shù)據(jù)進行寫入時復制更改(例如,將數(shù)據(jù)內容“第一第二”更改為“第二第一”),然后將更新的數(shù)據(jù)塊寫入到存儲單元中的物理塊號X(使用對應于虛擬塊號2的寫入映射表910(圖9))。在寫入時復制操作之后,對應的讀取映射表(圖9的900)可以更新以便虛擬塊號2轉換為存儲單元內的物理塊號X,該物理塊號顯示在圖12的更新的讀取映射表1200中。圖12的寫入映射表1210與圖9的寫入映射表910相同。然而,在寫入時復制之后,依據(jù)使用寫入時復制的應用程序,是否以及如何更新讀取映射表中的物理塊號。例如,對于“數(shù)據(jù)保留”類型的應用程序,讀取映射表中的物理塊號可以維護,以保留初始文件引用。對于“數(shù)據(jù)移動”類型的應用程序(其中,文件數(shù)據(jù)將在物理上從存儲單元的一個部分移到另一個部分),原始的物理塊號可以在用來自寫入映射表的新物理塊地址號碼更新讀取映射表時得到釋放。
圖13顯示了一般表示為1300的計算環(huán)境的另一個實施例,該計算環(huán)境可以包括并使用本發(fā)明的一個或多個方面。環(huán)境1300包括許多客戶端,包括客戶端1 1320和客戶端2 1320,在此示例中,它們通過用于客戶端/服務器通信的因特網(wǎng)協(xié)議網(wǎng)絡連接到文件系統(tǒng)服務器1330。服務器1330連接到存儲區(qū)域網(wǎng)絡1340,該網(wǎng)絡具有多個存儲池1350,可用于存儲文件數(shù)據(jù)??蛻舳? 1310和客戶端21320也直接連接到存儲區(qū)域網(wǎng)絡1340。
作為一個示例,假設計算環(huán)境1300具有某些功能,包括在一個位置(例如,文件系統(tǒng)服務器)上維護諸如這里所描述的映射文件(例如,文件的讀取映射表和寫入映射表);客戶端應用程序能夠通過存儲區(qū)域網(wǎng)絡(SAN)直接訪問存儲單元(即,多個存儲池);客戶端應用程序具有讀取/寫入多個存儲池中的文件的任何對象的權限。在各種出版物中詳細討論了這樣的SAN環(huán)境,包括Randal ChiltonBums的題為“存儲區(qū)域網(wǎng)絡的分布式文件系統(tǒng)中的數(shù)據(jù)管理”(加州大學,Santa Cruz(2000年3月)。
在本發(fā)明的另一個方面,提供了分布式寫入時復制功能,其中,不同的客戶端應用程序更新文件的不同的部分。例如,客戶端1執(zhí)行文件的虛擬塊2的寫入時復制,而客戶端2執(zhí)行文件的虛擬塊4的寫入時復制。圖14和15詳細描述了此示例。
圖14描述了客戶端1執(zhí)行文件的虛擬塊2的寫入時復制的一個示例??蛻舳?最初從文件系統(tǒng)服務器獲取標記為“我的文件”的文件的映射表1400。當在偏移5000上更新時,在虛擬塊2上執(zhí)行寫入時復制1410??蛻舳?通知文件系統(tǒng)服務器,它執(zhí)行了虛擬塊2的寫入時復制(1420),而文件系統(tǒng)服務器相應地更新其映射表(1430)。在一個示例中,寫入時復制可以如上所述的那樣執(zhí)行(圖6和9-12)。
客戶端1使用一個鎖定機構執(zhí)行文件數(shù)據(jù)的虛擬塊2的寫入時復制更新。鎖定機構包括每個文件系統(tǒng)對象的鎖定,客戶端需要從文件系統(tǒng)服務器中獲取該鎖定以便對給定文件執(zhí)行操作。因此,在一個實施例中,當客戶端1收到此鎖定時,它也收到文件的映射表,當客戶端1丟失該鎖定時,文件的在客戶端1的所有映射表失效。因此,客戶端1下一次獲取該鎖定時,客戶端1無法使用任何現(xiàn)有的映射表,而是從文件系統(tǒng)服務器獲取當前映射表。
作為進一步的說明,圖13的計算環(huán)境可以使用分布式鎖定機構來控制從不同的客戶端對文件系統(tǒng)對象的訪問。有兩種類型的分布式鎖定,即,會話鎖定和數(shù)據(jù)鎖定。這些鎖定均按照文件系統(tǒng)對象。會話鎖定相當于開放式的“文件描述符”。當客戶端獲取此鎖定時,它告訴服務器,此客戶端對使用此文件感興趣。客戶端可以獲取不同模式的會話鎖定,例如,讀取模式、寫入模式、排它模式等等。例如,當客戶端A正在以排它模式持有會話鎖定時,另一個客戶端,比如說,客戶端B希望打開相同的文件,它向服務器發(fā)送一個請求以索取會話鎖定,服務器會拒絕該鎖定請求,因為客戶端A具有排它模式,因此客戶端B無法對該文件進行操作。第二種類型的分布式鎖定是數(shù)據(jù)鎖定。數(shù)據(jù)鎖定用于執(zhí)行物理讀取/寫入操作??蛻舳藨摼哂凶x取/寫入模式的數(shù)據(jù)鎖定才能對文件執(zhí)行讀取/寫入操作。作為進一步的說明,會話鎖定可以同時被兩個客戶端在寫入模式下持有。這就是說,兩個客戶端都具有對特定文件進行寫入操作的權限,但在它們獲取寫入模式的數(shù)據(jù)鎖定之前,這些客戶端無法寫入。但在一個給定的時間點,只能有一個客戶端可以獲取“寫入模式”的數(shù)據(jù)鎖定,以便只有一個客戶端可以執(zhí)行實際的I/O。如果兩個客戶端都在積極地對一個文件進行操作,它們將持有寫入模式會話鎖定,而數(shù)據(jù)鎖定將在兩個客戶端之間穿梭,以便完成它們的寫入操作。
在某個時間點,客戶端2請求一個鎖定,以便對文件“我的文件”的另一部分執(zhí)行寫入時復制操作。如圖15所示,客戶端2從文件系統(tǒng)服務器獲取文件“我的文件”的映射表1500。當在偏移14000(即,虛擬塊號4)處更新文件內容時,客戶端2在文件的虛擬塊號4處執(zhí)行寫入時復制1510。此后,客戶端2將此寫入時復制更新通知給文件系統(tǒng)服務器,服務器相應地更新“我的文件”的讀取映射表1530。圖16顯示了更新的讀取映射表1600和寫入映射表1610,它們是從對“我的文件”執(zhí)行圖14和15的寫入時復制更新產(chǎn)生的(從圖9的映射表開始)。如圖所示,讀取映射表現(xiàn)在具有映射到物理塊號X的虛擬塊號2,映射到物理塊號Z的虛擬塊號4。
概括起來說,在諸如圖13中所描述的環(huán)境內實施寫入時復制可以跨多個客戶端應用程序分布。因此,許多客戶端應用程序可以參與到在分布式文件系統(tǒng)中執(zhí)行文件的寫入時復制。可以使用上文所描述的分布式鎖定機構,該鎖定機構一次只能由一個客戶端應用程序擁有。例如,當客戶端1具有分布式鎖定時,那么客戶端1將具有有效的讀取映射表和寫入映射表,以便進行寫入時復制操作。如果客戶端2希望對同一個文件的另一個部分執(zhí)行寫入時復制操作,那么文件系統(tǒng)服務器將從客戶端1獲取分布式鎖定并將其給客戶端2。在另一個示例中,分布式鎖定可以按照文件范圍分開,以便兩個客戶端1和客戶端2可以對文件的不同部分執(zhí)行寫入時復制。
圖17描述了用于在分布式客戶端-服務器環(huán)境中執(zhí)行寫入時復制的“數(shù)據(jù)保留”應用程序的一個示例。最初,管理員決定獲取文件“我的文件”的即時點圖像1700。執(zhí)行管理命令以保留“我的文件”(1710),然后再由文件系統(tǒng)服務器從客戶端應用程序獲取對文件“我的文件”的控制權。例如,文件系統(tǒng)服務器從客戶端應用程序拿走文件的任何分布式鎖定。(此步驟在非分布式的、非客戶端/服務器環(huán)境中不適用)。接下來,文件系統(tǒng)服務器更新寫入映射表以促進寫入時復制1730,服務器將控制權返回到相應的客戶端應用程序1740。從此點往后,客戶端應用程序對“我的文件”的任何更新都會導致對該文件的該特定部分執(zhí)行寫入時復制,同時仍保留舊的數(shù)據(jù)路徑(即,讀取映射表中的物理塊號可以得到維護以保留初始的文件引用)。
具體示例下面提供了本發(fā)明的各個方面的一個詳細的實現(xiàn)方式。在此詳細的說明中,有兩種可能的輸入/輸出(I/O)操作類型,即,緩沖I/O和直接I/O。
被緩沖的I/O被緩沖的I/O表示通過緩沖區(qū)高速緩存執(zhí)行的I/O。在此情況下,讀取/寫入首先進入高速緩存中,然后,此高速緩存的數(shù)據(jù)被硬化到存儲單元(例如,磁盤)。
對現(xiàn)有文件的更新是通過將數(shù)據(jù)讀取到高速緩存中來執(zhí)行的。將所有更改應用到高速緩存/緩沖頁面,然后將數(shù)據(jù)寫回到磁盤??紤]到這一事實,實現(xiàn)了這里所說明的寫入時復制,而沒有增加任何開銷。作為示例,即將訪問分布式文件系統(tǒng)的客戶端可能包括至少兩個組件即,(i)可安裝的文件系統(tǒng)(IFS),這是操作系統(tǒng)特定的,處理來自應用程序的請求,并與緩沖存儲器系統(tǒng)和諸如磁盤之類的存儲設備進行通信,以及(ii)客戶端狀態(tài)管理器(CSCM),這對于所有操作系統(tǒng)通用,并處理鎖定管理和與服務器的通信。從快閃復制的角度來看,IFS與CSM進行聯(lián)系,以便進行下列操作。
●讀取-使用CSM API,csmTranslateBlocks()來獲取虛擬到物理的轉換。
●寫入-分兩個步驟進行1.IFS需要確保在接受到頁面緩存的任何寫入操作之前具有備份的塊。因此它通過其API,csmAttachBlocks()調用CSM。
2.在csmAttachBlocks成功之后,IFS允許寫入操作通過。
●DirectIO在此情況下,寫入操作將直接進入到磁盤。
●BufferedIO這里IFS需要將頁面放到緩存中,對它進行修改,然后寫入到磁盤。
●截斷-使用CSM API,csmDetachBlocks()縮短文件。
IFS使用下列三個接口來執(zhí)行與文件塊相關的操作。
1.csmAttachBlocks()當IFS的意圖是write()時,將使用此接口。如果CSM無法通過其高速緩存滿足此請求,則它將類型stpMsgType_BlkDiskAllocate的事務發(fā)送到服務器。
2.csmTranslateBlocks()此接口可以用于read()或write()。在讀取操作期間以及在硬化高速緩存(寫入操作的一部分)的過程中,IFS可以使用此接口。如果CSM無法通過其高速緩存滿足此請求,則它將類型stpMsgType_BlkDiskGetSegment的事務發(fā)送到服務器。
3.csmDetachBlocks()它用于truncate()。
根據(jù)本發(fā)明的一個方面,在CSM中維護了兩種類型的虛擬到物理的映射。
1.讀取轉換這說明什么是讀取操作的虛擬到物理的映射。
2.寫入轉換這說明什么是寫入操作的虛擬到物理的映射。
在一個實施例中,一個分段可能具有下列三種狀態(tài)的讀取和寫入轉換列表。
●有效的讀取轉換但無效寫入轉換。
●有效的寫入轉換但無效的讀取轉換。
●讀取和寫入轉換兩者都有效。
讀取
●對于讀取系統(tǒng)調用,IFS調用csmTranslateBlocks(),設置了讀取標志,以表示它需要讀取轉換。
●對于“讀取”轉換,CSM首先查看寫入轉換。如果它存在并在使用中,它將返回寫入塊轉換。
●如果不,則CSM查看讀取轉換。如果它們可用,并且它們在使用中,則它們將被返回●如果不,CSM返回零,表示這些塊需要用零填充。
寫入●對于寫入系統(tǒng)調用,IFS調用csmAttachBlocks()。當成功時,它保證分配備份塊。
●如果是更新,IFS需要將塊放到緩存中。因此,PageIn線程調用csmTranslateBlocks(),并帶有讀取標志。從上述讀取邏輯來看,IFS獲取塊轉換。(對于寫入到新塊中的操作,此步驟將被忽略)。
●現(xiàn)在IFS更新緩存內的頁面,一旦它準備將該頁面刷新到磁盤中,它再次用寫入標志調用csmTranslateBlocks()?,F(xiàn)在CSM只需要提供寫入轉換。
IFS使用在前面的步驟中給出的轉換并刷新高速緩存(寫入到磁盤)。
截斷●IFS調用csmDetachBlocks()以便進行文件收縮。
●CSM需要將對應的虛擬塊的讀取和寫入轉換標記為無效狀態(tài)。
上述操作將在CSM的緩存中執(zhí)行。每隔一定間隔,或在特定的條件下,CSM可以通過blkdisk更新用修改更新服務器。此外,上文的討論主要假設了寫入操作是“高速緩存/緩沖IO”。對于“directI/O”寫入,情況就有點不同了。
直接I/O由于在塊邊界上直接的I/O不總是會發(fā)生,對于write()的未對齊的部分,我們可能需要模仿高速緩存I/O。
響應stpMsgType_BlkDiskAllocate或stpMsgType_BlkDiskGetSegment,對于每個請求的分段,CSM獲取盤區(qū)的列表。這些段轉換被拆除并存儲在CSM的高速緩存中。
如果讀取轉換正好與寫入轉換相同,則服務器可能不發(fā)送讀取轉換。這可能是一個優(yōu)化。
每個分段都由名為mcBlkDiskSegment的數(shù)據(jù)結構來表示。
此高速緩存內段結構的元素可以包括
客戶端在排他數(shù)據(jù)鎖定下只更改s_readBlockUsedState和s_writeBlockUsedState。段轉換的其余部分在客戶端保持不變。因此,當發(fā)送更新時,客戶端只將這兩個位圖發(fā)送到服務器。
讀取操作不更改任何位圖,即,它使用s_readBlockUsedState或s_writeBlockUsedState來提供讀取轉換,但它不更改后者。
寫入操作只對s_writeBlockUsedState進行操作,而不使用s_readBlockUsedState。與讀取操作不同的是,它可以更改(只設置)swriteBlockUsedState的位圖以表示成功的寫入操作。
截尾操作可以更改兩個位圖。
因此,簡而言之,讀取操作不更改任何位,寫入操作可以設置s_writeBlockUsedState位圖向量中的幾個位,截尾操作可以取消設置位圖向量中的位。
概括起來說,在高速緩存I/O的情況下,幾乎可以不用任何成本即可實現(xiàn)寫入時復制(COW)。這是因為,通常有兩個不同的線程/操作涉及寫入操作的完成,即1.將要更新/更改的目標數(shù)據(jù)放到高速緩存中的PageIn線程/操作;以及2.將已更新的頁面刷新到磁盤上的PageOut線程/操作。
給定了這種情況,對于PageIn,可以使用讀取轉換COW,對于PageOut,可以使用寫入轉換來執(zhí)行COW請看下面的示例在創(chuàng)建新文件時,CSM獲取-寫入塊盤區(qū)-NULL讀取塊盤區(qū)由于這是一個新文件,沒什么需要PageIn,因此寫入數(shù)據(jù)將進入到高速緩存的空白頁中。
隨著寫入操作的進行,IFS設置(通過CSM接口)s_writeBlockUsedState位向量中的對應的位,表明它們正在使用中。
如上所述,此塊范圍中的未來的讀取和寫入從寫入盤區(qū)中獲取轉換。
假設管理員獲取一個快閃副本
作為快閃復制操作的一部分,服務器從客戶端撤消全部數(shù)據(jù)鎖定。因此,修改的數(shù)據(jù)將與磁盤同步,元數(shù)據(jù)將通過更新的事務發(fā)送到服務器。由于客戶端沒有數(shù)據(jù)鎖定,其任何轉換都失效。
在快閃復制之后對于讀取,客戶端調用csmTranslateBlocks(),服務器可以發(fā)送所有“讀取”轉換,但“寫入”轉換將為NULL。
對于寫入,客戶端調用csmAttachBlocks()。現(xiàn)在服務器返回讀取轉換(與上面相同),對于寫入盤區(qū)列表,服務器應該分配新的一組未使用的塊并將它們返回。如此,客戶端有兩個轉換??蛻舳耸褂米x取轉換作為“page-in”的一部分,使用寫入轉換作為“page-out”的一部分。
因此我們PageIn數(shù)據(jù)塊(它們是緩沖區(qū)高速緩存中的快閃副本的一部分),然后應用更新。當頁面調出時,我們使用寫入轉換,它們將PageOut線程指向新物理塊。
directIO的COW有點不同。對于直接IOIFS用寫入標志集調用csmTranslateBlocks(),以查看它是否有備份塊來處理寫入。在分析來自CSM的轉換之后,如果沒有分配備份塊,IFS將調用csmAttachBlocks()。
○對于csmAttachBlocks(),IFS需要將其數(shù)據(jù)鎖定從SHARED_WRITE模式切換到排它模式。
○在寫入完成之后,客戶端將這些塊標記為USED狀態(tài)。此時,客戶端需要在排它模式下持有數(shù)據(jù)鎖定。
○如果直接IO邊界不與塊大小對齊,則到最初的和最后的塊的I/O是以高速緩存的方式執(zhí)行的。執(zhí)行此項工作的步驟包括●對于“讀取轉換”,調用CSM●分配本地內核緩沖區(qū)。
●將磁盤塊寫入到新分配的內核緩沖區(qū)中●更新內核緩沖區(qū)。
●對于寫入轉換,調用CSM。
●寫入到新塊位置(寫入轉換)●調用CSM以標記新寫入塊的“USED”位。
對于中間塊,-使邊界與塊大小對齊。
-調用CSM以獲取寫入轉換。
-寫入到磁盤中。
-調用CSM以標記塊的“USED”位。
下面是客戶端上的位度量的一個示例WriteBlockUsedState Bit arrayWbitReadBlockUsedState Bit arrayRbit在括號(@<>)中表示物理塊地址。即,(@A)表示物理塊地址是A。
UD-Un-Defined.
在客戶端-服務器環(huán)境中,客戶端只將WriteBlockUsedState位陣列和ReadBlockUsedState位陣列發(fā)送到服務器。
CSM按如下方式解釋這些位和映射X=對于此塊沒有映射M=對于此塊存在映射
為確定塊的映射,CSM首先請看寫入映射,如果存在,并設置了對應的W位,然后,對于讀取和寫入操作,CSM都使用該映射。
如果存在寫入映射,但W位為零,那么CSM查找讀取映射。
如果讀取映射不存在,那么,塊被視為未使用(未初始化),并且塊只能用于寫入操作。所有讀取操作都會用零填充緩沖區(qū)。
如果讀取映射存在,那么塊被視為在使用中(已初始化),CSM假設R位是1(應該是這樣)。此狀態(tài)中的塊只被視為COW掛起,并需要COW修改其內容。
如果寫入映射不存在,那么CSM查找讀取映射。如果讀取映射存在,那么CSM假設R位是1(應該是這樣),塊被視為在使用中(初始化)(對于讀取操作而不是對于寫入操作)。在可以執(zhí)行寫入操作之前,CSM必須請求服務器分配一個新備份塊。
CSM將位向量返回到服務器,以指出當塊被使用、截斷和/或寫入時復制時塊的狀態(tài)的變化。在返回途中,服務器按如下方式解釋位。
X=不關心
如果設置了寫入位服務器忽略讀取位。
如果塊處于“已分配”狀態(tài)(即,傳統(tǒng)的“已分配”,但還沒有活動),然后它變?yōu)椤盎顒印睜顟B(tài)(即,塊可寫入并且可讀取)。
如果塊處于COW_Pending狀態(tài)(即,塊即具有讀取映射也具有寫入映射,對于COW,它們有所不同),那么塊會進入“活動”狀態(tài)(即,通過寫入映射,塊可寫入并且可讀取)。
如果沒有設置寫入位,而設置了讀取位這就向服務器表明,對于所關心的塊,沒有變化。
如果塊處于“已分配”、COW_Pending或PIT_COW_Pending狀態(tài),那么塊可以一直處于此狀態(tài),或者異步地釋放??蛻舳藷o法作出這樣的假設,塊已經(jīng)釋放或者它是否處于其中一個COW_Pending狀態(tài)。
如果沒有設置寫入位,也沒有設置讀取位這向服務器表示,塊已經(jīng)被截斷(假設它以前被分配)。
如果塊處于“未分配”狀態(tài),那么塊仍處于“未分配”狀態(tài)。
如果塊處于“已分配”狀態(tài),那么塊仍處于“已分配”狀態(tài)。
如果塊處于“活動”狀態(tài),那么塊進入“已分配”狀態(tài)。
如果塊處于“共享”狀態(tài),那么塊進入“未分配”狀態(tài),且(只)讀映射被放棄。
如果塊處于“COW_Pending”狀態(tài),那么塊進入“已分配”狀態(tài)。
如果塊處于“PIT_COW_Pending”狀態(tài),那么塊進入“已分配”狀態(tài)。
優(yōu)點優(yōu)選情況下,這里提供了一種用于在計算環(huán)境中實現(xiàn)寫入時復制的技術,通過最大限度地減少冗余輸入/輸出,使對常規(guī)數(shù)據(jù)文件寫入過程中增加的開銷最小化。這里所提供的寫入時復制技術對于上層(如標準文件系統(tǒng)驅動程序)是透明的。該技術包括使用兩個不同的同時轉換,即,讀取映射表和寫入映射表,來使用一次寫入操作在文件中實現(xiàn)數(shù)據(jù)單元的寫入時復制操作。在另一個方面,這里提供了用于跨客戶端-服務器環(huán)境的多個客戶端實現(xiàn)文件的分布式寫入時復制的技術。優(yōu)選情況下,分布式寫入時復制實現(xiàn)方式減少了對集中式服務器的負載,隨著客戶端的增加而擴展,允許繼續(xù)對文件進行寫入時復制,盡管一個或多個客戶端可能變得不可用。此外,這里所提供的分布式寫入時復制允許進行并行的寫入時復制,允許工作負荷在多個客戶端之間分布,從而更加有效地利用資源。
其他實施例雖然提供了計算環(huán)境的各種示例,但是這些只是示例而已。可以使用其他實施例。例如,雖然這里是參考文件系統(tǒng)來描述示例的,但是這只是一個示例而已。本發(fā)明的一個或多個其他方面還適用于其他環(huán)境。
本發(fā)明可以應用于具有計算機可使用的介質的一種制造產(chǎn)品中(例如,一個或多個計算機程序產(chǎn)品)。介質中包含了計算機可讀取的程序代碼裝置或邏輯(例如,指令、代碼、命令等等)以提供和實現(xiàn)本發(fā)明的功能。制造產(chǎn)品可以包括在計算機系統(tǒng)中或者單獨地進行銷售。
此外,還可以提供至少一個可由計算機讀取的程序存儲設備,該設備中包含了至少一個計算機可執(zhí)行的指令程序,以提供本發(fā)明的功能。
這里所描述的流程圖只是示例而已。在不偏離本發(fā)明的實質的情況下,可以對這里所描述的這些圖表或步驟(或操作)進行許多修改。例如,步驟可以按照不同的順序來執(zhí)行,或者可以添加、刪除或修改步驟。所有這些修改都被視為本發(fā)明的一部分。
雖然這里詳細描述了優(yōu)選的實施例,但是那些本領域技術人員將理解,在不偏離本發(fā)明的精神的情況下,可以進行各種修改、添加、替換等等,這些都被視為如下面的權利要求所定義的本發(fā)明的范圍內。
權利要求
1.一種在計算環(huán)境中實現(xiàn)寫入時復制的方法,包括(i)使用第一映射表執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用;以及(ii)使用第二映射表執(zhí)行第二虛擬塊到物理塊的映射,供將文件的修改的數(shù)據(jù)塊寫入到物理存儲器使用,其中,數(shù)據(jù)塊的寫入時復制是使用單一的寫入操作來實現(xiàn)的。
2.根據(jù)權利要求1所述的方法,其中,所述第一映射表包括讀取映射表,所述第二映射表包括寫入映射表,其中,所述寫入映射表包含至少一個虛擬塊,該虛擬塊所映射到的物理存儲器的物理塊與讀取映射表的對應的從虛擬塊映射到的物理塊相比,是不同的物理塊。
3.根據(jù)權利要求1所述的方法,其中,寫入時復制實現(xiàn)方式進一步包括,最初確定修改是包括部分塊寫入還是完全塊寫入,如果是部分塊寫入,那么執(zhí)行所述使用(i)和所述使用(ii),否則執(zhí)行所述使用(ii)而不執(zhí)行所述使用(i)。
4.根據(jù)權利要求1所述的方法,其中,所述使用(i)包括將數(shù)據(jù)塊從物理存儲器讀取到緩沖區(qū)中,并且其中,所述方法進一步包括在執(zhí)行所述使用(ii)之前修改緩沖區(qū)中的數(shù)據(jù)塊。
5.根據(jù)權利要求1所述的方法,其中,計算環(huán)境包括一個客戶端-服務器環(huán)境,該環(huán)境包括文件系統(tǒng)服務器和至少一個客戶端,并且其中,所述使用(i)和所述使用(ii)是由客戶端-服務器環(huán)境的至少一個客戶端執(zhí)行的。
6.根據(jù)權利要求5所述的方法,其中,至少一個客戶端所執(zhí)行的所述使用(i)和所述使用(ii)進一步包括,在執(zhí)行文件的數(shù)據(jù)塊的寫入時復制時,對文件系統(tǒng)服務器進行至少一次調用,以獲取第一映射表和第二映射表中的至少一個。
7.根據(jù)權利要求5所述的方法,進一步包括在將修改的數(shù)據(jù)塊寫入到物理存儲器之后更新第一映射表,所述更新包括修改第一映射表的至少一個虛擬塊到物理塊的轉換,以與第二映射表的對應的虛擬塊到物理塊的轉換相一致。
8.根據(jù)權利要求1所述的方法,其中,計算環(huán)境包括計算單元和外部存儲單元,外部存儲單元包括物理存儲器,并且其中,使用(i)和使用(ii)是由計算單元執(zhí)行的。
9.一種在客戶端-服務器計算環(huán)境中促進寫入時復制的方法,包括在客戶端-服務器計算環(huán)境的文件系統(tǒng)服務器上維護文件的讀取映射表和寫入映射表;以及其中,讀取映射表用于執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用,寫入映射表用于執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器時使用,其中,通過使用讀取映射表和寫入映射表,可以使用單一的寫入操作實現(xiàn)數(shù)據(jù)塊的寫入時復制。
10.根據(jù)權利要求9所述的方法,其中,文件的寫入映射表包含至少一個虛擬塊,該虛擬塊所映射到的物理存儲器的物理塊與讀取映射表的對應的從虛擬塊轉換到的物理塊相比,是不同的物理塊。
11.根據(jù)權利要求9所述的方法,進一步包括在執(zhí)行文件的數(shù)據(jù)塊的寫入時復制之后更新讀取映射表,所述更新包括修改讀取映射表的至少一個虛擬塊到物理塊的轉換,以與寫入映射表的對應的虛擬塊到物理塊的轉換相一致。
12.一種在具有許多客戶端的客戶端-服務器環(huán)境內實現(xiàn)文件的寫入時復制的方法,所述方法包括使用客戶端-服務器環(huán)境的多個客戶端執(zhí)行文件的寫入時復制,所述執(zhí)行包括(i)由多個客戶端中的第一客戶端執(zhí)行文件的至少一個數(shù)據(jù)塊的寫入時復制;以及(ii)由多個客戶端中的第二客戶端執(zhí)行文件的至少另一個數(shù)據(jù)塊的寫入時復制。
13.根據(jù)權利要求12所述的方法,其中,所述執(zhí)行(i)包括由第一客戶端使用單一的寫入操作對文件的至少一個數(shù)據(jù)塊執(zhí)行寫入時復制,并且其中,所述執(zhí)行(ii)包括由第二客戶端使用單一的寫入操作對至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制。
14.根據(jù)權利要求13所述的方法,其中,客戶端-服務器環(huán)境的文件系統(tǒng)服務器與包含文件的至少一個共享存儲設備關聯(lián),并且其中,文件系統(tǒng)服務器維護了至少一個共享存儲設備中存儲的文件的映射表,所述執(zhí)行(i)包括由第一客戶端從文件系統(tǒng)服務器獲取文件的讀取映射表和寫入映射表,在執(zhí)行文件的至少一個數(shù)據(jù)塊的所述寫入時復制時使用所述讀取映射表和所述寫入映射表,并且其中,所述執(zhí)行(ii)包括由第二客戶端從文件系統(tǒng)服務器獲取文件的讀取映射表和寫入映射表,在執(zhí)行文件的至少另一個數(shù)據(jù)塊的所述寫入時復制時使用讀取映射表和寫入映射表。
15.根據(jù)權利要求14所述的方法,進一步包括由第一客戶端通知文件系統(tǒng)服務器,第一客戶端執(zhí)行了文件的至少一個數(shù)據(jù)塊的寫入時復制,響應這種情況,更新文件系統(tǒng)服務器維護的文件的讀取映射表和寫入映射表中的至少一個。
16.根據(jù)權利要求14所述的方法,其中,文件系統(tǒng)服務器阻止許多客戶端中的任何客戶端對由第一客戶端進行過寫入時復制更新的文件的至少一個數(shù)據(jù)塊和由第二客戶端進行過寫入時復制更新的文件的至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制。
17.根據(jù)權利要求12所述的方法,其中,客戶端-服務器環(huán)境的文件系統(tǒng)服務器與包含文件的至少一個共享存儲設備關聯(lián),并且其中,該方法進一步包括由文件系統(tǒng)服務器獲取對文件的控制,以啟動文件的寫入時復制,所述啟動包括更新要由所述執(zhí)行(i)和所述執(zhí)行(ii)使用的文件的寫入映射表。
18.一種在客戶端-服務器環(huán)境內促進文件的寫入時復制的方法,所述方法包括從文件系統(tǒng)服務器控制存儲在客戶端-服務器環(huán)境的共享存儲單元中的文件的寫入時復制的實現(xiàn)方式,所述控制包括允許客戶端-服務器環(huán)境的第一客戶端對文件中的一部分數(shù)據(jù)執(zhí)行寫入時復制操作,并允許客戶端-服務器環(huán)境的第二客戶端對文件中的不同部分的數(shù)據(jù)執(zhí)行寫入時復制操作,其中,文件系統(tǒng)服務器控制和促進文件的分布式寫入時復制的執(zhí)行。
19.根據(jù)權利要求18所述的方法,其中,所述控制包括由文件系統(tǒng)服務器獲取對文件的控制,以啟動對文件的寫入時復制,所述啟動包括更新要在執(zhí)行寫入時復制時使用的文件的至少一個映射表。
20.根據(jù)權利要求18所述的方法,進一步包括在文件系統(tǒng)服務器上維護文件的讀取映射表和寫入映射表,其中,讀取映射表和寫入映射表在執(zhí)行寫入時復制時使用。
21.根據(jù)權利要求20所述的方法,進一步包括在執(zhí)行寫入時復制之后更新文件的讀取映射表和寫入映射表中的至少一個。
22.根據(jù)權利要求18所述的方法,其中,所述控制進一步包括,作為文件的復制時寫入的一部分,由文件系統(tǒng)服務器阻止對由第一客戶端進行過寫入時復制更新的文件的一部分數(shù)據(jù)進行任何另外的更新或對由第二客戶端進行過寫入時復制更新的文件的不同部分的數(shù)據(jù)進行任何另外的更新。
23.一種在計算環(huán)境中實現(xiàn)寫入時復制的系統(tǒng),所述系統(tǒng)包括(i)一種裝置,用于使用第一映射表執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的一個數(shù)據(jù)塊以便進行修改時使用;以及(ii)一種裝置,使用第二映射表執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器時使用,其中,數(shù)據(jù)塊的寫入時復制是使用單一的寫入操作來實現(xiàn)的。
24.根據(jù)權利要求23所述的系統(tǒng),其中,所述第一映射表包括讀取映射表,所述第二映射表包括寫入映射表,并且其中,所述寫入映射表包含至少一個虛擬塊,該虛擬塊所映射到的物理存儲器的物理塊與讀取映射表的對應的從虛擬塊映射到的物理塊相比,是不同的物理塊。
25.根據(jù)權利要求23所述的系統(tǒng),其中,寫入時復制實現(xiàn)方式進一步包括一種裝置,用于最初確定修改是包括部分塊寫入還是完全塊寫入,如果是部分塊寫入,那么用于執(zhí)行所述使用(i)和所述使用(ii),否則用于執(zhí)行所述使用(ii)而不執(zhí)行所述使用(i)。
26.根據(jù)權利要求23所述的系統(tǒng),其中,所述用于使用(i)的裝置包括用于將數(shù)據(jù)塊從物理存儲器讀取到緩沖區(qū)中的裝置,并且其中,所述系統(tǒng)進一步包括用于在執(zhí)行所述使用(ii)之前修改緩沖區(qū)中的數(shù)據(jù)塊的裝置。
27.根據(jù)權利要求23所述的系統(tǒng),其中,計算環(huán)境包括一個客戶端-服務器環(huán)境,該環(huán)境包括文件系統(tǒng)服務器和至少一個客戶端,并且其中,所述用于使用(i)的裝置和所述用于使用(ii)的裝置是由客戶端-服務器環(huán)境的至少一個客戶端執(zhí)行的。
28.根據(jù)權利要求27所述的系統(tǒng),其中,所述用于至少一個客戶端所執(zhí)行的使用(i)的裝置和所述用于使用(ii)的裝置進一步包括一種裝置,用于在執(zhí)行文件的數(shù)據(jù)塊的寫入時復制時,對文件系統(tǒng)服務器進行至少一次調用,以獲取第一映射表和第二映射表中的至少一個。
29.根據(jù)權利要求27所述的系統(tǒng),進一步包括一種裝置,用于在將修改的數(shù)據(jù)塊寫入到物理存儲器之后更新第一映射表,所述用于更新的裝置包括一種裝置,用于修改第一映射表的至少一個虛擬塊到物理塊的轉換,以與第二映射表的對應的虛擬塊到物理塊的轉換相一致。
30.根據(jù)權利要求23所述的系統(tǒng),其中,計算環(huán)境包括計算單元和外部存儲單元,外部存儲單元包括物理存儲器,并且其中,用于使用(i)的裝置和用于使用(ii)的裝置是由計算單元執(zhí)行的。
31.一種在客戶端-服務器計算機環(huán)境中促進寫入時復制的系統(tǒng),所述系統(tǒng)包括一種裝置,用于在客戶端-服務器計算環(huán)境的文件系統(tǒng)服務器上維護文件的讀取映射表和寫入映射表;以及其中,讀取映射表用于執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用,寫入映射表用于執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器時使用,其中,通過使用讀取映射表和寫入映射表,可以使用單一的寫入操作實現(xiàn)數(shù)據(jù)塊的寫入時復制。
32.根據(jù)權利要求31所述的系統(tǒng),其中,文件的寫入映射表包含至少一個虛擬塊,該虛擬塊所映射到的物理存儲器的物理塊與讀取映射表的對應的從虛擬塊轉換到的物理塊相比,是不同的物理塊。
33.根據(jù)權利要求31所述的系統(tǒng),進一步包括一種裝置,用于在執(zhí)行文件的數(shù)據(jù)塊的寫入時復制之后更新讀取映射表,所述用于更新的裝置包括一種裝置,用于修改讀取映射表的至少一個虛擬塊到物理塊的轉換,以與寫入映射表的對應的虛擬塊到物理塊的轉換相一致。
34.一種在具有許多客戶端的客戶端-服務器環(huán)境內實現(xiàn)文件的寫入時復系統(tǒng)的系統(tǒng),所述系統(tǒng)包括(i)一種裝置,用于在客戶端-服務器環(huán)境的第一客戶端上對要被寫入時復制的文件的至少一個數(shù)據(jù)塊執(zhí)行寫入時復制;以及(ii)一種裝置,用于在客戶端-服務器環(huán)境的第二客戶端上對要被寫入時復制的文件的至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制,其中,對文件的不同的部分的寫入時復制是由客戶端-服務器環(huán)境中的許多客戶端的不同的客戶端執(zhí)行的。
35.根據(jù)權利要求34所述的系統(tǒng),其中,所述用于執(zhí)行(i)的裝置包括一種裝置,用于由第一客戶端使用單一的寫入操作執(zhí)行文件的至少一個數(shù)據(jù)塊的寫入時復制,并且其中,所述用于執(zhí)行(ii)的裝置包括一種裝置,用于由第二客戶端使用單一的寫入操作執(zhí)行至少另一個數(shù)據(jù)塊的寫入時復制。
36.根據(jù)權利要求35所述的系統(tǒng),其中,客戶端-服務器環(huán)境的文件系統(tǒng)服務器與包含文件的至少一個共享存儲設備關聯(lián),并且其中,文件系統(tǒng)服務器維護了至少一個共享存儲設備中存儲的文件的映射表,所述用于執(zhí)行(i)的裝置包括一種裝置,用于由第一客戶端從文件系統(tǒng)服務器獲取文件的讀取映射表和寫入映射表,在執(zhí)行文件的至少一個數(shù)據(jù)塊的所述寫入時復制時使用所述讀取映射表和所述寫入映射表,并且其中,所述用于執(zhí)行(ii)的裝置包括一種裝置,用于由第二客戶端從文件系統(tǒng)服務器獲取文件的讀取映射表和寫入映射表,在執(zhí)行文件的至少另一個數(shù)據(jù)塊的所述寫入時復制時使用讀取映射表和寫入映射表。
37.根據(jù)權利要求36所述的系統(tǒng),進一步包括一種裝置,用于由第一客戶端通知文件系統(tǒng)服務器,第一客戶端執(zhí)行了文件的至少一個數(shù)據(jù)塊的寫入時復制,響應這種情況,用于更新文件系統(tǒng)服務器維護的文件的讀取映射表和寫入映射表中的至少一個。
38.根據(jù)權利要求36所述的系統(tǒng),其中,文件系統(tǒng)服務器阻止許多客戶端中的任何客戶端對由第一客戶端進行過寫入時復制更新的文件的至少一個數(shù)據(jù)塊和由第二客戶端進行過寫入時復制更新的文件的至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制。
39.根據(jù)權利要求34所述的系統(tǒng),其中,客戶端-服務器環(huán)境的文件系統(tǒng)服務器與包含文件的至少一個共享存儲設備關聯(lián),并且其中,系統(tǒng)進一步包括一種裝置,用于由文件系統(tǒng)服務器獲取對文件的控制,以啟動文件的寫入時復制,所述用于啟動的裝置包括一種裝置,用于更新要由所述執(zhí)行(i)和所述執(zhí)行(ii)使用的文件的寫入映射表。
40.一種促進在客戶端-服務器環(huán)境中進行文件的寫入時復制的系統(tǒng),所述系統(tǒng)包括一種裝置,用于從文件系統(tǒng)服務器控制存儲在客戶端-服務器環(huán)境的共享存儲單元中的文件的寫入時復制的實現(xiàn)方式,所述用于控制的裝置包括一種裝置,用于允許客戶端-服務器環(huán)境的第一客戶端對文件中的一部分數(shù)據(jù)執(zhí)行寫入時復制操作,并允許客戶端-服務器環(huán)境的第二客戶端對文件中的不同部分的數(shù)據(jù)執(zhí)行寫入時復制操作,其中,文件系統(tǒng)服務器控制和促進文件的分布式寫入時復制的執(zhí)行。
41.根據(jù)權利要求40所述的系統(tǒng),其中,所述用于控制的裝置包括一種裝置,用于由文件系統(tǒng)服務器獲取對文件的控制,以啟動文件的寫入時復制,所述啟動包括更新要在執(zhí)行寫入時復制時使用的文件的至少一個映射表。
42.根據(jù)權利要求40所述的系統(tǒng),進一步包括一種裝置,用于在文件系統(tǒng)服務器上維護文件的讀取映射表和寫入映射表,其中,讀取映射表和寫入映射表在執(zhí)行寫入時復制時使用。
43.根據(jù)權利要求42所述的系統(tǒng),進一步包括一種裝置,用于在執(zhí)行寫入時復制之后更新文件的讀取映射表和寫入映射表中的至少一個。
44.根據(jù)權利要求40所述的系統(tǒng),其中,所述用于控制的裝置進一步包括一種裝置,用于作為文件的復制時寫入的一部分,由文件系統(tǒng)服務器阻止對由第一客戶端進行過寫入時復制更新的文件的一部分數(shù)據(jù)進行任何另外的更新或對由第二客戶端進行過寫入時復制更新的文件的不同部分的數(shù)據(jù)進行任何另外的更新。
45.一種制造產(chǎn)品,包括至少一個計算機可使用的介質,該介質具有計算機可讀取的程序代碼邏輯,用于在計算環(huán)境中實現(xiàn)寫入時復制,計算機可讀取的程序代碼邏輯包括(i)一個邏輯,用于使用第一映射表執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用;以及(ii)一種邏輯,用于使用第二映射表執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器使用,其中,數(shù)據(jù)塊的寫入時復制是使用單一的寫入操作來實現(xiàn)的。
46.根據(jù)權利要求45所述的產(chǎn)品,其中,計算環(huán)境包括客戶端-服務器環(huán)境,該環(huán)境包括文件系統(tǒng)服務器和至少一個客戶端,其中,所述用于使用(i)的邏輯和所述用于使用(ii)的邏輯是由客戶端-服務器環(huán)境中的至少一個客戶端執(zhí)行的。
47.根據(jù)權利要求45所述的產(chǎn)品,其中,由至少一個客戶端執(zhí)行的所述用于使用(i)的邏輯和所述用于使用(ii)的邏輯進一步包括一種邏輯,用于在執(zhí)行文件的數(shù)據(jù)塊的寫入時復制時,對文件系統(tǒng)服務器進行至少一次調用,以獲取第一映射表和第二映射表中的至少一個。
48.根據(jù)權利要求45所述的產(chǎn)品,其中,計算環(huán)境包括計算單元和外部存儲器單元,外部存儲器單元包括物理存儲器,其中,使用(i)的邏輯和使用(ii)的邏輯是由計算單元執(zhí)行的。
49.一種制造產(chǎn)品,包括至少一個計算機可使用的介質,該介質具有計算機可讀取的程序代碼邏輯,用于在客戶端-服務器計算環(huán)境中促進寫入時復制,計算機可讀取的程序代碼邏輯包括一種邏輯,用于在客戶端-服務器計算環(huán)境的文件系統(tǒng)服務器中維護文件的讀取映射表和寫入映射表,其中,讀取映射表用于執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用,寫入映射表用于執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器時使用,其中,通過使用讀取映射表和寫入映射表,可以使用單一的寫入操作實現(xiàn)數(shù)據(jù)塊的寫入時復制。
50.一種制造產(chǎn)品,包括至少一個計算機可使用的介質,該介質具有計算機可讀取的程序代碼邏輯,用于在具有許多客戶端的客戶端-服務器計算環(huán)境中實現(xiàn)文件的寫入時復制,計算機可讀取的程序代碼邏輯包括用于使用客戶端-服務器環(huán)境的多個客戶端執(zhí)行文件的寫入時復制的邏輯,所述用于執(zhí)行的邏輯包括(i)一種邏輯,用于由多個客戶端中的第一客戶端對文件的至少一個數(shù)據(jù)塊執(zhí)行寫入時復制;以及(ii)一種邏輯,用于由多個客戶端中的第二客戶端對文件的至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制。
51.根據(jù)權利要求50所述的制造產(chǎn)品,其中,所述邏輯(i)包括一種邏輯,用于由第一客戶端使用單一的寫入操作對文件的至少一個數(shù)據(jù)塊執(zhí)行寫入時復制,其中,所述邏輯(ii)包括一種邏輯,用于由第二客戶端對文件的至少另一個數(shù)據(jù)塊執(zhí)行寫入時復制。
52.根據(jù)權利要求51所述的產(chǎn)品,其中,客戶端-服務器環(huán)境的文件系統(tǒng)服務器與包含文件的至少一個共享存儲設備關聯(lián),其中,文件系統(tǒng)服務器維護了至少一個共享存儲設備中存儲的文件的映射表,所述邏輯(i)包括一種邏輯,用于由第一客戶端從文件系統(tǒng)服務器獲取文件的讀取映射表和寫入映射表,在執(zhí)行文件的至少一個數(shù)據(jù)塊的所述寫入時復制時使用所述讀取映射表和所述寫入映射表,其中,所述邏輯(ii)包括一種邏輯,用于由第二客戶端從文件系統(tǒng)服務器獲取文件的讀取映射表和寫入映射表,在執(zhí)行文件的至少另一個數(shù)據(jù)塊的所述寫入時復制時使用讀取映射表和寫入映射表。
53.一種制造產(chǎn)品,包括至少一個計算機可使用的介質,該介質具有計算機可讀取的程序代碼邏輯,用于在客戶端-服務器環(huán)境中促進寫入時復制,計算機可讀取的程序代碼邏輯包括一種邏輯,用于從文件系統(tǒng)服務器控制存儲在客戶端-服務器環(huán)境的共享存儲單元中的文件的寫入時復制的實現(xiàn)方式,所述用于控制的邏輯包括一種邏輯,用于允許客戶端-服務器環(huán)境的第一客戶端對文件中的一部分數(shù)據(jù)執(zhí)行寫入時復制操作,還包括一種邏輯,用于允許客戶端-服務器環(huán)境的第二客戶端對文件中的不同部分的數(shù)據(jù)執(zhí)行寫入時復制操作,其中,文件系統(tǒng)服務器控制和促進文件的分布式寫入時復制的執(zhí)行。
54.根據(jù)權利要求53所述的產(chǎn)品,其中,所述用于控制的邏輯包括一種邏輯,用于由文件系統(tǒng)服務器獲取對文件的控制,以啟動文件的寫入時復制,所述啟動包括更新要在執(zhí)行寫入時復制時使用的文件的至少一個映射表。
55.根據(jù)權利要求53所述的產(chǎn)品,進一步包括一種邏輯,用于在文件系統(tǒng)服務器上維護文件的讀取映射表和寫入映射表,其中,讀取映射表和寫入映射表在執(zhí)行寫入時復制時使用。
全文摘要
提供了用于計算環(huán)境的各種寫入時復制實現(xiàn)方式。一種寫入時復制實現(xiàn)方式包括使用讀取映射表執(zhí)行第一虛擬塊到物理塊的映射,供在從物理存儲器讀取文件的數(shù)據(jù)塊以便進行修改時使用;使用不同的寫入映射表執(zhí)行第二虛擬塊到物理塊的映射,供在將文件的修改的數(shù)據(jù)塊寫入到物理存儲器時使用,其中,數(shù)據(jù)塊的寫入時復制是使用單一的寫入操作來實現(xiàn)的。在另一種實現(xiàn)方式中,提供了用于客戶端-服務器環(huán)境的文件的分布式寫入時復制。此分布式寫入時復制包括由第一客戶端執(zhí)行要被寫入時復制的文件的至少一個數(shù)據(jù)塊的寫入時復制;由第二客戶端執(zhí)行要被寫入時復制的文件的至少另一個數(shù)據(jù)塊的寫入時復制,其中,多個客戶端執(zhí)行文件的寫入時復制。
文檔編號G06F12/10GK1542626SQ20041003469
公開日2004年11月3日 申請日期2004年4月23日 優(yōu)先權日2003年4月29日
發(fā)明者拉賈格帕·阿納薩拉納拉亞南, 拉爾夫·A·貝克-澤恩迪, 羅伯特·M·里斯, 蘭德爾·C·伯恩斯, 達雷爾·D·E·龍, 溫卡特絲瓦拉勞·朱朱里, 戴維·M·沃爾夫, 賈森·C·揚, A 貝克-澤恩迪, C 伯恩斯, D E 龍, M 里斯, C 揚, M 沃爾夫, 絲瓦拉勞 朱朱里, 拉賈格帕 阿納薩拉納拉亞南 申請人:國際商業(yè)機器公司