本發(fā)明涉及內(nèi)存管理單元
技術(shù)領(lǐng)域:
:,具體地,涉及一種設(shè)備內(nèi)存管理單元的虛擬化方法。
背景技術(shù):
::內(nèi)存管理單元(mmu)能有效地執(zhí)行虛擬存儲器管理,一些現(xiàn)代設(shè)備也利用內(nèi)存管理單元來進(jìn)行設(shè)備內(nèi)的地址翻譯。典型的擁有內(nèi)存管理單元的設(shè)備有圖形處理器(gpu)、圖像處理單元(ipu)、infiniband、甚至現(xiàn)場可編程邏輯閘陣列(fpga)。然而,目前并沒有令人滿意的解決方案能夠很好地支持設(shè)備內(nèi)存管理單元的虛擬化。在目前主流的io虛擬化解決方案中,設(shè)備模擬(deviceemulation)和半虛擬化(para-virtualization)借助cpu來模擬進(jìn)行設(shè)備地址翻譯,這種做法復(fù)雜性很高,性能很低,很難支持模擬設(shè)備的全部功能;直傳技術(shù)(directpass-through)引入了硬件iommu,通過犧牲設(shè)備的共享能力,將設(shè)備專用于單個(gè)客戶機(jī),以達(dá)到實(shí)現(xiàn)設(shè)備全部功能和最優(yōu)性能的目的;單根虛擬化(sr-iov)技術(shù)創(chuàng)建多個(gè)pcie功能,并分配給多個(gè)客戶機(jī),從而達(dá)到同時(shí)對多個(gè)客戶機(jī)進(jìn)行設(shè)備地址翻譯。但是單根虛擬化硬件復(fù)雜,受限于線路資源,可擴(kuò)展性收到影響。一種調(diào)解直傳(mediatedpass-through)的技術(shù)最近脫穎而出,被gvirt采用實(shí)現(xiàn)了產(chǎn)品級的gpu全虛擬化。調(diào)解直傳的核心是直傳性能相關(guān)的關(guān)鍵資源,而捕獲并模擬特權(quán)級資源。調(diào)解直傳采用影子頁表(shadowpagetable)來虛擬化設(shè)備內(nèi)存管理單元。但是影子頁表的實(shí)現(xiàn)復(fù)雜,并且在內(nèi)存密集型任務(wù)中導(dǎo)致嚴(yán)重的性能下降。以gvirt為例,盡管gvirt在普通的任務(wù)中表現(xiàn)良好,但是對于內(nèi)存密集型的圖像處理任務(wù),最差能達(dá)到90%的性能下降。由于管理程序(hypervisor)的接入,影子頁表的維護(hù)成本很高。此外,影子頁表實(shí)現(xiàn)相當(dāng)復(fù)雜,gvirt包含大約3500行代碼用來虛擬化gpu內(nèi)存管理單元,這么大的代碼量很難維護(hù)并且容易導(dǎo)致潛在的程序錯(cuò)誤。再者,影子頁表需要客戶端驅(qū)動程序(driver)顯式地告知管理程序客戶機(jī)頁表的釋放,從而使得管理程序能正確地去除相應(yīng)頁的寫保護(hù)。修改客戶機(jī)驅(qū)動程序尚能接受,但是當(dāng)客戶機(jī)頁表的釋放動作由客戶機(jī)內(nèi)核(os)負(fù)責(zé)時(shí),修改內(nèi)核來支持設(shè)備mmu虛擬化,就顯得不合適。目前沒有發(fā)現(xiàn)同本發(fā)明類似技術(shù)的說明或報(bào)道,也尚未收集到國內(nèi)外類似的資料。技術(shù)實(shí)現(xiàn)要素:針對現(xiàn)有技術(shù)中存在的上述不足,本發(fā)明旨在提出一種高效的設(shè)備內(nèi)存管理單元的虛擬化解決方案,即,設(shè)備內(nèi)存管理單元的虛擬化方法,用以取代調(diào)解直傳中的影子頁表實(shí)現(xiàn)。本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的。一種設(shè)備內(nèi)存管理單元的虛擬化方法,包括:復(fù)用客戶機(jī)的內(nèi)存管理單元作為第一層地址翻譯:客戶機(jī)設(shè)備頁表將設(shè)備虛擬地址翻譯成客戶機(jī)物理地址;利用iommu構(gòu)造第二層地址翻譯:iommu通過iommu內(nèi)對應(yīng)設(shè)備的io頁表將客戶機(jī)物理地址翻譯成宿主機(jī)物理地址;當(dāng)設(shè)備擁有者切換時(shí),第二層地址翻譯動態(tài)地作相應(yīng)的切換;采用分散設(shè)備內(nèi)各個(gè)引擎地址空間的方式,使得設(shè)備內(nèi)各個(gè)引擎的地址空間互不重疊,繼而使得iommu能夠同時(shí)對多個(gè)客戶機(jī)的設(shè)備地址進(jìn)行重映射。優(yōu)選地,所述第二層地址翻譯對于客戶機(jī)是透明的。優(yōu)選地,第一層地址翻譯輸出的客戶機(jī)物理地址允許超過實(shí)際物理空間大小。優(yōu)選地,采用時(shí)分策略復(fù)用iommu內(nèi)對應(yīng)設(shè)備的io頁表;所述時(shí)分策略具體為:當(dāng)一個(gè)客戶機(jī)啟動時(shí),為該客戶機(jī)構(gòu)造一個(gè)io頁表候選,該io頁表候選即客戶機(jī)物理地址到宿主機(jī)物理地址的映射;當(dāng)設(shè)備分配給特權(quán)級客戶機(jī)時(shí),特權(quán)級客戶機(jī)對應(yīng)的io頁表在io頁表候選中動態(tài)切換。優(yōu)選地,所述動態(tài)切換的過程,只需替換iommu重映射組件中上下文條目中的根指針。優(yōu)選地,分散設(shè)備內(nèi)各個(gè)引擎地址空間的方式采用如下方式:通過打開或關(guān)閉設(shè)備內(nèi)各個(gè)引擎io頁表項(xiàng)的一個(gè)或多個(gè)位來擴(kuò)展或限制各個(gè)引擎的地址空間。優(yōu)選地,在采用時(shí)分策略復(fù)用客戶機(jī)io頁表時(shí),還包括:采用頁表選擇域內(nèi)刷新(page-selective-within-domaininvalidation)策略對設(shè)備的iotlb刷新;所述頁表選擇域內(nèi)刷新(page-selective-within-domaininvalidation)策略具體為:給設(shè)備分配一個(gè)特殊的domainid,只有在domainid這個(gè)域中的所有客戶機(jī)覆蓋到的內(nèi)存空間的iotlb項(xiàng)會被刷新。與現(xiàn)有技術(shù)相比,本發(fā)明具有如下有益效果:1、本發(fā)明提出的設(shè)備內(nèi)存管理單元的虛擬化方法,能夠高效地虛擬化設(shè)備內(nèi)存管理單元。2、本發(fā)明提出的設(shè)備內(nèi)存管理單元的虛擬化方法,成功地將iommu結(jié)合到調(diào)解直傳中,利用系統(tǒng)iommu來做第二層地址翻譯,淘汰了復(fù)雜低效的影子頁表。3、本發(fā)明提出的設(shè)備內(nèi)存管理單元的虛擬化方法,不僅提高了設(shè)備內(nèi)存管理單元在虛擬化下的性能,而且實(shí)現(xiàn)簡單,對客戶機(jī)完全透明,是一個(gè)通用的高效的解決方案。附圖說明通過閱讀參照以下附圖對非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、目的和優(yōu)點(diǎn)將會變得更明顯:圖1為時(shí)分復(fù)用io頁表示意圖;圖2為gdemon整體架構(gòu)示意圖;圖3為ggtt偏移和重映射示意圖;圖4為gmedia基準(zhǔn)測試結(jié)果示意圖;圖5為linux2d/3d基準(zhǔn)測試結(jié)果示意圖;圖6為windows2d/3d基準(zhǔn)測試結(jié)果示意圖。具體實(shí)施方式下面對本發(fā)明的實(shí)施例作詳細(xì)說明:本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程。應(yīng)當(dāng)指出的是,對本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。實(shí)施例本實(shí)施例提出的設(shè)備內(nèi)存管理單元的虛擬化方法,稱之為demon(devicemmuvirtualization)。demon的主要思想是:復(fù)用客戶機(jī)的內(nèi)存管理單元作為第一層地址翻譯,并利用iommu構(gòu)造第二層地址翻譯。當(dāng)設(shè)備擁有者(deviceowner)切換時(shí),demon動態(tài)地切換第二層地址翻譯。為了更好地支持擁有多個(gè)引擎的設(shè)備內(nèi)細(xì)粒度并行,demon提出了一項(xiàng)硬件提議,使得設(shè)備內(nèi)各個(gè)引擎的地址空間互不重疊,繼而使得iommu能夠同時(shí)對多個(gè)客戶機(jī)的設(shè)備地址進(jìn)行重映射。在demon中,一個(gè)設(shè)備虛擬地址(devicevirtualaddress)首先被客戶機(jī)設(shè)備頁表翻譯成客戶機(jī)物理地址(guestphysicaladdress),然后被iommu通過對應(yīng)的io頁表翻譯成宿主機(jī)物理地址(hostphysicaladdress)。這里,第二層地址翻譯對于客戶機(jī)是透明的,這一特點(diǎn)使得demon是一個(gè)通用的解決方案。接下來詳細(xì)介紹demon的設(shè)計(jì)細(xì)節(jié)。首先是io頁表的動態(tài)切換。我們知道,從同一個(gè)設(shè)備發(fā)起的所有dma請求只能被唯一確定的io頁表所重映射,該對應(yīng)的io頁表是由設(shè)備的bdf號所決定的,因此一個(gè)io頁表只能為一個(gè)客戶機(jī)服務(wù)。為了解決iommu的共享問題,demon采用時(shí)分策略來復(fù)用iommu內(nèi)對應(yīng)該設(shè)備的io頁表,如圖1所示。當(dāng)一個(gè)客戶機(jī)啟動時(shí),demon會為之構(gòu)造一個(gè)io頁表候選,該io頁表候選即客戶機(jī)物理地址到宿主機(jī)物理地址的映射(physical-to-machinemapping,p2m)。demon將設(shè)備分配給特權(quán)級客戶機(jī)(dom0),而特權(quán)級客戶機(jī)對應(yīng)的io頁表會在各個(gè)io頁表候選中動態(tài)切換。完成切換的過程,只需要替換iommu重映射組件中上下文條目(contextentry)中的根指針(l4頁表根地址)即可;實(shí)際上,由于客戶機(jī)的物理內(nèi)存一般不會太大,因此只需要替換第3級頁表中的幾個(gè)頁表項(xiàng)即可。接著是io頁表的劃分。io頁表的時(shí)分復(fù)用解決了iommu的共享問題,但是同時(shí)只有一個(gè)客戶機(jī)能夠處理任務(wù),因?yàn)檫@時(shí)的io頁表填充了該客戶機(jī)對應(yīng)的io頁表候選。對于有多個(gè)能獨(dú)立工作引擎的復(fù)雜設(shè)備,來自各個(gè)客戶機(jī)的任務(wù)應(yīng)當(dāng)可以被同時(shí)分配到各個(gè)引擎上,利用并行進(jìn)行加速。為了解決細(xì)粒度并行的問題,demon提出一項(xiàng)硬件建議,即分散設(shè)備中各個(gè)引擎的地址空間。有很多方式可以消除各個(gè)引擎之間的地址空間重疊,例如,通過打開/關(guān)閉各個(gè)引擎頁表項(xiàng)的一個(gè)或者多個(gè)位來擴(kuò)展/限制各個(gè)引擎的地址空間。這里,第一層翻譯的輸出可以超過實(shí)際物理空間大小,因?yàn)榈诙拥刂贩g會重映射到正確的機(jī)器物理地址。舉例說明,如果置上頁表項(xiàng)保留的33位,那么原來的gpa會變成gpa+4g,它將永遠(yuǎn)不會和原先的[0,4g]空間所重疊;另一方面,原來io頁表中(gpa,hpa)的映射現(xiàn)在變成(gpa+4g,hpa)來完成正確的地址重映射。io頁表的劃分使得多個(gè)客戶機(jī)的設(shè)備地址翻譯成為可能,只要客戶機(jī)所正在使用的引擎的地址空間互不重疊。最后是高效的iotlb刷新策略。在iommu中,有效的翻譯會被緩存在iotlb中,用以減少翻譯時(shí)走io頁表帶來的開銷。但是在demon中,由于時(shí)分復(fù)用的策略,為了消除臟的翻譯緩存,iotlb必須要刷新。這里,iotlb的刷新勢必會帶來性能的下降。為了減少iotlb刷新帶來的開銷,demon采用page-selective-within-domaininvalidation策略。在該策略下,demon給(虛擬化)設(shè)備分配一個(gè)特殊的domainid,并且只有在domainid這個(gè)域中的所有客戶機(jī)覆蓋到的內(nèi)存空間的iotlb項(xiàng)會被刷新,而不是全局刷新。通過縮小iotlb刷新的范圍,使得iotlb刷新帶來的開銷最小化。為使本實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合gpummu虛擬化實(shí)例對本實(shí)施例進(jìn)行詳細(xì)描述。gpummu有兩種頁表,分別是全局圖形轉(zhuǎn)換表(ggtt)和進(jìn)程圖形轉(zhuǎn)換表(ppgtt)。gvirt采用影子頁表的方式對gpummu進(jìn)行虛擬化,而利用本實(shí)施例提供的demon技術(shù)對gpummu的進(jìn)行虛擬化得到的架構(gòu)gdemon如圖2所示。將demon應(yīng)用到gpummu虛擬化中是比較直接的,在我們的測試平臺上,gpu的bdf號是00∶02.0,它所確定的io頁表需要時(shí)分復(fù)用。具體地,在調(diào)度虛擬gpu設(shè)備時(shí),gdemon會插入一個(gè)額外的超級調(diào)用(hypercall)來顯式地通知管理程序切換io頁表到相應(yīng)的候選。ppgtt是位于內(nèi)存的,是各個(gè)客戶機(jī)所獨(dú)有的,因此ppgtt在gdemon中可以直傳。但是ggtt因?yàn)槠洫?dú)有的性質(zhì),需要進(jìn)一步地調(diào)整。ggtt位于mmio區(qū)域,是特權(quán)級資源。由于分離的cpu和gpu調(diào)度策略,ggtt需要被切分;同時(shí)ballooning的技術(shù)也被運(yùn)用進(jìn)來,從而顯著地提高性能。這些原因?qū)е耮gtt只能用影子頁表進(jìn)行虛擬化。在gdemon環(huán)境中,要整合ggtt的影子頁表實(shí)現(xiàn),需要將ggtt影子頁表項(xiàng)添加一個(gè)較大的偏移,使得它和ppgtt的地址空間互不重疊,同時(shí)io頁表中也要做相應(yīng)的重映射,如圖3所示(假設(shè)客戶機(jī)內(nèi)存為2gb,ggtt偏移為128gb)。測試平臺選取第5代cpu,i5-5300u,4核心,16gb內(nèi)存,intelhdgraphics5500(broadwellgt2)顯卡,4gb顯存,其中1gb是agpaperture??蛻魴C(jī)選取64位的ubuntu14.04和64位的window7,宿主機(jī)運(yùn)行64位的ubuntu14.04系統(tǒng),xen4.6為管理程序。所有的客戶機(jī)都分配2個(gè)虛擬cpu、2gb內(nèi)存和512mb顯存(其中128mb是agpaperture)?;鶞?zhǔn)測試選取gmedia、cario-perf-trace、phoronixtestsuite、passmark、3dmark、heaven和tropics。首先通過虛擬化模塊代碼量來測試gdemon的架構(gòu)簡潔性。在gvirt中用以虛擬化gpummu的代碼共計(jì)3500行,其中g(shù)gtt子模塊有1200行,ppgtt子模塊有1800行,地址轉(zhuǎn)換輔助模塊500行。在gdemon中,ggtt子模塊1250行,ppgtt子模塊的影子頁表被完全消除,增加了io頁表維護(hù)模塊的450行代碼,共計(jì)2200行代碼,比gvirt少了37%的代碼量。接著在gmedia基準(zhǔn)測試中,由于大量顯存的使用,客戶機(jī)頁表操作頻繁,對gpummu虛擬化的要求較高,因此gmedia能很好地反映gvirt和gdemon的性能。測試結(jié)果如圖4所示。gmedia有兩個(gè)參數(shù),分別是通道數(shù)(channel)和分辨率(resolution),參數(shù)越大,gmedia的負(fù)載越高。從圖4中可以看出,在通道數(shù)為15,分辨率為1080p的測試用例下,gdemon的性能高達(dá)gvirt的性能的19.73倍。最后在一般的2d/3d任務(wù)中,客戶機(jī)頁表操作相對較少,gpummu虛擬化不是主要性能瓶頸,盡管如此,gdemon的性能幾乎在所有測試用例中都優(yōu)于gvirt的性能,性能提高最高可達(dá)17.09%(2d)和13.73%(3d),如圖5和圖6所示。通過gpummu虛擬化的實(shí)現(xiàn)和測試,表明demon是適用于設(shè)備內(nèi)存管理單元虛擬化的一種高效的解決方案。以上對本發(fā)明的具體實(shí)施例進(jìn)行了描述。需要理解的是,本發(fā)明并不局限于上述特定實(shí)施方式,本領(lǐng)域技術(shù)人員可以在權(quán)利要求的范圍內(nèi)做出各種變形或修改,這并不影響本發(fā)明的實(shí)質(zhì)內(nèi)容。當(dāng)前第1頁12當(dāng)前第1頁12