本發(fā)明涉及計算機技術(shù)領域,尤其涉及一種動態(tài)分配內(nèi)存的方法、裝置及系統(tǒng)。
背景技術(shù):
在計算機系統(tǒng)中,存儲器可謂是決定整機性能的關(guān)鍵因素之一。在服務器系統(tǒng)中,常使用dimm(dual-inline-memory-modules,雙列直插式存儲模塊)作為內(nèi)存。在dimm內(nèi)存中的顆粒采用了dip(dualinlinepackage:雙列直插封裝)封裝。早期的內(nèi)存顆粒是直接焊接在主板上面的,這樣如果一片內(nèi)存出現(xiàn)故障,那么整個主板都要報廢了。后來在主板上出現(xiàn)了內(nèi)存顆粒插槽,這樣就可以更換內(nèi)存顆粒了。較常用的內(nèi)存顆粒是dram(dynamicrandomaccessmemory,動態(tài)隨機存取存儲器)芯片。dimm包括有一個或多個dram芯片在一個小的集成電路板上,利用這塊電路板上的一些引腳可以直接和計算機主板相連接。
dimm常應用在服務器系統(tǒng)中。由于dimm容量限制較大,從8g、16g、32g、64g到128g,單個容量較小,相對業(yè)務快速的變化缺少靈活性。目前的做法是,單臺服務器(單機)各插16根dimm,或者是通過razer卡擴展dimm,以達到擴展內(nèi)存容量的目的。然而,由于dimm受限于cpu的dimmchannel,因此會帶來容量的限制,從而因容量需求形成了不同的規(guī)格的服務器,帶來了管理上的不便與開銷。
技術(shù)實現(xiàn)要素:
本發(fā)明解決的技術(shù)問題之一是提供一種動態(tài)分配內(nèi)存的方法、裝置及系統(tǒng)。
根據(jù)本發(fā)明一方面的一個實施例,提供了一種動態(tài)分配內(nèi)存的方法,包括:接收至少一臺服務器的內(nèi)存分配請求;根據(jù)所述內(nèi)存分配請求,基于由多個經(jīng)總線接口標準設備驅(qū)動的內(nèi)存顆粒組成的內(nèi)存池,判斷所述內(nèi)存池是否具有一個或多個空閑的內(nèi)存顆粒的內(nèi)存總和滿足所請求的內(nèi)存大??;若是,將所請求的內(nèi)存分配給所述服務器。
優(yōu)選的,所述內(nèi)存顆粒包括dram顆粒,該方法還包括:將dram顆粒的dram接口轉(zhuǎn)換成pcie接口。
優(yōu)選的,所述將dram顆粒的dram接口轉(zhuǎn)換成pcie接口,包括:將dram接口通過內(nèi)存緩沖進行容量擴展;將內(nèi)存控制器的輸入連接dram顆粒,在內(nèi)存控制器進行雙倍速率ddr內(nèi)存進程到pcie進程的轉(zhuǎn)換邏輯,使內(nèi)存控制器的輸出為pcie接口。
優(yōu)選的,通過pcie設備驅(qū)動dram顆粒包括:使能pcie設備的sriov功能;安裝物理功能pf驅(qū)動和虛擬功能vf驅(qū)動;實現(xiàn)pcie地址、服務器地址與內(nèi)存地址的映射,并將地址映射寫入所述pf驅(qū)動和vf驅(qū)動。
優(yōu)選的,該方法還包括:對內(nèi)存池進行部署:由一管理單元控制多臺服務器共享內(nèi)存池的內(nèi)存空間;在所述管理單元中運行所述pf驅(qū)動,從而將用戶空間與虛擬功能驅(qū)動空間id對應并進行匹配;在各服務器上運行所述虛擬功能驅(qū)動,從而使服務器發(fā)現(xiàn)自身對應的地址空間并進行操作。
優(yōu)選的,該方法還包括:判斷服務器是否使用完成所分配的內(nèi)存空間,若是,釋放所述內(nèi)存空間。
優(yōu)選的,若判斷不具有所請求的內(nèi)存空間,所述方法還包括:等待,并判斷是否有新釋放的內(nèi)存空間;若釋放的內(nèi)存空間滿足所請求的內(nèi)存要求,則將釋放的內(nèi)存空間分配給所述服務器。
根據(jù)本發(fā)明一方面的一個實施例,提供了一種動態(tài)分配內(nèi)存的裝置,包括:請求接收單元,用于接收至服務器的內(nèi)存分配請求;判斷單元,用于根據(jù)所述內(nèi)存分配請求,基于由多個經(jīng)總線接口標準設備驅(qū)動的內(nèi)存顆粒組成的內(nèi)存池,判斷所述內(nèi)存池是否具有一個或多個空閑的內(nèi)存顆粒的內(nèi) 存總和滿足所請求的內(nèi)存大小;分配單元,用于將所請求的內(nèi)存分配給所述服務器。
優(yōu)選的,所述內(nèi)存顆粒包括dram顆粒;該裝置還包括:接口轉(zhuǎn)換單元,用于將dram接口通過內(nèi)存緩沖進行容量擴展;以及,將內(nèi)存控制器的輸入連接dram顆粒,在內(nèi)存控制器進行ddr內(nèi)存進程到pcie進程的轉(zhuǎn)換邏輯,使內(nèi)存控制器的輸出為pcie接口,使內(nèi)存控制器的輸出為pcie接口。
優(yōu)選的,該裝置還包括:驅(qū)動單元,用于使能pcie設備的sriov功能;安裝pf驅(qū)動和vf驅(qū)動;以及,實現(xiàn)pcie地址、服務器地址與內(nèi)存地址的映射,并將地址映射寫入所述pf驅(qū)動和vf驅(qū)動。
優(yōu)選的,該裝置還包括:內(nèi)存池部署單元,用于控制多臺服務器共享內(nèi)存池的內(nèi)存空間;在所述管理單元中運行所述pf驅(qū)動,從而將用戶空間與vf空間id對應并進行匹配;以及,在各服務器上運行所述vf驅(qū)動,從而使服務器發(fā)現(xiàn)自身對應的地址空間并進行操作。
優(yōu)選的,所述判斷單元還用于,判斷服務器是否使用完成所分配的內(nèi)存空間;所述裝置還包括:釋放單元,用于釋放使用完成的內(nèi)存空間。
優(yōu)選的,所述判斷單元還用于,若判斷不具有所請求的內(nèi)存空間,則等待,并判斷是否有新釋放的內(nèi)存空間;若釋放的內(nèi)存空間滿足所請求的內(nèi)存要求,則指示所述分配單元將釋放的內(nèi)存空間分配給所述服務器。
根據(jù)本發(fā)明一方面的一個實施例,提供了一種動態(tài)分配內(nèi)存的系統(tǒng),該系統(tǒng)包括:由多個經(jīng)pcie設備驅(qū)動的dram顆粒組成的內(nèi)存池;一個或多個服務器;以及,上述的任一項的所述動態(tài)分配內(nèi)存的裝置。
根據(jù)本發(fā)明另一方面的一個實施例,提供一種內(nèi)存,該內(nèi)存包括多個內(nèi)存顆粒,其中,所述內(nèi)存顆粒經(jīng)總線接口標準設備驅(qū)動。
可見,本發(fā)明通過由多個經(jīng)pcie設備驅(qū)動的dram顆粒組成的內(nèi)存池,將服務器與內(nèi)存通過pcie來分離,可以通過pcie交換實現(xiàn)不同服務器對內(nèi)存的動態(tài)分配和按需分配。優(yōu)選的,在將dram顆粒的接口轉(zhuǎn)換成pcie接口過程中,通過內(nèi)存緩沖進行容量擴展。另外,由于通過內(nèi)存緩沖擴展了內(nèi)存顆粒,且通過對內(nèi)存池的動態(tài)分配和按需分配,因 此與標準內(nèi)存相比,不需要增加整個內(nèi)存條,因此成本有較低的優(yōu)勢。而且,相比于現(xiàn)有標準的內(nèi)存必須停機維護,pcie設備可以進行熱插拔,因此可維護性增強。
本領域普通技術(shù)人員將了解,雖然下面的詳細說明將參考圖示實施例、附圖進行,但本發(fā)明并不僅限于這些實施例。而是,本發(fā)明的范圍是廣泛的,且意在僅通過后附的權(quán)利要求限定本發(fā)明的范圍。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯:
圖1是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法的流程圖;
圖2是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法中一組dram接口轉(zhuǎn)換成pcie接口的示意圖;
圖3是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法中單顆粒dram接口轉(zhuǎn)換成pcie接口的示意圖;
圖4是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法中基于pcie接口的dram池部署示意圖;
圖5是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的裝置的結(jié)構(gòu)示意圖。
本領域普通技術(shù)人員將了解,雖然下面的詳細說明將參考圖示實施例、附圖進行,但本發(fā)明并不僅限于這些實施例。而是,本發(fā)明的范圍是廣泛的,且意在僅通過后附的權(quán)利要求限定本發(fā)明的范圍。
具體實施方式
在更加詳細地討論示例性實施例之前應當提到的是,一些示例性實施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時實施。此外,各項操作的順序可以被重新安排。當其操作完成時所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應于方法、函數(shù)、規(guī)程、子例程、子程序等等。
所述計算機設備包括用戶設備與網(wǎng)絡設備。其中,所述用戶設備包括但不限于電腦、智能手機、pda等;所述網(wǎng)絡設備包括但不限于單個網(wǎng)絡服務器、多個網(wǎng)絡服務器組成的服務器組或基于云計算(cloudcomputing)的由大量計算機或網(wǎng)絡服務器構(gòu)成的云,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。其中,所述計算機設備可單獨運行來實現(xiàn)本發(fā)明,也可接入網(wǎng)絡并通過與網(wǎng)絡中的其他計算機設備的交互操作來實現(xiàn)本發(fā)明。其中,所述計算機設備所處的網(wǎng)絡包括但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、城域網(wǎng)、局域網(wǎng)、vpn網(wǎng)絡等。
需要說明的是,所述用戶設備、網(wǎng)絡設備和網(wǎng)絡等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計算機設備或網(wǎng)絡如可適用于本發(fā)明,也應包含在本發(fā)明保護范圍以內(nèi),并以引用方式包含于此。
后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實施。當用軟件、固件、中間件或微代碼來實施時,用以實施必要任務的程序代碼或代碼段可以被存儲在機器或計算機可讀介質(zhì)(比如存儲介質(zhì))中。(一個或多個)處理器可以實施必要的任務。
這里所公開的具體結(jié)構(gòu)和功能細節(jié)僅僅是代表性的,并且是用于描述本發(fā)明的示例性實施例的目的。但是本發(fā)明可以通過許多替換形式來具體實現(xiàn),并且不應當被解釋成僅僅受限于這里所闡述的實施例。
應當理解的是,雖然在這里可能使用了術(shù)語“第一”、“第二”等等來描述各個單元,但是這些單元不應當受這些術(shù)語限制。使用這些術(shù)語僅僅是為了將一個單元與另一個單元進行區(qū)分。舉例來說,在不背離示例性實施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術(shù)語“和/或”包括其中一個或更多所列出的相關(guān)聯(lián)項目的任意和所有組合。
應當理解的是,當一個單元被稱為“連接”或“耦合”到另一單元時,其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當一個單元被稱為“直接連接”或“直接耦合”到另一單元 時,則不存在中間單元。應當按照類似的方式來解釋被用于描述單元之間的關(guān)系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。
這里所使用的術(shù)語僅僅是為了描述具體實施例而不意圖限制示例性實施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個”、“一項”還意圖包括復數(shù)。還應當理解的是,這里所使用的術(shù)語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。
還應當提到的是,在一些替換實現(xiàn)方式中,所提到的功能/動作可以按照不同于附圖中標示的順序發(fā)生。舉例來說,取決于所涉及的功能/動作,相繼示出的兩幅圖實際上可以基本上同時執(zhí)行或者有時可以按照相反的順序來執(zhí)行。
首先對本發(fā)明實施例中的專業(yè)術(shù)語說明如下。
內(nèi)存顆粒:也稱內(nèi)存芯片或內(nèi)存晶片,常指內(nèi)存條的內(nèi)存單元。
dram顆粒:由dram芯片作為內(nèi)存顆粒。
pcie(peripheralcomponentinterfaceexpress,總線接口標準)設備是指支持pcie協(xié)議的設備。
sriov功能,允許在設備/虛擬機之間高效共享pcie設備。
vf(virtualfunction,虛擬功能)驅(qū)動,主要用于發(fā)現(xiàn)pcie設備。
pf(physicalfunction,物理功能)驅(qū)動,主要用于管理內(nèi)存的各用戶空間的地址與vf的id的對應關(guān)系。
下面結(jié)合附圖對本發(fā)明的技術(shù)方案作進一步詳細描述。
圖1是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法的流程圖。本實施例的方法主要包括如下步驟:
s110、接收服務器的內(nèi)存分配請求;
s120、根據(jù)內(nèi)存分配請求,基于由多個經(jīng)pcie設備驅(qū)動的內(nèi)存顆粒組成的內(nèi)存池,判斷內(nèi)存池是否具有一個或多個空閑的內(nèi)存顆粒滿足所請求的內(nèi)存空間;
若有所請求的內(nèi)存空間,執(zhí)行步驟s130;若沒有所請求的內(nèi)存空間,執(zhí)行步驟s140。
s130、將所請求的內(nèi)存空間分配給服務器;
s140、等待;
s150、判斷是否有新釋放的內(nèi)存空間,并判斷釋放的內(nèi)存空間是否滿足所請求的內(nèi)存要求;
若釋放的內(nèi)存空間滿足所請求的內(nèi)存要求,執(zhí)行s160;若不滿足,返回s140,繼續(xù)等待。
s160、將釋放的內(nèi)存空間分配給服務器。
上述內(nèi)存池是由多個經(jīng)pcie設備驅(qū)動的內(nèi)存顆粒組成,其中,內(nèi)存顆??梢允莇ram顆粒。這意味著,需要對dram顆粒進行接口轉(zhuǎn)換和協(xié)議轉(zhuǎn)換,并且,需要利用pcie設備對接口轉(zhuǎn)換后的dram顆粒進行驅(qū)動,以及,需要對基于pcie接口的dram池進行部署。
為進一步理解本發(fā)明,下面對方案從上述幾個方面做進一步詳細介紹。
首先,介紹將dram接口轉(zhuǎn)pcie接口的實現(xiàn)。
參見圖2,是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法中一組dram接口轉(zhuǎn)換成pcie接口的示意圖。
在具體實現(xiàn)上,可借助fpga實現(xiàn)接口轉(zhuǎn)換及協(xié)議轉(zhuǎn)換功能。
將dram接口轉(zhuǎn)pcie接口的過程包括:
(步驟1)dram接口通過memorybuffer進行容量擴展。
本發(fā)明提到的內(nèi)存是指服務器內(nèi)存。本領域技術(shù)人員理解,服務器內(nèi)存也是內(nèi)存,它與普通pc機內(nèi)存在外觀和結(jié)構(gòu)上沒有什么明顯實質(zhì)性的區(qū)別,它主要是在內(nèi)存上引入了一些新的技術(shù)。
例如,服務器內(nèi)存可分為具有緩存的buffer內(nèi)存和不具備緩存的unbuffer內(nèi)存。buffer即緩存器,也可理解成高速緩存,在服務器及圖形工作站內(nèi)存有較多應用,容量多為64k,但隨著內(nèi)存容量的不斷增大,其容量也不斷增加,具有buffer的內(nèi)存將對內(nèi)存的讀寫速度有較大提高。有buffer的內(nèi)存幾乎都帶有ecc(errorcheckingandcorrecting,錯誤檢 查和糾正)功能。
register即寄存器或目錄寄存器,在內(nèi)存上的作用可理解成書的目錄,通過register,當內(nèi)存接到讀寫指令時,會先檢索此目錄,然后再進行讀寫操作,這將大大提高服務器內(nèi)存工作效率。帶有register(寄存器或目錄寄存器)的內(nèi)存一定帶buffer,并且目前能見到的register內(nèi)存也都具有ecc功能。
lrdimm(load-reduceddimm,低負載dimm)通過使用新的技術(shù)和較低的工作電壓,達到降低服務器內(nèi)存總線負載和功耗的目的,并讓服務器內(nèi)存總線可以達到更高的工作頻率并大幅提升內(nèi)存支持容量。
對于通常的unbuffereddimm,服務器使用的registereddimm通過在內(nèi)存條上緩沖信號并重動內(nèi)存顆粒來提升內(nèi)存支持容量,而lrdimm內(nèi)存通過將當前rdimm內(nèi)存上的register芯片改為一種imb(isolationmemorybuffer)內(nèi)存隔離緩沖芯片來降低內(nèi)存總線的負載,并相應地進一步提升內(nèi)存支持容量。
本發(fā)明中的dimm不做類型限制,即,本發(fā)明dimm涵蓋目前或未來的各類型的dimm。并且,通過dimm的memorybuffer(內(nèi)存緩沖)功能實現(xiàn)內(nèi)存容量提升。
在上述步驟(1)之后,通過將fpga的高速io腳與dimm的接口進行連接,然后定義這些引腳,內(nèi)部邏輯實現(xiàn)是將這些高速的引腳的信號在內(nèi)部模擬出一個memory控制器。
dram具有功耗低、集成度高(單片容量大)、價格便宜等優(yōu)點,但是對dram進行控制相對復雜,且需要定時刷新,因此需要設計dram控制器。fpga(fieldprogrammablegatearray)提供大容量可編程邏輯,可設計出符合特定要求的dram控制器(memory控制器)。由于fpga是cmos工藝,其功耗非常小,同時,fpga可重復編寫,從而方便進行性能擴展。如必要,只需改變fpga內(nèi)部邏輯,即能適合不同設計需求或環(huán)境要求。除了采用fpga實現(xiàn)內(nèi)存控制器,還可以采用其他可編程邏輯器件實現(xiàn),例如cpld(complexprogrammablelogicdevice,復雜可編程邏輯器件)、pld(programmablelogicdevice,復雜可編程邏 輯器件)等。
(步驟2)memory控制器的輸入連接dram顆粒,因此memory控制器的輸入為支持ddr(doubledatarate,雙倍速率)進程的ddr單元。
(步驟3)memory控制器的出口為支持nvme(non-volatilememoryexpress,非易失性存儲器標準)與pcie(peripheralcomponentinterfaceexpress,總線接口標準)的高速serdes(serializer/deserializer,串行器/解串器),從而與pcie設備的pcie接口匹配。
本例子中,以ddr內(nèi)存為例進行說明,其具有傳輸速率快的優(yōu)點。
nvme是與ahci一樣都是邏輯設備接口標準,是使用pci-e通道的ssd一種規(guī)范,nvme的設計之初就有充分利用到pci-essd的低延時以及并行性,還有當代處理器、平臺與應用的并行性。ssd的并行性可以充分被主機的硬件與軟件充分利用,相比與現(xiàn)在的ahci標準,nvme標準可以帶來多方面的性能提升。
pcie屬于高速串行點對點雙通道高帶寬傳輸,所連接的設備分配獨享通道帶寬,不共享總線帶寬,主要支持主動電源管理、錯誤報告、端對端的可靠性傳輸、熱插拔以及服務質(zhì)量(qos)等功能。pcie的主要優(yōu)勢就是數(shù)據(jù)傳輸速率高,例如,目前最高的16x2.0版本可達到10gb/s,而且還有相當大的發(fā)展?jié)摿Α?/p>
這里需要將ddr、pcie與nvme的進程/協(xié)議進行硬件語言的邏輯翻譯實現(xiàn)一整套邏輯,本例子中,在fpga內(nèi)部實現(xiàn)。為了實現(xiàn)將dram接口轉(zhuǎn)換為pcie接口轉(zhuǎn)換,fpga內(nèi)部需要識別ddr、pcie與nvme,并進行邏輯轉(zhuǎn)換。參見圖2,fpga內(nèi)部包括ddr單元、nvme單元和pcie單元,其中,ddr單元作為輸入,支持ddrprocess,與一組dram顆粒的統(tǒng)一接口連接;nvme單元,支持nvm協(xié)議,連接ddr單元和pcie單元;pcie單元,支持pcie協(xié)議,其作為fpga輸出,提供與pcie設備連接的pcie接口。
通過上述方式,即可將一組dram接口轉(zhuǎn)換成pcie接口,例如轉(zhuǎn)換為pciex8接口。
參見圖3,是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法中單顆粒dram接口轉(zhuǎn)換成pcie接口的示意圖。圖3方式與圖2方式相比,區(qū)別在于,并不是更改一組dram顆粒的接口,而是更改單個dram顆粒的接口,這兩種方式都可以達到相同的目的。
將dram接口轉(zhuǎn)pcie接口的過程包括:
(步驟1)dram接口通過memorybuffer進行容量擴展。
(步驟2)memory控制器的輸入連接dram顆粒,因此memory控制器的輸入為支持ddr(doubledatarate)協(xié)議的ddr單元。
(步驟3)memory控制器的出口為支持pcie(peripheralcomponentinterfaceexpress,總線接口標準)的pcie單元,從而與pcie設備的pcie接口匹配。
在具體實現(xiàn)上,可以借助晶片實現(xiàn)上述接口轉(zhuǎn)換。將dram接口到pcie接口轉(zhuǎn)換在dram芯片封裝時完成,即dram二次封裝后接口為pcie的接口芯片。
下面,介紹利用pcie設備對轉(zhuǎn)換后的dram顆粒進行驅(qū)動的實現(xiàn)細節(jié)。
在經(jīng)過上述圖2或圖3所示的接口轉(zhuǎn)換后,已經(jīng)得到基于pcie接口的dram顆粒,接下來,需要對基于pcie接口的dram進行驅(qū)動,由此為多服務器共享內(nèi)存容量或是單臺服務器內(nèi)多個虛擬機共享內(nèi)存容量做準備。
本領域技術(shù)人員了解,sriov技術(shù)是一種基于硬件的虛擬化解決方案,可提高性能和可伸縮性。sriov標準允許在虛擬機之間高效共享pcie設備,并且它是在硬件中實現(xiàn)的,可以獲得能夠與本機性能相當?shù)膇/o性能。sriov規(guī)范定義了新的標準,根據(jù)該標準,創(chuàng)建的新設備可允許將虛擬機直接連接到i/o設備。單個i/o資源可由許多虛擬機共享。共享的設備將提供專用的資源,并且還使用共享的通用資源。這樣,每個虛擬機都可訪問唯一的資源。因此,啟用了sriov并且具有適當?shù)挠布蚾s支持的pcie設備可以顯示為多個單獨的物理設備,每個都具有自己的pcie配置空間。
sriov中主要的兩種功能是:(1)物理功能(physicalfunction,pf):用于支持sriov功能的pci功能,如sriov規(guī)范中定義。pf包含sriov功能結(jié)構(gòu),用于管理sriov功能。pf是全功能的pcie功能,可以像其他任何pcie設備一樣進行發(fā)現(xiàn)、管理和處理。pf擁有完全配置資源,可以用于配置或控制pcie設備。(2)虛擬功能(virtualfunction,vf):與物理功能關(guān)聯(lián)的一種功能。vf是一種輕量級pcie功能,可以與物理功能以及與同一物理功能關(guān)聯(lián)的其他vf共享一個或多個物理資源。vf僅允許擁有用于其自身行為的配置資源。
本發(fā)明中,對基于pcie接口的dram進行驅(qū)動,主要包括以下流程:
(1)首先是使能pcie硬件的sriov功能
這個功能使能是說明這個pcie設備支持sriov功能,可以在os層面發(fā)現(xiàn)這個功能設備。
(2)pf驅(qū)動
安裝在服務器或者是管理機器中的一個驅(qū)動,這個驅(qū)動主要是為了管理內(nèi)存的各用戶空間的地址與vf的id的對應關(guān)系,即pf可以看到pcie設備的全部空間的id對應的地址,可以進行管理。
(3)vf驅(qū)動
安裝在虛擬機中的一個驅(qū)動,主要是用于發(fā)現(xiàn)pcie設備。
(4)地址映射
主要是實現(xiàn)pcie的地址、服務器(虛擬機)地址與內(nèi)存地址的映射。
(5)加載驅(qū)動時完成內(nèi)存地址映射
驅(qū)動加載時完成以上這些地址映射,以便在內(nèi)存中看到這塊pcie空間。
最后,介紹對基于pcie接口的dram池進行部署的實現(xiàn)細節(jié)。
在完成上述接口轉(zhuǎn)換、基于pcie接口的dram驅(qū)動之后,即得到由多個基于pcie接口的dram顆粒組成的內(nèi)存池,下面就需要對內(nèi)存池進行合理部署和管理,從而高效進行內(nèi)存分配,達到多臺服務器共享同一內(nèi)存池的目的。
對基于pcie接口的dram池進行部署主要包括以下流程:
(1)多臺物理機分享內(nèi)存池的內(nèi)存空間
多臺主機共享這個內(nèi)存池中的存儲空間。
(2)管理單元管理pf驅(qū)動運行
管理單元中運行的是pf的驅(qū)動,作用是將用戶空間與vf的空間id對應并進行靈活的在線匹配。
(3)在server上運行vf驅(qū)動:
上述準備完成后,vf會在各服務器上運行,服務器發(fā)現(xiàn)自己所看到地址空間,可以對空間進行操作。
(4)每個server上的內(nèi)存空間分配由管理單元來統(tǒng)一管理,靈活在線分配。
參見圖4,是根據(jù)本發(fā)明實施例的動態(tài)分配內(nèi)存的方法中基于pcie接口的dram池部署示意圖。
圖4中,示出了多臺服務器、由多個經(jīng)pci設備驅(qū)動的dram顆粒組成的內(nèi)存池、管理單元、pcie開關(guān)。其中,服務器包括pcie模塊,如前描述的,在服務器上運行vf驅(qū)動,從而使服務器發(fā)現(xiàn)自身地址空間,并對地址空間進行操作。
其中,管理單元負責管理服務器針對內(nèi)存池的內(nèi)存分配,包括三個方面:管理已經(jīng)在使用的內(nèi)存;釋放使用完成的內(nèi)存;末使用內(nèi)存分配。具體的,管理單元根據(jù)服務器的內(nèi)存分配請求,向服務器分配請求所需要的內(nèi)存容量,在使用完成后,再進行釋放并再分配到有需要的請求的服務器上。
pcie開關(guān)可提供多個端口,從而連接多個內(nèi)存顆粒,因此可一次性將多個內(nèi)存顆粒的內(nèi)存空間分配給特定服務器。
相較于現(xiàn)有技術(shù)中每臺服務器通過插槽接入固定數(shù)量的內(nèi)存的方式,不但通過內(nèi)存buffer擴展了內(nèi)存容量,而且,可按需實現(xiàn)內(nèi)存分配。例如,一臺服務器具有16根插槽,若每個內(nèi)存條的容量是16g,即使全部插滿也只有256g容量;假設現(xiàn)需要300g內(nèi)存,按照現(xiàn)有方式只有增加一臺服務器,雖然這樣可以滿足內(nèi)存需求,然而新增加服務器的其他資 源則是浪費。而通過本發(fā)明的方式,通過內(nèi)存buffer擴展了內(nèi)存容量,并且可根據(jù)需求設置一定數(shù)量的經(jīng)pcie設備驅(qū)動的dram顆粒,在服務器提出內(nèi)存分配請求時,可根據(jù)請求的內(nèi)存大小,動態(tài)選取滿足所請求內(nèi)存大小的數(shù)量的內(nèi)存顆粒,將這部分內(nèi)存顆粒的內(nèi)容分配給服務器,在服務器使用完成后,再動態(tài)釋放掉這部分內(nèi)存空間,供其他有需要的服務器使用。
可見,本發(fā)明通過將dram顆粒的接口通過可編程邏輯芯片(fpga)或晶片來轉(zhuǎn)換成pcie接口,從而實現(xiàn)dram接口到pcie接口的轉(zhuǎn)換,然后通過pcie設備的驅(qū)動,將分配后的pcie設備指定到特定的計算節(jié)點后,將這個部分的pcie地址映射到內(nèi)存地址中,從而實現(xiàn)驅(qū)動所分配的那個部分的內(nèi)存的目的;通過內(nèi)存池的部署和管理,可為服務器分配所請求的一定數(shù)量的內(nèi)存空間,并對內(nèi)存進行分配、釋放的動態(tài)管理。
本發(fā)明方案與現(xiàn)有技術(shù)相比,至少具有以下優(yōu)點:
(1)按需求分配內(nèi)存
通過pcie設備驅(qū)動的dram顆粒組成的內(nèi)存池,可以通過pcie交換實現(xiàn)不同服務器對內(nèi)存的動態(tài)分配和按需分配。
(2)內(nèi)存與服務器的分離
通過pcie接口的轉(zhuǎn)換,可以實現(xiàn)pcie的擴展,pcie與標準服務器的pcieslot連接,這樣將服務器與內(nèi)存通過pcie來分離。
(3)實現(xiàn)大容量內(nèi)存
通過內(nèi)存buffer的擴展,相比標準內(nèi)存,容量可以擴大很多倍。
(4)節(jié)約成本
由于通過內(nèi)存buffer擴展了內(nèi)存顆粒,且通過對內(nèi)存池的動態(tài)分配和按需分配,因此與標準內(nèi)存相比,成本有較低的優(yōu)勢。
(5)可維護性增強
相比于現(xiàn)有標準的內(nèi)存必須停機維護,pcie設備可以進行熱插拔,因此可維護性增強。
本發(fā)明實施例提供一種與上述方法相對應的一種動態(tài)分配內(nèi)存的裝置。參見圖5,該裝置包括:
請求接收單元501,用于接收服務器的內(nèi)存分配請求;
判斷單元502,用于根據(jù)所述內(nèi)存分配請求,基于由多個經(jīng)pcie設備驅(qū)動的內(nèi)存顆粒組成的內(nèi)存池,判斷內(nèi)存池是否具有一個或多個空閑的內(nèi)存顆粒的內(nèi)存總和滿足所請求的內(nèi)存大小;
分配單元503,用于將所請求的內(nèi)存分配給所述服務器。
優(yōu)選的,該裝置還包括:
接口轉(zhuǎn)換單元504,用于將dram接口通過內(nèi)存緩沖進行容量擴展;以及,將內(nèi)存控制器的輸入連接dram顆粒,在內(nèi)存控制器進行ddr內(nèi)存進程到pcie進程的轉(zhuǎn)換邏輯,使內(nèi)存控制器的輸出為pcie接口,使內(nèi)存控制器的輸出為pcie接口。
優(yōu)選的,該裝置還包括:
驅(qū)動單元505,用于使能pcie設備的sriov功能;安裝pf驅(qū)動和vf驅(qū)動;以及,實現(xiàn)pcie地址、服務器地址與內(nèi)存地址的映射,并將地址映射寫入所述pf驅(qū)動和vf驅(qū)動。
優(yōu)選的,該裝置還包括:
內(nèi)存池部署單元506,用于控制多臺服務器共享內(nèi)存池的內(nèi)存空間;在所述管理單元中運行所述pf驅(qū)動,從而將用戶空間與vf空間id對應并進行匹配;以及,在各服務器上運行所述vf驅(qū)動,從而使服務器發(fā)現(xiàn)自身對應的地址空間并進行操作。
優(yōu)選的,
判斷單元502還用于,判斷服務器是否使用完成所分配的內(nèi)存空間;
裝置還包括:釋放單元507,用于釋放使用完成的內(nèi)存空間。
優(yōu)選的,
判斷單元502還用于,若判斷不具有所請求的內(nèi)存空間,則等待,并判斷是否有新釋放的內(nèi)存空間;若釋放的內(nèi)存空間滿足所請求的內(nèi)存要求,則指示分配單元503將釋放的內(nèi)存空間分配給所述服務器。
此外,本發(fā)明還提供一種動態(tài)分配內(nèi)存的系統(tǒng),該系統(tǒng)包括:由多個經(jīng)pcie設備驅(qū)動的內(nèi)存顆粒組成的內(nèi)存池;一個或多個服務器;以及,如前描述的圖5所示的動態(tài)分配內(nèi)存的裝置。
另外,本發(fā)明還提供一種內(nèi)存,該內(nèi)存包括多個內(nèi)存顆粒,其中,所述內(nèi)存顆粒經(jīng)pcie設備驅(qū)動。
需要注意的是,本發(fā)明可在軟件和/或軟件與硬件的組合體中被實施,例如,可采用專用集成電路(asic)、通用目的計算機或任何其他類似硬件設備來實現(xiàn)。在一個實施例中,本發(fā)明的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本發(fā)明的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機可讀記錄介質(zhì)中,例如,ram存儲器,磁或光驅(qū)動器或軟磁盤及類似設備。另外,本發(fā)明的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
另外,本發(fā)明的一部分可被應用為計算機程序產(chǎn)品,例如計算機程序指令,當其被計算機執(zhí)行時,通過該計算機的操作,可以調(diào)用或提供根據(jù)本發(fā)明的方法和/或技術(shù)方案。而調(diào)用本發(fā)明的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運行的計算機設備的工作存儲器中。在此,根據(jù)本發(fā)明的一個實施例包括一個裝置,該裝置包括用于存儲計算機程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當該計算機程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運行基于前述根據(jù)本發(fā)明的多個實施例的方法和/或技術(shù)方案。
對于本領域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實施例的細節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本發(fā)明。因此,無論從哪一點來看,均應將實施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本發(fā)明內(nèi)。不應將權(quán)利要求中的任何附圖標記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復數(shù)。系統(tǒng)權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。