本發(fā)明的實施例有關(guān)于一種內(nèi)存管理機制,更具體地,關(guān)于一種支持具有混合頁表使用(hybridpagetableutilization)的共享虛擬內(nèi)存的內(nèi)存管理方法。
背景技術(shù):
::在一個典型的計算系統(tǒng)內(nèi),存在超過一個計算單元。舉例來說,中央處理單元(centralprocessingunit,cpu)以及圖像處理單元(graphicsprocessingunit,gpu)可在同一個計算系統(tǒng)內(nèi)實施。通過把一部分本來由cpu執(zhí)行的計算任務轉(zhuǎn)給gpu,cpu的效率可得到提高。為了把任務轉(zhuǎn)給gpu,數(shù)據(jù)需要從cpu的物理內(nèi)存轉(zhuǎn)到gpu的物理內(nèi)存。為了減少cpu與gpu的物理內(nèi)存間的數(shù)據(jù)流量,可采用共享虛擬內(nèi)存技術(shù)來使cpu與gpu訪問同一個緩存,該緩存映射到共享虛擬內(nèi)存地址。在傳統(tǒng)的計算系統(tǒng)內(nèi),實施共享虛擬內(nèi)存僅需要一個單獨的頁表類型。可是,這樣的共享虛擬內(nèi)存設計缺乏靈活性并不能達到最佳的共享虛擬內(nèi)存性能。技術(shù)實現(xiàn)要素:對應本發(fā)明的具體實施例,本發(fā)明提出了一種支持具有混合頁表使用的共享虛擬內(nèi)存的內(nèi)存管理方法以及相關(guān)的機器可讀介質(zhì)。根據(jù)本發(fā)明的第一方面,其揭露了一種示例的內(nèi)存管理方法。該示例的內(nèi)存管理方法包含:檢查參與緩存的數(shù)據(jù)存取的至少一裝置的共享虛擬內(nèi)存的支持能力;參考檢查結(jié)果來適應性地選擇共享虛擬內(nèi)存模式;以及在內(nèi)存裝置的物理內(nèi)存區(qū)域內(nèi)分配該緩存,并設置該緩存運行于選擇的該共享虛擬內(nèi)存模式下。根據(jù)本發(fā)明的第二方面,其揭露了一種示例的內(nèi)存管理方法。該示例的內(nèi)存管理方法包含:在內(nèi)存裝置的第一物理內(nèi)存區(qū)域內(nèi)分配第一緩存;設置該第一緩存運行于第一共享虛擬內(nèi)存模式下;在該內(nèi)存裝置的第二物理內(nèi)存區(qū)域內(nèi)分配第二緩存;以及設置該第二緩存運行于第二共享虛擬內(nèi)存模式下,其中該第一共享虛擬內(nèi)存模式與該第二共享虛擬內(nèi)存模式不同。根據(jù)本發(fā)明的第三方面,其揭露了一種示例的內(nèi)存管理方法。該示例的內(nèi)存管理方法包含:在內(nèi)存裝置的第一物理內(nèi)存區(qū)域內(nèi)分配第一共享虛擬內(nèi)存緩存;管理存取該第一共享虛擬內(nèi)存緩存的至少一第一裝置使用的第一類型頁表;在該內(nèi)存裝置的第二物理內(nèi)存區(qū)域內(nèi)分配第二共享虛擬內(nèi)存緩存;以及管理存取該第二共享虛擬內(nèi)存緩存的至少一第二裝置使用的第二類型頁表,其中該第二類型頁表不同于該第一類型頁表。根據(jù)本發(fā)明的第四方面,其揭露了一種示例的機器可讀介質(zhì),其儲存有程序代碼。當被處理器執(zhí)行時,該程序代碼命令該處理器執(zhí)行下列步驟:檢查參與緩存的數(shù)據(jù)存取的至少一裝置的共享虛擬內(nèi)存的支持能力;參考檢查結(jié)果來適應性地選擇共享虛擬內(nèi)存模式;以及在內(nèi)存裝置的物理內(nèi)存區(qū)域內(nèi)分配該緩存,并設置該緩存運行于選擇的該共享虛擬內(nèi)存模式下。根據(jù)本發(fā)明的第五方面,其揭露了一種示例的機器可讀介質(zhì),其儲存有程序代碼。當被處理器執(zhí)行時,該程序代碼命令該處理器執(zhí)行下列步驟:在內(nèi)存裝置的第一物理內(nèi)存區(qū)域內(nèi)分配第一緩存;設置該第一緩存運行于第一共享虛擬內(nèi)存模式下;在該內(nèi)存裝置的第二物理內(nèi)存區(qū)域內(nèi)分配第二緩存;以及設置該第二緩存運行于第二共享虛擬內(nèi)存模式下,其中該第一共享虛擬內(nèi)存模式與該第二共享虛擬內(nèi)存模式不同。根據(jù)本發(fā)明的第四方面,其揭露了一種示例的機器可讀介質(zhì),其儲存有程序代碼。當被處理器執(zhí)行時,該程序代碼命令該處理器執(zhí)行下列步驟:在內(nèi)存裝置的第一物理內(nèi)存區(qū)域內(nèi)分配第一共享虛擬內(nèi)存緩存;管理存取該第一共享虛擬內(nèi)存緩存的至少一第一裝置使用的第一類型頁表;在該內(nèi)存裝置的第二物理內(nèi)存區(qū)域內(nèi)分配第二共享虛擬內(nèi)存緩存;以及管理存取該第二共享虛擬內(nèi)存緩存的至少一第二裝置使用的第二類型頁表,其中該第二類型頁表不同于該第一類型頁表。本發(fā)明的這些及其他的目的對于本領(lǐng)域的技術(shù)人員來說,在閱讀了下述優(yōu)選實施例的詳細說明以后是很容易理解和明白的,所述優(yōu)選實施例通過多幅圖予以揭示。附圖說明圖1根據(jù)本發(fā)明一實施例的顯示計算系統(tǒng)的示意圖。圖2顯示根據(jù)本發(fā)明一實施例的svm緩存的svm模式的決定過程的流程圖。圖3顯示根據(jù)本發(fā)明一實施例的運行于不同svm模式下的不同svm緩存的示意圖。圖4顯示根據(jù)本發(fā)明一實施例的支持具有混合頁表使用的共享虛擬內(nèi)存的芯片上系統(tǒng)的示意圖。具體實施方式本說明書及權(quán)利要求書使用了某些詞語代指特定的組件。本領(lǐng)域的技術(shù)人員可理解的是,制造商可能使用不同的名稱代指同一組件。本文件不通過名字的差別,而通過功能的差別來區(qū)分組件。在以下的說明書和權(quán)利要求書中,詞語“包括”是開放式的,因此其應理解為“包括,但不限于...”。本發(fā)明的主要概念是提供一種內(nèi)存管理機制,來支持具有混合頁表使用的共享虛擬內(nèi)存。如此,不同的共享虛擬內(nèi)存(svm)模式可在同個計算系統(tǒng)內(nèi)共存。舉例來說,對于一個在物理地址區(qū)域的svm緩存,可基于參與svm緩存數(shù)據(jù)存取的裝置的svm支持能力(supportability)來選擇一最佳svm模式。而且,即使這些裝置可用不同的頁表類型,svm系統(tǒng)共享模式與svm緩存共享模式可用同個計算系統(tǒng)使用。與傳統(tǒng)的svm設計相比,提出的svm設計更靈活,因此可以實現(xiàn)裝置更好的svm利用。更多關(guān)于提出的內(nèi)存管理機制的細節(jié)在下文描述。圖1顯示根據(jù)本發(fā)明一實施例的計算系統(tǒng)的示意圖。計算系統(tǒng)100可以是例如移動手機、平板電腦或可穿戴設備等電子裝置的一部分。計算系統(tǒng)100可包含中央處理單元(cpu)102,至少一裝置(例如裝置104_1-104_n),機器可讀介質(zhì)106,以及內(nèi)存裝置108。裝置104_1-104_n的每個可配備有指令執(zhí)行的計算能力。cpu102的計算能力(computingpower)可比裝置104_1-104_n的低。舉例來說,考慮到一些應用場景,cpu102的計算能力低于裝置104_1-104_n的計算能力。而且,通過把本來由cpu102執(zhí)行的部分計算任務轉(zhuǎn)給裝置104_1-104_n中至少一個,cpu102的效率得到提高。需要注意的是,裝置104_1-104_n的數(shù)量可被調(diào)整,這取決于實際的設計考慮。舉例來說,當計算系統(tǒng)100是一個異構(gòu)(heterogeneous)的計算平臺,其包含有cpu102與一個裝置,該裝置可以為圖像處理單元(gpu)或數(shù)字信號處理器(dsp)。另外一個例子中,當計算系統(tǒng)100是異構(gòu)計算平臺,其包含有cpu102與多余一個裝置,該些裝置可包含至少一圖像處理單元(gpu)與數(shù)字信號處理器(dsp)??墒?,這僅是說明本發(fā)明目的之用,并非本發(fā)明的限制。在本實施例中,機器可讀介質(zhì)106與內(nèi)存裝置108可以用不同的內(nèi)存裝置來實施。舉例來說,機器可讀介質(zhì)106可以是例如閃存的非易失性內(nèi)存,且內(nèi)存裝置108可為例如動態(tài)隨機存取內(nèi)存(dram)的易失性內(nèi)存。機器可讀介質(zhì)106用來儲存程序代碼prog。舉例來說,程序代碼prog可包含例如linux類操作系統(tǒng)的一個操作系統(tǒng)以及至少一裝置(例如裝置104_1-104_n)的至少一裝置驅(qū)動器(例如dd_1-dd_n),且可由cpu102載入并執(zhí)行來進行內(nèi)存管理的處理(具體地,提出的svm管理方法)。內(nèi)存裝置108是一個系統(tǒng)內(nèi)存。而且,內(nèi)存裝置108可包含至少一分配的緩存bufsvm來共享,并可進一步包含所儲存的至少一頁表pt來進行該至少一緩存的數(shù)據(jù)存取所需的虛擬轉(zhuǎn)物理翻譯(virtual-to-physicaltranslation)。舉例來說,內(nèi)存裝置108可包含一cpu102所用的cpu頁表。另一個例子中,內(nèi)存裝置108可包含裝置104_1-104_n中至少一所用的至少一裝置頁表(例如影子頁表(shadowpagetable))。操作系統(tǒng)可管理cpu頁表,且可在需要時與至少一裝置驅(qū)動器通信來管理至少一裝置頁表。計算系統(tǒng)100的操作系統(tǒng)可包含一平臺運行時間層(platformrun-timelayer),例如內(nèi)存管理器。當cpu102上運行的應用需要創(chuàng)建一個緩存bufsvm來共享時,應用的一個svm緩存分配api(應用編程界面)可指定該需要參與緩存bufsvm的數(shù)據(jù)存取的裝置。參與裝置的默認設置可以是所有裝置104_1-104_n都實施于計算系統(tǒng)100中。由svm緩存分配api動態(tài)指定的或由默認設置直接指定的參與裝置的裝置驅(qū)動器可將參與裝置的svm支持能力報告給平臺運行時間層(例如操作系統(tǒng)的內(nèi)存管理器)。接著,平臺運行時間層(例如操作系統(tǒng)的內(nèi)存管理器)參考參與裝置的至少一部分(即部分或所有)的svm支持能力,來動態(tài)選擇緩存bufsvm的svm模式(更具體地,最佳svm模式)。而且,平臺運行時間層(例如操作系統(tǒng)的內(nèi)存管理器)在內(nèi)存裝置108的物理內(nèi)存區(qū)域內(nèi)分配緩存bufsvm,并配置該分配的緩存bufsvm來于選擇的svm模式中運行。因為svm模式是基于參與裝置的能力動態(tài)選擇的,平臺運行時間層(例如操作系統(tǒng)的內(nèi)存管理器)可因不同緩存bufsvm的參與裝置的svm支持能力的不同而為相同或不同的應用所需的不同的緩存bufsvm選擇不同的svm模式。因為針對每個緩存bufsvm可選擇一最佳svm模式,異構(gòu)計算平臺的svm靈活性/性能都能大幅提升。所提出的適應性svm模式選擇的更多細節(jié)將在下文說明。裝置104_1-104_n可支持不同類型的頁表,對應地,也可支持不同的svm模式。當一裝置(例如cpu或gpu)支持共享頁表時,該裝置能支持多個svm模式,包含svm系統(tǒng)共享模式(其用來共享整個虛擬內(nèi)存地址空間),需要鎖定(pinned)內(nèi)存(僅用來共享部分虛擬內(nèi)存地址空間)的svm緩存共享模式,以及不需鎖定內(nèi)存(僅用來共享部分虛擬內(nèi)存地址空間)的svm緩存模式。在另一個例子中,當一裝置(例如cpu或gpu)支持不需頁錯誤處理(pagefaulthandling)的影子頁表時,裝置可僅支持單個svm模式,即需要鎖定(pinned)內(nèi)存(僅用來共享部分虛擬內(nèi)存地址空間)的svm緩存共享模式。如果沒有頁錯誤處理能力,裝置就需要使用鎖定的內(nèi)存來共享一緩存。結(jié)果是,svm模式限定在需要鎖定內(nèi)存的svm緩存共享模式。另一個例子中,當一裝置(例如cpu或gpu)支持具有頁錯誤處理的影子頁表時,該裝置能支持兩種svm模式,包含svm系統(tǒng)共享模式(用于共享整個虛擬內(nèi)存地址空間)或不需鎖定內(nèi)存的svm緩存共享模式(僅用來共享部分虛擬內(nèi)存地址空間).具有頁錯誤處理能力,裝置就不需要用鎖定內(nèi)存來共享緩存。當頁錯誤發(fā)生時,操作系統(tǒng)與裝置驅(qū)動器互相通信來更新裝置的對應影子頁表。而且,裝置能支持svm系統(tǒng)共享模式與不需鎖定內(nèi)存的svm緩存共享模式。本領(lǐng)域的技術(shù)人員可輕易理解共享頁表與影子頁表的使用,更多的說明此處不再贅述。圖2顯示本發(fā)明一實施例的選擇svm緩存的svm模式的決定過程的流程圖。假如結(jié)果大致相同,這些步驟并不需要完全依照圖2的順序執(zhí)行。另外,圖2的步驟中的一個或更多的步驟可被省略或者也可以增加一個或多個步驟。決定過程可實施于在處理器(例如cpu102)上運行的平臺運行時間層(例如操作系統(tǒng)的內(nèi)存管理器),并可歸納如下。步驟202:決定共享要參與緩存bufsvm數(shù)據(jù)存取的裝置。步驟204:檢查一個參與裝置的svm支持能力。步驟206:決定該參與裝置是否支持共享頁表。如果是,執(zhí)行步驟210;否則執(zhí)行步驟208。步驟208:決定是否支持具有頁錯誤處理的影子頁表。如果是,執(zhí)行步驟210;否則,執(zhí)行步驟214.步驟210:是否檢查了所有的參與裝置?如果是,執(zhí)行步驟216;否則,執(zhí)行步驟212。步驟212:檢查下個參與裝置的svm支持能力。執(zhí)行步驟206。步驟214:選擇需要鎖定內(nèi)存的svm緩存共享模式。執(zhí)行步驟218。步驟216:選擇svm系統(tǒng)共享模式(或不需鎖定內(nèi)存的svm緩存共享模式)。步驟218:在內(nèi)存裝置108的物理內(nèi)存區(qū)域內(nèi)分配緩存bufsvm,并設置分配的緩存bufsvm運行于選擇的svm模式下。當一個應用需要創(chuàng)建共享的緩存bufsvm時,svm緩存分配應用api可指定需要參與緩存bufsvm的數(shù)據(jù)讀取的裝置(步驟202)。如果svm緩存分配api不指定參與裝置,會采用默認設置來選擇所有裝置104_1-104_n作為參與裝置(步驟202)。步驟206與208用來確認由當前檢查過的參與裝置所支持的頁表類型。當當前檢查過的參與裝置支持共享頁表時(步驟206),就決定svm系統(tǒng)共享模式、需要鎖定內(nèi)存的svm緩存共享模式與不需鎖定內(nèi)存的svm模式中的任何都可被當前檢查過的參與裝置所支持。當當前檢查過的參與裝置不支持共享頁表,但支持具有頁錯誤處理的影子頁表時(步驟208),決定svm系統(tǒng)共享模式與不需鎖定內(nèi)存的svm模式可被當前檢查過的參與裝置所支持。當當前檢查過的參與裝置不支持共享頁表但支持不具有頁錯誤處理的影子頁表時(步驟208),決定當前檢查過的參與裝置僅支持需要鎖定內(nèi)存的svm緩存共享模式。因為使用不具有頁錯誤處理的影子頁表參與裝置無法支持svm系統(tǒng)共享模式與不需鎖定內(nèi)存的svm緩存共享模式,緩存bufsvm的svm選擇受到使用不具有頁錯誤處理的影子頁表的參與裝置的限制。而且,當當前檢查過的參與裝置支持不具有頁錯誤處理的影子頁表時,緩存bufsvm的svm模式可直接設置為具有鎖定內(nèi)存的svm緩存共享模式(步驟214)。當當前檢查過的參與裝置支持具有頁錯誤處理的共享頁表或影子頁表時,如果還有至少一個參與裝置未被檢查,則會檢查下個參與裝置(步驟210與212)。當所有的參與裝置都檢查過了而發(fā)現(xiàn)沒有檢查過的參與裝置是支持不具有頁錯誤處理的影子頁表時,緩存bufsvm的svm模式可設置為svm系統(tǒng)共享模式(或不需鎖定內(nèi)存的svm緩存共享模式)(步驟216)。在決定svm模式之后,平臺運行時間層(例如操作系統(tǒng)的內(nèi)存管理器)可使用“malloc”指令來分配svm系統(tǒng)共享的緩存bufsvm,或可使用“svmalloc”運行時間調(diào)用來分配具有/不具有鎖定內(nèi)存的svm緩存共享。歸納來講,當在檢查至少一個參與裝置后,決定svm系統(tǒng)共享模式與不需鎖定內(nèi)存的svm緩存共享模式都無法選擇時,選擇需要鎖定內(nèi)存的svm緩存共享模式。可是,支持不具有頁錯誤處理的影子頁表的裝置可以不總是參與到每個緩存的數(shù)據(jù)存取的共享中。而且,分配共享的緩存可有機會運行于svm系統(tǒng)共享模式(或不需鎖定內(nèi)存的svm緩存共享模式)。舉例來說,當檢查所有參與裝置后決定可以選擇svm系統(tǒng)共享模式時,可以選擇svm系統(tǒng)共享模式。與需要鎖定內(nèi)存的svm緩存共享模式相比,svm系統(tǒng)共享模式可達到更好的svm性能。圖3顯示根據(jù)本發(fā)明一實施例的于不同svm模式下運行的svm緩存的示意圖。假設圖1中的裝置104_1-104_n包含三個裝置:裝置0、裝置1與裝置2,其中n=3。在本實施例中,裝置0與裝置1為處于#a物理地址區(qū)域(可包含連續(xù)物理地址及/或非連續(xù)物理地址)中的svm緩存的參與裝置,且裝置0、裝置1與裝置2為處于#b物理地址區(qū)域(可包含連續(xù)物理地址及/或非連續(xù)物理地址)的svm緩存的參與裝置。因為裝置0使用了共享頁表而裝置1使用了具有頁錯誤處理的影子頁表,分配在#a物理地址區(qū)域的svm緩存可被設置來于svm系統(tǒng)共享模式下運行。而且,因為裝置0使用了共享頁表,裝置1使用了具有頁錯誤處理的影子頁表,裝置2使用了不具有頁錯誤處理的影子頁表,svm模式受到裝置2的能力的限制。并且,分配在#b物理地址區(qū)域的svm緩存可被設置為于svm緩存共享模式下運行。歸納來講,使用不具有頁錯誤處理的影子頁表的裝置可限制svm模式為svm緩存共享模式。在本實施例中,分配在#b物理地址區(qū)域svm緩存的svm模式被使用不具有頁錯誤處理的影子頁表的裝置2所限制??墒?,只有被使用不具有頁錯誤處理影子頁表的至少一裝置存取的svm緩存被限制為svm緩存共享模式。而且,另一個svm緩存可操作于同個計算系統(tǒng)的不同組合的裝置的不同svm模式下。在本實施例中,分配在#a物理地址區(qū)域的svm緩存的svm模式可允許為svm系統(tǒng)共享模式。簡而言之,使用不同類型的頁表的裝置,且可存取不同svm模式下運行的svm緩存。圖4顯示根據(jù)本發(fā)明一實施例的支持具有混合頁表使用的共享虛擬內(nèi)存的芯片上系統(tǒng)的示意圖。假設內(nèi)存裝置108是dram,而裝置104_1-104_n(n=3)包含裝置0、裝置1與裝置2。裝置104_1使用共享頁表(其為cpu102使用的cpu頁表402),裝置104_2使用具有頁錯誤處理的影子頁表404,而裝置104_3使用不具有頁錯誤處理的影子頁表406。共享頁表(即cpu頁表402)以及影子頁表404,406由程序代碼管理,程序代碼包含了cpu102執(zhí)行的操作系統(tǒng)與裝置驅(qū)動器。cpu102與裝置104_2-104_3中的每個都包含一個內(nèi)存管理單元(memorymanagementunit,mmu)414、416、418,用來把虛擬地址翻譯為物理地址。因為裝置104_1使用cpu頁表402,翻譯代理(translationagent,ta)412可被裝置104_1使用。svm緩存422被兩個參與裝置(例如裝置104_1與裝置104_2)所存取,并設置于svm系統(tǒng)共享模式下運行。svm緩存424由兩個參與裝置(例如裝置104_2與裝置104_3)所存取,并設置于需要鎖定內(nèi)存的svm緩存共享模式下運行。svm緩存426被一個參與裝置(例如裝置104_2)所存取,并設置于不需鎖定內(nèi)存的svm緩存共享模式下運行??梢詮膱D4中看出,使用不同類型的頁表的裝置104_1-104_3共存于同個計算系統(tǒng)內(nèi),在不同svm模式下運行的svm緩存422-426共存于同個計算系統(tǒng)內(nèi)。本發(fā)明所提出的虛擬內(nèi)存管理機制允許每個地址區(qū)域選擇最佳的svm模式。而且,本發(fā)明提出的虛擬內(nèi)存管理機制因提升的svm靈活度能支持更好的svm利用。本領(lǐng)域的技術(shù)人員將注意到,在獲得本發(fā)明的指導之后,可對所述裝置和方法進行大量的修改和變換。相應地,上述公開內(nèi)容應該理解為,僅通過所附加的權(quán)利要求的界限來限定。當前第1頁12當前第1頁12