本發(fā)明有關(guān)于內(nèi)存(memory)管理,且尤其有關(guān)于具有相同內(nèi)容的內(nèi)存單元的依需(on-demand)共享。
背景技術(shù):
::在現(xiàn)代計(jì)算系統(tǒng)中,多個(gè)進(jìn)程可能使用具有同樣(identical)內(nèi)容的內(nèi)存頁(yè)面(memorypage)。計(jì)算系統(tǒng)可能是非虛擬化的(non-virtualized),如進(jìn)程可運(yùn)行在相同的操作系統(tǒng)(OperatingSystem,OS)上。計(jì)算系統(tǒng)也可能是虛擬化的,如進(jìn)程可運(yùn)行在各虛擬機(jī)中的各客戶操作系統(tǒng)(guestoperatingsystem)上,其中各虛擬機(jī)由主操作系統(tǒng)(hostoperatingsystem)管理。一般來說,操作系統(tǒng)(或主操作系統(tǒng))利用內(nèi)存管理技術(shù)來降低內(nèi)存內(nèi)容中的重復(fù)(duplication),使得內(nèi)存的利用更高效。在計(jì)算系統(tǒng)中,一個(gè)頁(yè)面(通常4K字節(jié)大小)是基本內(nèi)存單元。一個(gè)頁(yè)面占據(jù)連續(xù)的內(nèi)存地址塊。物理地址空間中的頁(yè)面被稱為物理頁(yè)面(physicalpage),且進(jìn)程的虛擬地址空間中的頁(yè)面被稱為虛擬頁(yè)面。頁(yè)面表(pagetable)用來將虛擬頁(yè)面的虛擬地址映射到物理頁(yè)面的物理地址。當(dāng)兩個(gè)物理頁(yè)面具有相同的內(nèi)容時(shí),兩個(gè)頁(yè)面可合并(merge)為一個(gè)頁(yè)面,使得另一頁(yè)面原本占據(jù)的物理內(nèi)存空間可被釋放(freed)和再使用(reused)。映射到兩個(gè)物理頁(yè)面的兩個(gè)虛擬頁(yè)面可保持其虛擬地址不變。兩個(gè)頁(yè)面合并之后,頁(yè)面表可隨之改變,以將兩個(gè)虛擬頁(yè)面映射到同一物理頁(yè)面。計(jì)算系統(tǒng)可能包含大量具有相同內(nèi)容的頁(yè)面。然而,識(shí)別(identify)和合并這些頁(yè)面的操作可能會(huì)造成大量系統(tǒng)開銷(overhead)。因此,需要一種機(jī)制,來高效進(jìn)行合并操作。技術(shù)實(shí)現(xiàn)要素:有鑒于此,本發(fā)明提供一種依需合并具有相同內(nèi)容的頁(yè)面的方法,包括:檢測(cè)到指示在內(nèi)存中合并候選頁(yè)面的事件;基于該候選頁(yè)面的當(dāng)前數(shù)目、合并頁(yè)面的當(dāng)前數(shù)目以及代表合并頁(yè)面與候選頁(yè)面比值的合并比,預(yù)測(cè)合并增益;以及當(dāng)確定該合并增益大于閾值時(shí),進(jìn)行掃描和合并操作,以將具有相同內(nèi)容且未被合并的候選頁(yè)面集合合并為具有該相同內(nèi)容的單個(gè)頁(yè)面。本發(fā)明另提供一種系統(tǒng),用來依需合并具有相同內(nèi)容的頁(yè)面,該系統(tǒng)包括:內(nèi)存;以及一個(gè)或多個(gè)處理裝置,耦接至該內(nèi)存,該一個(gè)或多個(gè)處理裝置用來檢測(cè)指示在內(nèi)存中合并候選頁(yè)面的事件;基于該候選頁(yè)面的當(dāng)前數(shù)目、合并頁(yè)面的當(dāng)前數(shù)目以及代表合并頁(yè)面與候選頁(yè)面比值的合并比,預(yù)測(cè)合并增益;以及當(dāng)確定該合并增益大于閾值時(shí),進(jìn)行掃描和合并操作,以將具有相同內(nèi)容且未被合并的候選頁(yè)面集合合并為具有該相同內(nèi)容的單個(gè)頁(yè)面。通過利用本發(fā)明,可改善系統(tǒng)性能。如下詳述本發(fā)明的最佳實(shí)施例。閱讀完以下描述和附圖后,本領(lǐng)域技術(shù)人員可輕易理解本發(fā)明的精神。附圖說明圖1是根據(jù)一實(shí)施例的系統(tǒng)的示意圖。圖2是根據(jù)本發(fā)明一實(shí)施例的合并和分離操作的示范性示意圖。圖3是根據(jù)本發(fā)明一實(shí)施例的掃描和合并操作的示范例的時(shí)間軸示意圖。圖4是根據(jù)本發(fā)明一實(shí)施例的系統(tǒng)高效共享內(nèi)存的方法的流程圖。圖5是根據(jù)本發(fā)明一實(shí)施例的依需合并具有相同內(nèi)容的頁(yè)面的方法的流程圖。具體實(shí)施方式在本專利說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定的組件。所屬領(lǐng)域中具有通常知識(shí)者應(yīng)可理解,硬件制造商可能會(huì)用不同的名詞來稱呼同一個(gè)組件。本專利說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。在通篇說明書及請(qǐng)求項(xiàng)當(dāng)中所提及的“包含”或“包括”為開放式的用語,故應(yīng)解釋成“包含但不限定于”;“組件”、“系統(tǒng)”和“設(shè)備”意指與計(jì)算機(jī)有關(guān)的實(shí)體,可為硬件、軟件或硬件以及軟件的組合。另外,“耦接”一詞在此包含任何直接及間接的電氣連接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表該第一裝置可直接電氣連接于該第二裝置,或透過其他裝置或連接手段間接地電氣連接至該第二裝置。本發(fā)明的實(shí)施例提供依需合并具有相同內(nèi)容的頁(yè)面的系統(tǒng)和方法。運(yùn)行時(shí)(atruntime)的系統(tǒng)持續(xù)監(jiān)測(cè)系統(tǒng)的狀態(tài),以檢測(cè)指示進(jìn)程間需要共享內(nèi)存的事件。當(dāng)檢測(cè)到上述事件時(shí),系統(tǒng)基于已知合并比(mergeratio)預(yù)測(cè)合并增益(mergegain)。當(dāng)所預(yù)測(cè)合并增益超過閾值時(shí),可對(duì)候選頁(yè)面(candidatepage)進(jìn)行掃描和合并操作。掃描和合并操作首先掃描候選頁(yè)面,以識(shí)別具有相同內(nèi)容且未被合并的頁(yè)面;并在隨后合并這些識(shí)別出的頁(yè)面。若所預(yù)測(cè)合并增益未超過閾值,系統(tǒng)將推遲(holdoff)掃描和合并操作,直到所預(yù)測(cè)合并增益超過閾值時(shí)的下一事件發(fā)生。在一實(shí)施例中,內(nèi)存被劃分為具有固定尺寸(如4K字節(jié))的物理頁(yè)面。一些物理頁(yè)面可能具有相同的內(nèi)容,并可被合并以節(jié)省內(nèi)存。舉例來說,假定物理頁(yè)面PG1和PG2具有相同的內(nèi)容。PG1和PG2分別映射到虛擬頁(yè)面VPG1和VPG2。也就是說,VPG1具有指向PG1的指針(pointer)P1,VPG2具有指向PG2的指針P2。虛擬頁(yè)面是存在于進(jìn)程或程序的虛擬地址空間中的頁(yè)面。當(dāng)操作系統(tǒng)將虛擬頁(yè)面映射到物理頁(yè)面時(shí),虛擬頁(yè)面被分配內(nèi)存,如可通過給該虛擬頁(yè)面指定(assign)指向所分配物理頁(yè)面的指針。當(dāng)PG2合并到PG1時(shí),其指針P2被修改為指向PG1。如此一來,指針P1和P2均指向PG1。合并后,PG1被稱為共享頁(yè)面(sharedpage),其合并計(jì)數(shù)(mergecount)為2,且PG2的4K字節(jié)空間可從其當(dāng)前進(jìn)程中釋放,并可被另一進(jìn)程再使用。因此,掃描和合并進(jìn)程允許同一物體頁(yè)面被多個(gè)進(jìn)程共享,因而可改善內(nèi)存利用率。除非明確指示,以下段落中術(shù)語“頁(yè)面”指“物理頁(yè)面”。在一實(shí)施例中,作為合并候選的頁(yè)面被稱為候選頁(yè)面。在一實(shí)施例中,候選頁(yè)面為匿名頁(yè)面(anonymouspage),其已被分配給進(jìn)程或程序。LinuxTM系統(tǒng)中的匿名頁(yè)面并非文件系統(tǒng)中任何文件的一部分,并可位于程序的數(shù)據(jù)或堆??臻g。在另一些實(shí)施例中,掃描和合并操作也可用于其他頁(yè)面類型。盡管LinuxTM的一些技術(shù)可在此用作示范例,應(yīng)可理解,本發(fā)明中的掃描和合并操作可適用于任何系統(tǒng)。圖1是根據(jù)一實(shí)施例的系統(tǒng)100的示意圖。系統(tǒng)100包括一個(gè)或多個(gè)處理裝置110,其中處理裝置110耦接至內(nèi)存130和顯示器(display)150。處理裝置的示范例包括但不限于中央處理單元(CentralProcessingUnit,CPU)、圖形處理單元(GraphicsProcessingUnit,GPU)、數(shù)字信號(hào)處理器(DigitalSignalProcessor,DSP)、通用處理器(general-purposeprocessor)和特殊用途處理器(special-purposeprocessor)。應(yīng)可理解,其他系統(tǒng)元件省略,以簡(jiǎn)化說明。在一實(shí)施例中,系統(tǒng)100以及/或者處理裝置110可作為片上系統(tǒng)(system-on-a-chip,SoC)實(shí)現(xiàn)。在一實(shí)施例中,系統(tǒng)100可為移動(dòng)計(jì)算以及/或者通信裝置(如智能手機(jī)、平板電腦、筆記本電腦等)的一部分。在另一實(shí)施例中,系統(tǒng)100可為服務(wù)器的一部分。在一實(shí)施例中,內(nèi)存130可為動(dòng)態(tài)隨機(jī)存取內(nèi)存(DynamicRandomAccessMemory,DRAM),或者可為其他易失性或非易失性隨機(jī)存取內(nèi)存。顯示器150可具有由周期性VSYNC信號(hào)標(biāo)記的固定刷新頻率(如60Hz)。不過本領(lǐng)域技術(shù)人員應(yīng)可理解,顯示器150并非系統(tǒng)100中的必要裝置。在一實(shí)施例中,系統(tǒng)100執(zhí)行OS120,其中OS120管理系統(tǒng)資源(如內(nèi)存130)的分配和使用。OS120包括頁(yè)面管理器125,其中頁(yè)面管理器125負(fù)責(zé)保持追蹤系統(tǒng)中的候選頁(yè)面,并確定何時(shí)觸發(fā)掃描和合并操作。在另一實(shí)施例中,頁(yè)面管理器125可通過硬件、固件、軟件或上述的組合實(shí)現(xiàn)。圖2是根據(jù)本發(fā)明一實(shí)施例的合并和分離(demerge)操作的示范性示意圖。為了簡(jiǎn)化說明,本示范例顯示了十個(gè)候選頁(yè)面(如P1到P10),這十個(gè)候選頁(yè)面占據(jù)了連續(xù)內(nèi)存空間210(如圖1中的內(nèi)存130)。然而,應(yīng)可理解,內(nèi)存空間210可包括任意數(shù)目的候選頁(yè)面,且候選頁(yè)面可位于內(nèi)存130中的任何地方,并可占據(jù)非連續(xù)的(如分片的)內(nèi)存空間。此外,一些候選頁(yè)面可彼此相鄰,而其他一些候選頁(yè)面可能并不相鄰(由未按比例繪示的點(diǎn)劃空間表示)。在本示范例中,具有三個(gè)頁(yè)面(P1、P2和P3)的第一組211具有相同的內(nèi)容,并可合并為第一頁(yè)面P1。具有四個(gè)頁(yè)面(P6、P7、P8和P9)的第二組222具有相同的內(nèi)容,并可合并為第二頁(yè)面P6。相同組中的頁(yè)面可能位于內(nèi)存空間210的任何地方。在另一實(shí)施例中,一組中的頁(yè)面可能與其他組中的頁(yè)面穿插(interspersed)。P1和P6被稱為共享頁(yè)面。被合并為一個(gè)頁(yè)面的每組頁(yè)面被稱為合并頁(yè)面(mergedpage)。在圖2所示的示范例中,兩個(gè)組211和222進(jìn)行合并操作后,候選頁(yè)面的數(shù)目仍為10,而合并頁(yè)面的數(shù)目為7。在系統(tǒng)運(yùn)行時(shí),合并頁(yè)面可被修改。為了允許合并頁(yè)面被修改,可進(jìn)行寫時(shí)拷貝(copy-on-write,COW)操作,以將共享頁(yè)面(如P1)的內(nèi)容寫入另一頁(yè)面(如P3),P3的內(nèi)容可被修改。因此,COW操作將P3從共享頁(yè)面P1分離。分離操作之后,合并頁(yè)面的數(shù)目降為6。當(dāng)新的頁(yè)面分配給程序或進(jìn)程,或現(xiàn)存頁(yè)面被解除分配(deallocate)時(shí),候選頁(yè)面的數(shù)目也可在系統(tǒng)運(yùn)行時(shí)改變。圖3是根據(jù)本發(fā)明一實(shí)施例的掃描和合并操作的示范例的時(shí)間軸(timeline)示意圖。應(yīng)可理解,圖3中的時(shí)間軸并非按比例繪示。圖3中所示的操作可由內(nèi)存管理單元或進(jìn)程執(zhí)行,如可由圖1中的頁(yè)面管理器125執(zhí)行。在本示范例中,在時(shí)刻T1,頁(yè)面管理器125檢測(cè)到事件。在一實(shí)施例中,事件可為下述事件的一個(gè)或多個(gè):可用內(nèi)存的數(shù)目降到或被預(yù)測(cè)降到低于第一閾值時(shí),已改變內(nèi)存內(nèi)容的數(shù)目升到或被預(yù)測(cè)升到高于第二閾值時(shí)等。換句話說,事件在可用內(nèi)存的數(shù)目降到或被預(yù)測(cè)降到低于第一閾值時(shí),以及/或者事件可在已改變內(nèi)存內(nèi)容的數(shù)目升到或被預(yù)測(cè)升到高于第二閾值時(shí)被檢測(cè)到。一經(jīng)檢測(cè)到該事件,頁(yè)面管理器125基于合并比R、候選頁(yè)面的當(dāng)前數(shù)目C以及合并頁(yè)面的當(dāng)前數(shù)目M,在時(shí)間310預(yù)測(cè)合并增益G。在一實(shí)施例中,合并比為候選頁(yè)面C預(yù)估有多少比例可被合并為一個(gè)或多個(gè)頁(yè)面。換句話說,合并比代表合并頁(yè)面與候選頁(yè)面的比值(merged-to-candidatepageratio),即進(jìn)行掃描和合并時(shí)合并頁(yè)面的數(shù)目與候選頁(yè)面的數(shù)目的比值。在系統(tǒng)運(yùn)行時(shí),合并頁(yè)面的數(shù)目以及/或者候選頁(yè)面的數(shù)目可以改變。如此一來,在某個(gè)運(yùn)行時(shí)間點(diǎn)的M與C的比值可從R偏離。給定候選頁(yè)面的當(dāng)前數(shù)目C,若另一掃描和合并操作在這些候選頁(yè)面上進(jìn)行,則可預(yù)測(cè)乘積N=CxR將接近合并頁(yè)面的數(shù)目。合并增益G是系統(tǒng)可從此次掃描和合并操作(即上述另一掃描和合并操作)中得到的合并頁(yè)面增加數(shù)目。也就是說,G=N–M。在一些實(shí)施例中,合并增益可表示為合并頁(yè)面增加數(shù)目與N的比值或百分比。在一實(shí)施例中,從運(yùn)行時(shí)在多個(gè)硬件平臺(tái)和多個(gè)內(nèi)存應(yīng)用場(chǎng)景上收集的分析數(shù)據(jù)(profilingdata),可以看到合并比一般落入窄數(shù)值范圍(numericalrange),如12%-17%。因此,在一實(shí)施例中,數(shù)值范圍由分析數(shù)據(jù)確定,并且數(shù)值范圍的均值(mean)或均數(shù)(average)被預(yù)定為合并比。換句話說,可基于在內(nèi)存應(yīng)用場(chǎng)景集合以及/或者硬件平臺(tái)集合上收集的分析數(shù)據(jù)確定合并比。隨后,合并增益可由合并比和系統(tǒng)中的頁(yè)面分配和共享信息確定。請(qǐng)參照回圖3。假定在本實(shí)施例中,所預(yù)測(cè)合并增益G1比閾值TH大(G1>TH)。因此,頁(yè)面管理器125在時(shí)間320進(jìn)行掃描和合并操作。掃描所有的候選頁(yè)面且合并具有相同內(nèi)容的那些頁(yè)面之后,頁(yè)面管理器125不再進(jìn)行掃描和合并操作,直到檢測(cè)到下一事件。在一實(shí)施例中,頁(yè)面管理器125運(yùn)行一持續(xù)追蹤合并頁(yè)面數(shù)目和候選頁(yè)面數(shù)目的進(jìn)程。這兩個(gè)數(shù)目被追蹤是因?yàn)樗麄兊母淖儠?huì)引起合并增益隨之改變。在時(shí)刻T2,頁(yè)面管理器125檢測(cè)到另一事件。內(nèi)存管理器預(yù)測(cè)合并增益G2,其中所預(yù)測(cè)合并增益G2不大于TH(G2≤TH)。因此,頁(yè)面管理器125不在此時(shí)進(jìn)行掃描和合并操作。圖4是根據(jù)本發(fā)明一實(shí)施例的系統(tǒng)高效共享內(nèi)存的方法400的流程圖。在一實(shí)施例中,系統(tǒng)可為圖1中的系統(tǒng)100。系統(tǒng)從初始狀態(tài)410開始。當(dāng)在步驟420檢測(cè)到事件時(shí),系統(tǒng)在步驟430確定其是否有能力進(jìn)行掃描和合并操作(系統(tǒng)需求是否滿足),如系統(tǒng)是否有足夠內(nèi)存來支持掃描和合并操作時(shí)可能要建立的內(nèi)部數(shù)據(jù)架構(gòu)。若沒有足夠的可用內(nèi)存用于掃描和合并操作,系統(tǒng)返回初始狀態(tài)410,直到檢測(cè)到下一事件。若有足夠的可用內(nèi)存用于掃描和合并操作,系統(tǒng)在步驟440預(yù)測(cè)合并增益,并在步驟450確定所預(yù)測(cè)合并增益是否大于閾值TH。閾值可靜態(tài)分配(staticallyassigned)或動(dòng)態(tài)計(jì)算。若合并增益大于閾值,系統(tǒng)在步驟460進(jìn)行掃描和合并操作,并在操作完成后返回初始狀態(tài)410。若合并增益不大于閾值,系統(tǒng)返回初始狀態(tài)而不進(jìn)行掃描和合并操作。系統(tǒng)可在多個(gè)場(chǎng)景下調(diào)整合并比以及/或者閾值TH。在一實(shí)施例中,合并比以及/或者閾值可在運(yùn)行時(shí)進(jìn)行調(diào)整。舉例來說,若合并增益小于TH的連續(xù)次數(shù)超過重試限制,或檢測(cè)到的事件指示掃描和合并操作需要更頻繁或更少地進(jìn)行等等。在一實(shí)施例中,若合并增益不大于閾值,則合并比以及/或者閾值可被調(diào)整。在運(yùn)行期間,系統(tǒng)運(yùn)行一追蹤候選頁(yè)面數(shù)目和合并頁(yè)面數(shù)目的進(jìn)程。合并頁(yè)面數(shù)目在步驟470中更新,以在頁(yè)面被合并時(shí)記錄增加值,并在合并頁(yè)面分離時(shí)記錄降低值。其中合并頁(yè)面分離如步驟480中進(jìn)行COW操作,以使能(enable)合并頁(yè)面被拷貝到另一頁(yè)面。圖5是根據(jù)本發(fā)明一實(shí)施例的依需合并具有相同內(nèi)容的頁(yè)面的方法500的流程圖。方法500可由系統(tǒng)(如圖1中的系統(tǒng)100,或者更具體地,如頁(yè)面管理器125)進(jìn)行。在另一實(shí)施例中,方法500可通過硬件(如電路、專用邏輯、可編程邏輯、微碼等)、軟件(如運(yùn)行在處理裝置上的指令)或上述組合實(shí)現(xiàn)。在一實(shí)施例中,當(dāng)檢測(cè)到指示在內(nèi)存中合并候選頁(yè)面的事件時(shí)(步驟510),方法500開始?;诤蜻x頁(yè)面的當(dāng)前數(shù)目,合并頁(yè)面的當(dāng)前數(shù)目以及代表合并頁(yè)面與候選頁(yè)面比值的合并比,合并增益得以預(yù)測(cè)(步驟520)。當(dāng)確定合并增益大于閾值時(shí),進(jìn)行掃描和合并操作,以將具有相同內(nèi)容且未被合并的候選頁(yè)面集合合并為具有該相同內(nèi)容的單個(gè)頁(yè)面(步驟530)。根據(jù)一些實(shí)施例,頁(yè)面合并可在檢測(cè)到事件且合并增益大于閾值時(shí),依需進(jìn)行。這種從需求出發(fā)的方法可有效改善系統(tǒng)性能,因?yàn)闊o法為系統(tǒng)產(chǎn)生太多增益的合并操作可被跳過以節(jié)省系統(tǒng)資源。圖4和圖5流程圖中的操作參照?qǐng)D1所示的示范性實(shí)施例進(jìn)行描述。然而應(yīng)可理解,圖4和圖5流程圖中操作可由本發(fā)明其他實(shí)施例進(jìn)行,且圖1所示實(shí)施例可進(jìn)行與圖4和圖5流程不同的操作。圖4和圖5中顯示了本發(fā)明某些實(shí)施例執(zhí)行操作的特定順序,應(yīng)可理解圖示順序只是本發(fā)明的一些實(shí)施例,其他實(shí)施例可以按照不同順序執(zhí)行操作,合并某些操作,重復(fù)某些操作等。雖然本發(fā)明已以較佳實(shí)施例揭露如上,然其并非用以限定本發(fā)明,任何熟習(xí)此技藝者,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作些許的更動(dòng)與潤(rùn)飾,因此本發(fā)明的保護(hù)范圍當(dāng)視后附的權(quán)利要求所界定者為準(zhǔn)。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3