利用寫時差異的數(shù)據(jù)共享的制作方法
【專利摘要】當虛擬機對跨多個VM共享的頁面進行寫時,計算共享值用以確定如果實現(xiàn)所述寫命令則該頁面將會多么不同。如果該共享值低于預定義的閾值(意為頁面將不會“太不同”),則不拷貝該頁面(如將以標準的寫時拷貝操作)。而是,將頁面的內(nèi)容之間的差異存儲為自包含差量。物理-機器的存儲器映射被更新為指向差量,并且差量包含到原始頁面的指針。當VM需要訪問被存儲為差量的頁面時,從存儲器取得差量和原始頁面,并且重建頁面。
【專利說明】利用寫時差異的數(shù)據(jù)共享
【技術領域】
[0001]本發(fā)明涉及數(shù)據(jù)處理,尤其涉及用于共享數(shù)據(jù)的系統(tǒng)、方法和計算機程序產(chǎn)品。
【背景技術】
[0002]在過去的十年間,虛擬化技術已經(jīng)十分成熟,并且已經(jīng)遍及服務業(yè)特別是用于服務器整合。目前,研究和商業(yè)行業(yè)正專注于優(yōu)化虛擬環(huán)境,從而能夠在單個服務器上封裝更多的虛擬機(VM),降低在數(shù)據(jù)中心環(huán)境中所消耗的功率,降低虛擬化方案的成本,并且高效地使用可用的計算資源。由于操作系統(tǒng)(OS)和應用程序變得更加資源密集并且需要大量物理存儲器以避免頻繁分頁(frequent paging),所以在服務器上容納更多VM的一個重大限制因素是存儲器。
[0003]用于更高效地使用存儲器的已知技術包括(I)基于內(nèi)容的頁面共享(content-based page sharing)以及(2)差分機(difference engine)?;趦?nèi)容的頁面共享在多個VM中共享相同的頁面,從而減少了所需的物理存儲器的量。差分機共享相同的以及相似的頁面(大部分內(nèi)容相同但是一些內(nèi)容不同),并且也減少了所需的物理存儲器的量。與基于內(nèi)容的共享相比,差分機技術顯著地減少了所需的物理存儲器的量,但是由于其實現(xiàn)了最近未使用(Not Recently Used,NRU)策略并且需要對全部存儲器進行定期掃描,所以其在計算上開銷巨大。
[0004]兩種技術均實現(xiàn)寫時拷貝(copy-on-write)技術從而避免頁面被毀壞(corrupt)。當接收到寫命令以修改共享頁面時,寫時拷貝技術使共享頁面被拷貝并且對該拷貝實現(xiàn)寫命令。寫時拷貝技術由此防止共享頁面被毀壞,但是由于共享頁面必需被拷貝,所以只要接收到寫命令,那么任何存儲器的減少都被逆轉。
【發(fā)明內(nèi)容】
[0005]在本發(fā)明的一個實施例中,一種計算機實現(xiàn)的用于共享數(shù)據(jù)的方法,包括:由計算機接收用于修改共享數(shù)據(jù)的寫命令;由計算機確定(i)共享數(shù)據(jù)與(ii)在實現(xiàn)寫命令情況下的共享數(shù)據(jù)之間的共享內(nèi)容的量;由計算機將所確定的共享內(nèi)容的量與預定義的閾值進行比較;如果所確定的共享內(nèi)容的量高于預定義的閾值,則由計算機創(chuàng)建并存儲差量,差量描述(i)共享數(shù)據(jù)與(ii)在實現(xiàn)寫命令情況下的共享數(shù)據(jù)之間的差異;以及如果所確定的共享內(nèi)容的量不高于預定義的閾值,則由計算機創(chuàng)建共享數(shù)據(jù)的拷貝、根據(jù)寫命令所指示來修改共享數(shù)據(jù)的拷貝、并且存儲經(jīng)修改的共享數(shù)據(jù)的拷貝。
[0006]除了如上所述的用于共享數(shù)據(jù)的方法以外,本發(fā)明的其它方面還涉及用于共享數(shù)據(jù)的相應的系統(tǒng)和計算機程序產(chǎn)品。
【專利附圖】
【附圖說明】
[0007]如此已經(jīng)概括地描述了本發(fā)明,現(xiàn)在將對附圖進行參照,所述附圖并不必須按比例繪制,并且其中:[0008]圖1是根據(jù)本發(fā)明一實施例的共享數(shù)據(jù)的方法的流程圖;
[0009]圖2A-圖2D示出了根據(jù)本發(fā)明的實施例的存儲器映射的實例;
[0010]圖3是本發(fā)明的實施例可在其中操作的計算機網(wǎng)絡的示意性框圖;以及
[0011]圖4是圖3的網(wǎng)絡中的計算機的示意性框圖。
【具體實施方式】
[0012]本發(fā)明的實施例可提供用于改進當前的存儲器共享技術的能力。盡管在本文中將關于虛擬機描述本發(fā)明的實施例,但是應當理解的是,本發(fā)明的實施例可應用于其中期望進行數(shù)據(jù)共享的任何計算環(huán)境中。
[0013]在基于內(nèi)容的共享中,當VM對一頁面進行寫時,產(chǎn)生該頁面的拷貝。這些頁面不再相同,但是在大部分情形中,這些頁面具有十分相似的內(nèi)容。如果所述相似內(nèi)容可被共享,那么存儲器的節(jié)省將是顯著的。在本發(fā)明的實施例中,當VM對在跨多個VM共享的頁面進行寫時,計算共享值(share value)用以確定如果實現(xiàn)所述寫命令則該頁面將會多么不同。如果該共享值低于預定義的閾值(意為頁面將不會“太不同”),則不拷貝該頁面(與此相反,標準的寫時拷貝操作)。而是,將頁面的內(nèi)容之間的差異(difference)存儲為自包含差量(self-contained delta)。物理-機器的存儲器映射被更新為指向差量,并且差量包含到原始頁面的指針。該過程可被稱為寫時差異(difference-on-write)。當VM需要訪問被存儲為差量的頁面時,虛擬存儲器指向存儲差量的機器存儲器位置,并且差量轉而指向正在被共享的頁面。然后,從存儲器取得差量和原始頁面,并且重建頁面。
[0014]使用分頁頻繁地實現(xiàn)虛擬存儲器。由此,在本文將關于對數(shù)據(jù)頁面進行共享描述本發(fā)明的實施例。然而,可以對通過使用不同于分頁的技術而組織/存儲/引用的數(shù)據(jù)使用本發(fā)明的實施例。在分頁中,在虛擬地址空間中的連續(xù)地址的范圍(由處理器所使用的地址的范圍)被映射至存儲介質的物理地址的相應范圍。由這種范圍引用的存儲器被稱為頁面。頁面的大小通常在512字節(jié)至8192字節(jié)的范圍內(nèi),幾千字節(jié)(例如4千字節(jié))為常見的選擇。
[0015]現(xiàn)在參照圖1以及圖2A至圖2D,根據(jù)本發(fā)明的實施例分別示出了共享數(shù)據(jù)的方法的流程圖以及存儲器映射的實例。掃描存儲器(例如,圖2A至圖2D中的機器存儲器)以識別要共享的頁面(框10)??赏ㄟ^識別相同的頁面或者僅是相似的頁面來識別待共享的頁面。盡管在圖1中這種掃描被示出為僅執(zhí)行一次,但是這種掃描可諸如周期地或基于需要而多次發(fā)生。另外,要共享的相同或相似的頁面的識別可以基于持續(xù)或實時(on-the-fly)地發(fā)生。圖2A示出了在任何頁面共享發(fā)生之前的示例存儲器映射。圖2A示出了虛擬機VM1至VMn。每個虛擬機執(zhí)行客戶操作系統(tǒng)(“客戶操作系統(tǒng)(Guest OS)”),并且可運行一個或多個應用(“應用”)。每個虛擬機利用被映射至機器存儲器的虛擬存儲器。VM1引用虛擬存儲器中的頁面1、頁面2和頁面3。轉而,這些頁面被映射至機器存儲器中的相應頁面。VM2和VMn被示出具有相似的映射后的頁面。出于本實例的目的,假定VM1,頁面2與VMn,頁面I相同。還假定對于共享,VM2,頁面I與VM1、頁面I足夠相似。
[0016]可通過使用任何適當?shù)募夹g來完成對相同頁面和相似頁面的識別。例如,可為每個頁面(為整個頁面)以及具有已識別的相同哈希值的頁面確定哈希值。所述技術在計算上是密集的。作為不僅精度較低而且計算上較不密集的另一實例,可為每個頁面識別兩個哈希函數(shù)??杉俣ㄅc那兩個哈希函數(shù)相匹配的頁面是相同的。
[0017]不論用于識別要共享的頁面的技術如何,均共享相同的頁面(框12)。共享相同的頁面包括刪除頁面的重復拷貝、更新存儲器映射以使得所有的引用均指向保留的共享頁面以及將保留的頁面標記為“已共享”。通過產(chǎn)生(“編碼”)并存儲描述一個頁面與另一相似頁面的差異的差量,也共享相似的頁面(框14)。刪除已為其編碼差量的頁面并且為該頁面將存儲器映射更新為指向差量。轉而,差量指向保留的共享頁面。保留的共享頁面被標記為“已共享”。
[0018]如上所述,出于本實例的目的,假定VM1,頁面2與VMn,頁面I相同,并且假定VM2,頁面I與VM1,頁面I對于共享足夠相似。圖2B示出了在這些頁面被共享之后的存儲器映射。如圖2B中所示,由于VMn,頁面I與VM1,頁面2相同,所以VMn,頁面I已被刪除,并且存儲器映射已被更新以使得VMn的虛擬存儲器中的頁面I指向機器存儲器中的VM1,頁面2。盡管未示出,VM1,頁面2被標記為“已共享”。
[0019]類似地,由于VM2,頁面I與VM1,頁面I相似,所以VM2,頁面I已被刪除,并且差量(Dl)已被編碼以便描述VM2,頁面I與VM1,頁面I之間的差異。存儲器映射已被更新以使得VM2的虛擬存儲器中的頁面I指向機器存儲器中的Dl,所述機器存儲器中的Dl轉而指向VM1,頁面I。盡管未示出,VM1,頁面I被標記為“已共享”。
[0020]當接收到將修改頁面的寫命令時(框16),確定該頁面是否被共享(框18)。如果該頁面未被共享,則執(zhí)行寫命令(框20)。如果該頁面被共享,則計算共享值(框22)。該共享值提供一種確定如果執(zhí)行寫命令則所產(chǎn)生的頁面將(與原始的共享頁面)多么不同的方式。盡管基于如果執(zhí)行寫命令則該頁面將看上去的樣子來計算共享值,但是在執(zhí)行寫命令之前就計算共享值(并且如下所述,可能導致不執(zhí)行寫命令)。
[0021]通過為共享數(shù)據(jù)計算第一布隆過濾器(Bloomfilter)并且在實現(xiàn)了寫命令的情況下為共享數(shù)據(jù)計算第二布隆過濾器來計算共享值。布隆過濾器是空間有效概率數(shù)據(jù)結構,其用于測試要素是成員還是集合。本發(fā)明的實施例使用布隆過濾器來簡要地表現(xiàn)頁面中所包含的信息。將邏輯AND操作應用于第一布隆過濾器和第二布隆過濾器,并且對所產(chǎn)生的位進行求和。所產(chǎn)生的和為共享值。作為計算共享值的實例,考慮具有由下面24位數(shù)據(jù)所表示的內(nèi)容的頁面X(PgX):
[0022]1000 0001 1100 0110 0000 0001。
[0023]盡管未示出,這些24位通常引用(從左至右)23至O。出于計算布隆過濾器的目的,這些24位被“分塊”為所示出的六個塊。(實際的數(shù)據(jù)頁面通常會具有遠遠多于24位,并且每個頁面被分成的塊的數(shù)量也可能不同。典型的4K頁面將具有4X 1024或4096位,并且可被“分塊”為16塊,每塊256位。)之前頁面Y(PgY)被確定為與頁面X相同,并且因而頁面Y被刪除并且存儲器映射被更新以使得頁面Y指向頁面X。現(xiàn)在假定,已接收到寫命令,以將作為左起第二組(位19至16)的4位組從“0001”變?yōu)椤?100”。
[0024]用于頁面X(BPx)的布隆過濾器被計算為:
[0025]0001000101000011。
[0026]類似地,計算用于頁面Y的布隆過濾器,就像頁面Y如寫命令中所指示的那樣被改變。用于頁面Y(BPy)的布隆過濾器被計算為:
[0027]0001000100010011。[0028]執(zhí)行BPx與BPy的邏輯AND操作,結果為:
[0029]0001000100000011。
[0030]將所產(chǎn)生的位求和,結果為共享值4。該共享值提供如果實現(xiàn)寫命令則頁面Y仍將與頁面X多么相似的數(shù)字表示。
[0031]將經(jīng)計算的共享值與預定義的閾值進行比較,從而確定共享值是否大于閾值(框24)。閾值通?;谧畲蠊蚕碇?。最大共享值與為了計算布隆過濾器而將頁面所分成的塊的數(shù)量相對應。在該實例中,24位頁面被分成6個塊,因此,最大共享值為6。如上所述,實際的數(shù)據(jù)頁面的大小可能為4K,并且可能被“分塊”為16個塊,每塊256位,從而具有最大共享值16。在本發(fā)明的一個實施例中,閾值基于最大共享值的百分比(例如50% )。
[0032]將閾值設置為最大共享值的50%意味著:當寫命令將使頁面具有小于其內(nèi)容的50%仍與原始共享頁面共同時,框24中的比較的結果將為“否”。理論是,當差異變得過大時,共享頁面將不再有意義。繼續(xù)上文的實例,將經(jīng)計算的共享值4與閾值進行比較,所述閾值為最大共享值的50%,即閾值為3。當共享值不再大于閾值時(如框24所確定的),執(zhí)行寫時拷貝操作(即,拷貝原始共享頁面,并且對拷貝執(zhí)行寫命令),原始共享頁面和拷貝均被標記為“未共享”(框26)。
[0033]如果在框24中確定經(jīng)計算的共享值大于閾值(在本實例中,由于經(jīng)計算的共享值為4并且閾值為3),則編碼差量以描述在實現(xiàn)寫命令的情況下頁面Y與頁面X之間的差異(框28)。差量包含到頁面X的指針。可將原始共享頁面(頁面X)標記為“寫時差量”,以表示存在指向原始共享頁面的差量。可使用任何適當?shù)牟盍烤幋a方法。在上文的實例中,其中寫命令已被接收,以將作為左起第二組(位19-16)的4位的組從“0001”變?yōu)椤?100”,經(jīng)編碼的差量可具有下面的格式:
[0034]拷貝5,23
[0035]求和3,100
[0036]拷貝16,15
[0037]所述差量表示:通過(a)拷貝頁面X從位置23處開始的5個位(S卩,位23_19),(b)將接下來的3個位(S卩,位18-16)變?yōu)椤?00”,以及(c)拷貝頁面X從位置15處開始的16個位(即,位15-0),可從頁面X重構頁面Y。
[0038]在圖2C中,我們看到存儲器映射的變化,如果對VMn的頁面I進行寫則會發(fā)生該變化。假定如果實現(xiàn)寫命令,共享值仍高于閾值,則對差量(“D2”)進行編碼以描述在實現(xiàn)寫命令的情況下VMn,頁面I與VM1,頁面2之間的差異。存儲器映射已被更新,使得VMn的虛擬存儲器中的頁面2指向機器存儲器中的D2,并且轉而,差量D2指向VM1,頁面2。盡管未示出,VM1,頁面2被標記為“寫時差量”。為所接收的每個寫命令重復框16-28。
[0039]只要共享值保持為大于閾值,那么對同一頁面的多次寫將產(chǎn)生連續(xù)編碼的差量。在圖2D中,我們看到存儲器映射的變化,如果再次對VMn的頁面I進行寫則會發(fā)生該變化。假定如果實現(xiàn)寫命令,共享值仍高于閾值,則對差量(D3)進行編碼以描述(a)在實現(xiàn)寫命令的情況下的VMn,頁面I與(b)在實現(xiàn)差量D2中所描述的變化的情況下的VM1,頁面2之間的差異(注意,這將需要重構頁面(即,實現(xiàn)D2中所描述的變化),以便能夠確定D3中要描述的差異)。存儲器映射已被更新,使得VMn的虛擬存儲器中的頁面2指向D3,轉而D3指向D2,轉而D2指向VM1,頁面2。[0040]通過對差量(或多個差量)進行解碼以識別在差量中被編碼的變化并且通過將那些變化應用于原始共享頁,可易于根據(jù)需要來重構已對其編碼差量(或多個差量)的任何頁面。如果多個差量被編碼,則為了適當?shù)刂貥嬳撁?,以正確的順序(最早至最新)對所述多個差量進行解碼是非常重要的。
[0041]圖3是本發(fā)明的實施例可在其中操作的計算機網(wǎng)絡的示意性框圖。計算機72和服務器74提供運行應用程序等的處理裝置、存儲、和輸入/輸出裝置。計算機72可通過通信鏈路76經(jīng)通信網(wǎng)絡70而彼此鏈接,并且可與包括服務器74的其它計算裝置鏈接。通信網(wǎng)絡70可以是當前使用TCP/IP協(xié)議組以彼此通信的因特網(wǎng)、計算機的世界范圍的集合、網(wǎng)絡和網(wǎng)關的一部分。因特網(wǎng)在主要節(jié)點之間或主機計算機之間提供高速數(shù)據(jù)通信線路的主干線,該主干線由數(shù)以千計的路由(route)數(shù)據(jù)和消息的商業(yè)、政府、教育和其它計算機網(wǎng)絡組成。然而,計算機72和服務器74可通過任何適當?shù)耐ㄐ啪W(wǎng)絡鏈接。
[0042]除了圖3的客戶機-服務器布置以外,本發(fā)明的實施例還可在任何客戶機-服務器布置中或者在任何聯(lián)網(wǎng)布置中操作,在所述客戶機-服務器布置和所述聯(lián)網(wǎng)布置中,發(fā)起通信的資源以及接收通信的資源可駐留在網(wǎng)絡中的獨立元件上。例如,本發(fā)明的實施例可在移動通信/數(shù)據(jù)結構(諸如,依附于國際移動電信-2000(也稱作3G)標準或者MT-Advanced (也稱作4G)標準的移動電信網(wǎng)絡)中操作,移動電信裝置(例如蜂窩/移動電話)在所述移動通信/數(shù)據(jù)結構中進行通信。
[0043]圖4是圖3的系統(tǒng)中的計算機(例如計算機72)或服務器的一種可能的內(nèi)部結構的示圖。每個計算機通常包括系統(tǒng)總線92,其中總線是用于在計算機的組件之間進行數(shù)據(jù)傳輸?shù)囊唤M硬件線路。本質上,總線92是連接計算機系統(tǒng)的不同元件(例如,處理器、磁盤存儲、存儲器、輸入/輸出端口、網(wǎng)絡端口等)的共享管道,其使信息能夠在元件之間傳輸。用于將各種輸入和輸出裝置(例如,顯示器、打印機、揚聲器、麥克風等)與計算機連接的I/O裝置接口 96附接到系統(tǒng)總線92??商娲?,I/O裝置可通過與系統(tǒng)總線92附接的一個或多個I/O處理器連接。網(wǎng)絡接口 100使計算機與附接于網(wǎng)絡(例如圖3的網(wǎng)絡70)的各種其它裝置相連接。存儲器80為用于實現(xiàn)本發(fā)明的實施例的計算機軟件指令82和數(shù)據(jù)84提供易失性存儲。磁盤存儲86為用于實現(xiàn)本發(fā)明的實施例的計算機軟件指令88和數(shù)據(jù)90提供非易失性存儲。中央處理器98也附接到系統(tǒng)總線92并提供用于計算機指令的運行。
[0044]所屬【技術領域】的技術人員知道,本發(fā)明的各個方面可以執(zhí)行為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本發(fā)明的各個方面可以具體執(zhí)行為以下形式,即:完全的硬件實施方式、完全的軟件實施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結合的實施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明的各個方面還可以執(zhí)行為在一個或多個計算機可讀介質中的計算機程序產(chǎn)品的形式,該計算機可讀介質中包含計算機可讀的程序代碼。
[0045]可以采用一個或多個計算機可讀介質的任意組合。計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質。計算機可讀存儲介質例如可以是一但不限于一電、磁、光、電磁、紅外線、或半導體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括:具有一個或多個導線的電連接、便攜式計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質可以是任何包含或存儲程序的有形介質,該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用。
[0046]計算機可讀的信號介質可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括一但不限于一電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質還可以是計算機可讀存儲介質以外的任何計算機可讀介質,該計算機可讀介質可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用的程序。
[0047]計算機可讀介質上包含的程序代碼可以用任何適當?shù)慕橘|傳輸,包括一但不限于一無線、有線、光纜、RF等等,或者上述的任意合適的組合。
[0048]可以以一種或多種程序設計語言的任意組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設計語言包括面向對象的程序設計語言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過程式程序設計語言一諸如“C”語言或類似的程序設計語言。如果服務還可以作為應用的REST界面,那么加載的應用能夠使用描述性語言(比如JavaScript)來訪問該REST界面)程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務提供商來通過因特網(wǎng)連接)。
[0049]下面將參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令執(zhí)行。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得這些計算機程序指令在通過計算機或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了執(zhí)行流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。
[0050]也可以把這些計算機程序指令存儲在計算機可讀介質中,這些指令使得計算機、其它可編程數(shù)據(jù)處理裝置、或其他設備以特定方式工作,從而,存儲在計算機可讀介質中的指令就產(chǎn)生出包括執(zhí)行流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的指令的制造品(article of manufacture)。
[0051]計算機程序指令還可加載在計算機、其它可編程數(shù)據(jù)處理設備或其它裝置上,從而使得能夠在計算機、其它可編程設備或其它裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計算機所執(zhí)行的處理,以便在計算機或其它可編程設備上運行的指令提供用于執(zhí)行流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的處理。
[0052]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能執(zhí)行的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于執(zhí)行規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在有些作為替換的執(zhí)行中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框實際上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來執(zhí)行,或者可以用專用硬件與計算機指令的組合來執(zhí)行。
[0053]“計算機”或“計算裝置”廣義地指接收輸入數(shù)據(jù)、通過程序中的計算機指令來處理數(shù)據(jù)、并且生成輸出數(shù)據(jù)的任何類型的裝置。這種計算機可以是手持裝置、膝上型或筆記本計算機、臺式計算機、微型計算機、大型機、服務器、蜂窩電話、個人數(shù)字助理、其它裝置、或它們的任意組合。
[0054]在本文中所使用的術語僅出于描述特定實施方式的目的,而非意在對本發(fā)明進行限制。除非上下文另外明確指出,否則如本文中所使用的單數(shù)形式的“一”、“一個”和“該”也意在包括復數(shù)形式。還應該理解的是,當在本說明書中所使用時,術語“包括”和/或“包含”具體說明所述特征、整數(shù)、步驟、操作、元素、和/或組件的存在,但是不排除存在或添加一個或多個其它特征、整數(shù)、步驟、操作、元素、組件、和/或它們的組合。
[0055]在下文權利要求中的所有裝置或步驟及功能元素的相應的結構、材料、動作及等效物意在包括如具體要求權利保護的用于執(zhí)行與其它要求保護的元素相結合的功能的任何結構、材料、或動作。為了圖示和說明的目的已經(jīng)呈現(xiàn)了本發(fā)明的說明,但是本發(fā)明的說明并不意在窮盡或限于所公開的形式中的發(fā)明。在不背離本發(fā)明的范圍和精神的情況下,很多修改和變化對于本領域技術人員而言將是顯而易見的。實施方式被選擇并描述,以便對本發(fā)明和實際應用的原理進行最佳解釋,并且使本領域其他普通技術人員能夠對適于所預期的特定使用的具有各種修改的各種實施方式的本發(fā)明進行理解。
【權利要求】
1.一種計算機實現(xiàn)的用于共享數(shù)據(jù)的方法,包括: 由計算機接收用于修改共享數(shù)據(jù)的寫命令; 由所述計算機確定(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)之間的共享內(nèi)容的量; 由所述計算機將所確定的共享內(nèi)容的量與預定義的閾值進行比較; 如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則由所述計算機創(chuàng)建并存儲差量,所述差量描述(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)之間的差異;以及 如果所確定的共享內(nèi)容的量不高于所述預定義的閾值,則由所述計算機創(chuàng)建所述共享數(shù)據(jù)的拷貝、根據(jù)所述寫命令所指示來修改所述共享數(shù)據(jù)的拷貝、并且存儲經(jīng)修改的所述共享數(shù)據(jù)的拷貝。
2.根據(jù)權利要求1所述的方法,還包括: 如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則由所述計算機將指向所述共享數(shù)據(jù)的頁面指針修改為替代指向所述差量; 其中所述差量包括到所述共享數(shù)據(jù)的指針。
3.根據(jù)權利要 求1所述的方法,其中確定共享內(nèi)容的量包括計算共享值,并且計算所述共享值包括: 由所述計算機為所述共享數(shù)據(jù)計算第一布隆過濾器; 由所述計算機為在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)計算第二布隆過濾器; 由所述計算機將邏輯AND操作應用于所述第一布隆過濾器和所述第二布隆過濾器;以及 由所述計算機對所述邏輯AND操作的結果的位進行求和。
4.根據(jù)權利要求3所述的方法,其中基于分別將所述共享數(shù)據(jù)和在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)分成預定義數(shù)量的數(shù)據(jù)塊來計算所述第一布隆過濾器和所述第二布隆過濾器。
5.根據(jù)權利要求4所述的方法,其中所述預定義的閾值包括所述預定義數(shù)量的數(shù)據(jù)塊的預定義百分比。
6.根據(jù)權利要求1所述的方法,其中所述寫命令是第一寫命令,并且所述差量是第一差量;并且其中所述方法還包括: 由所述計算機接收第二寫命令,所述第二寫命令用以修改在實現(xiàn)所述第一寫命令情況下的共享數(shù)據(jù); 由所述計算機確定(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述第一寫命令和所述第二寫命令情況下的共享數(shù)據(jù)之間的共享內(nèi)容的量; 由所述計算機將所確定的共享內(nèi)容的量與所述預定義的閾值進行比較; 如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則由所述計算機創(chuàng)建并存儲第二差量,所述第二差量描述(i)在實現(xiàn)所述第一寫命令情況下的共享數(shù)據(jù)與(ii)在實現(xiàn)所述第一寫命令和所述第二寫命令二者情況下的共享數(shù)據(jù)之間的差異;以及 如果所確定的共享內(nèi)容的量不高于所述預定義的閾值,則由所述計算機(i)創(chuàng)建所述共享數(shù)據(jù)的拷貝,(ii)解碼所述第一差量,(iii)根據(jù)所述第一差量所指示來修改所述共享數(shù)據(jù)的拷貝,(iv)根據(jù)所述第二寫命令所指示進一步修改所共享的差量的拷貝,(V)刪除所述第一差量,以及(Vi)存儲經(jīng)兩次修改的所述共享數(shù)據(jù)的拷貝。
7.一種用于共享數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括:計算機處理器、可操作地耦接于所述計算機處理器的計算機存儲器,所述計算機存儲器具有設置在其中的計算機程序指令,所述計算機程序指令經(jīng)配置用于: 接收用于修改共享數(shù)據(jù)的寫命令; 確定(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)之間的共享內(nèi)容的量; 將所確定的共享內(nèi)容的量與預定義的閾值進行比較; 如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則創(chuàng)建并存儲差量,所述差量描述(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)之間的差異;以及 如果所確定的共享內(nèi)容的量不高于所述預定義的閾值,則創(chuàng)建所述共享數(shù)據(jù)的拷貝、根據(jù)所述寫命令所指示來修改所述共享數(shù)據(jù)的拷貝、并且存儲經(jīng)修改的所述共享數(shù)據(jù)的拷貝。
8.根據(jù)權利要求7所述的系統(tǒng),其中所述計算機程序指令還經(jīng)配置用于: 如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則將指向所述共享數(shù)據(jù)的頁面指針修改為替代指向所述差量; 其中所述差量包括到所述共享數(shù)據(jù)的指針。
9.根據(jù)權利要求7所述的系統(tǒng),其中確定共享內(nèi)容的量包括計算共享值,并且計算所述共享值包括: 為所述共享數(shù)據(jù)計算第一布隆過濾器; 為在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)計算第二布隆過濾器; 將邏輯AND操作應用于所述第一布隆過濾器和所述第二布隆過濾器;以及 對所述邏輯AND操作的結果的位進行求和。
10.根據(jù)權利要求9所述的系統(tǒng),其中基于分別將所述共享數(shù)據(jù)和在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)分成預定義數(shù)量的數(shù)據(jù)塊來計算所述第一布隆過濾器和所述第二布隆過濾器。
11.根據(jù)權利要求10所述的系統(tǒng),其中所述預定義的閾值包括所述預定義數(shù)量的數(shù)據(jù)塊的預定義百分比。
12.根據(jù)權利要求7所述的系統(tǒng),其中所述寫命令是第一寫命令,并且所述差量是第一差量;并且其中所述計算機程序指令還經(jīng)配置用于: 接收第二寫命令,所述第二寫命令用以修改在實現(xiàn)所述第一寫命令情況下的共享數(shù)據(jù); 確定(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述第一寫命令和所述第二寫命令情況下的共享數(shù)據(jù)之間的共享內(nèi)容的量; 將所確定的共享內(nèi)容的量與所述預定義的閾值進行比較; 如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則創(chuàng)建并存儲第二差量,所述第二差量描述(i)在實現(xiàn)所述第一寫命令情況下的共享數(shù)據(jù)與(ii)在實現(xiàn)所述第一寫命令和所述第二寫命令二者情況下的共享數(shù)據(jù)之間的差異;以及如果所確定的共享內(nèi)容的量不高于所述預定義的閾值,則(i)創(chuàng)建所述共享數(shù)據(jù)的拷貝,(ii)解碼所述第一差量,(iii)根據(jù)所述第一差量所指示來修改所述共享數(shù)據(jù)的拷貝,(iv)根據(jù)所述第二寫命令所指示進一步修改所共享的差量的拷貝,(V)刪除所述第一差量,以及(vi)存儲經(jīng)兩次修改的所述共享數(shù)據(jù)的拷貝。
13.一種用于共享數(shù)據(jù)的計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包括其中包含有計算機可讀程序代碼的計算機可讀存儲介質,所述計算機可讀程序代碼包括: 經(jīng)配置用于接收用于修改共享數(shù)據(jù)的寫命令的計算機可讀程序代碼; 經(jīng)配置用于確定(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)之間的共享內(nèi)容的量的計算機可讀程序代碼; 經(jīng)配置用于將所確定的共享內(nèi)容的量與預定義的閾值進行比較的計算機可讀程序代碼; 經(jīng)配置用于如下操作的計算機可讀程序代碼:如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則創(chuàng)建并存儲差量,所述差量描述(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)之間的差異;以及 經(jīng)配置用于如下操作的計算機可讀程序代碼:如果所確定的共享內(nèi)容的量不高于所述預定義的閾值,則創(chuàng)建所述共享數(shù)據(jù)的拷貝、根據(jù)所述寫命令所指示來修改所述共享數(shù)據(jù)的拷貝、并且存儲經(jīng)修改的所述共享數(shù)據(jù)的拷貝。
14.根據(jù)權利 要求13所述的計算機程序產(chǎn)品,還包括: 經(jīng)配置用于如下操作的計算機可讀程序代碼:如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則將指向所述共享數(shù)據(jù)的頁面指針修改為替代指向所述差量; 其中所述差量包括到所述共享數(shù)據(jù)的指針。
15.根據(jù)權利要求13所述的計算機程序產(chǎn)品,其中確定共享內(nèi)容的量包括計算共享值,并且計算所述共享值包括: 為所述共享數(shù)據(jù)計算第一布隆過濾器; 為在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)計算第二布隆過濾器; 將邏輯AND操作應用于所述第一布隆過濾器和所述第二布隆過濾器;以及 對所述邏輯AND操作的結果的位進行求和。
16.根據(jù)權利要求15所述的計算機程序產(chǎn)品,其中基于分別將所述共享數(shù)據(jù)和在實現(xiàn)所述寫命令情況下的共享數(shù)據(jù)分成預定義數(shù)量的數(shù)據(jù)塊來計算所述第一布隆過濾器和所述第二布隆過濾器。
17.根據(jù)權利要求16所述的計算機程序產(chǎn)品,其中所述預定義的閾值包括所述預定義數(shù)量的數(shù)據(jù)塊的預定義百分比。
18.根據(jù)權利要求13所述的計算機程序產(chǎn)品,其中所述寫命令是第一寫命令,并且所述差量是第一差量;并且其中所述計算機可讀程序代碼還包括: 經(jīng)配置用于接收第二寫命令的計算機可讀程序代碼,所述第二寫命令用以修改在實現(xiàn)所述第一寫命令情況下的共享數(shù)據(jù); 經(jīng)配置用于確定(i)所述共享數(shù)據(jù)與(ii)在實現(xiàn)所述第一寫命令和所述第二寫命令情況下的共享數(shù)據(jù)之間的共享內(nèi)容的量的計算機可讀程序代碼; 經(jīng)配置用于將所確定的共享內(nèi)容的量與所述預定義的閾值進行比較的計算機可讀程序代碼; 經(jīng)配置用于如下操作的計算機可讀程序代碼:如果所確定的共享內(nèi)容的量高于所述預定義的閾值,則創(chuàng)建并存儲第二差量,所述第二差量描述(i)在實現(xiàn)所述第一寫命令情況下的共享數(shù)據(jù)與(ii)在實現(xiàn)所述第一寫命令和所述第二寫命令二者情況下的共享數(shù)據(jù)之間的差異;以及 經(jīng)配置用于如下操作的計算機可讀程序代碼:如果所確定的共享內(nèi)容的量不高于所述預定義的閾值,則(i)創(chuàng)建所述共享數(shù)據(jù)的拷貝,(ii)解碼所述第一差量,(iii)根據(jù)所述第一差量所指示來修改所述共享數(shù)據(jù)的拷貝,(iv)根據(jù)所述第二寫命令所指示進一步修改所共享的差量的拷貝,(V)刪除所述第一差量,以及(vi)存儲經(jīng)兩次修改的所述共享數(shù)據(jù)的 拷貝。
【文檔編號】G06F17/00GK104040533SQ201380005042
【公開日】2014年9月10日 申請日期:2013年1月7日 優(yōu)先權日:2012年1月9日
【發(fā)明者】M.R.霍格斯特羅姆, T.薩洛, N.沃克, M.亞達夫 申請人:國際商業(yè)機器公司