低級(jí)著色器語(yǔ)言。編譯可以是即時(shí)(JIT)編譯,或者應(yīng)用可以執(zhí)行 著色器預(yù)編譯。在一些實(shí)施例中,在對(duì)3D圖形應(yīng)用1010的編譯期間,高級(jí)著色器被編譯成 低級(jí)著色器。
[0115] 在一些實(shí)施例中,用戶(hù)模式圖形驅(qū)動(dòng)器1026包含后端著色器編譯器1027,其將著 色器指令1012轉(zhuǎn)換為硬件專(zhuān)用表示。當(dāng)使用OpenGL API時(shí),采用GLSL高級(jí)語(yǔ)言的著色器 指令1012被傳遞到用戶(hù)模式圖形驅(qū)動(dòng)器1026以用于編譯。在一些實(shí)施例中,用戶(hù)模式圖 形驅(qū)動(dòng)器1026使用操作系統(tǒng)內(nèi)核模式功能1028來(lái)與內(nèi)核模式圖形驅(qū)動(dòng)器1029進(jìn)行通信。 在一些實(shí)施例中,內(nèi)核模式圖形驅(qū)動(dòng)器1029與圖形處理器1032通信以分派命令和指令。
[0116] 具有地址氣球操作和地址空間重新映射的虛擬化
[0117] 現(xiàn)在轉(zhuǎn)向圖11A,示出了圖形虛擬化環(huán)境,其中多個(gè)虛擬機(jī) (¥1)1110(1110 &-1110(1)經(jīng)由虛擬機(jī)監(jiān)視器(¥11)1114訪問(wèn)圖形硬件1112。圖形硬件 1112可以包括例如支持圖形相關(guān)任務(wù)的性能的寄存器和/或存儲(chǔ)器設(shè)備。每個(gè)VM 1110 可以充當(dāng)自足式平臺(tái),運(yùn)行其自己的操作系統(tǒng)(0S)和/或應(yīng)用軟件。在所示出的例子中, VM 1110a包括圖形驅(qū)動(dòng)器1116 (例如,客戶(hù)軟件),其引導(dǎo)關(guān)于圖形硬件1112的各種操作 1118 (1118a、1118b)。其它VM還可以包括專(zhuān)用于各個(gè)VM的0S配置的客戶(hù)軟件。
[0118] 操作1118 -般涉及圖形相關(guān)應(yīng)用(例如,游戲應(yīng)用、視頻應(yīng)用等)的存儲(chǔ)器映射 輸入輸出(ΜΜΙ0)地址操作。通常,圖形硬件1112中的圖形存儲(chǔ)器地址空間可以在VM 1110 之間被分割,以使得每個(gè)VM 1110使用的地址可以直接由圖形硬件1112使用。在一個(gè)例子 中,VM 1110a包括效率邏輯1122以用于識(shí)別VM 1110a的分配的地址空間以用于麗10操 作,并對(duì)未分配給VM 1110a的剩余地址空間(例如,分配給其它VM的地址空間)進(jìn)行氣球 操作。因此,"氣球操作"(ballooning)可以涉及VM 1110a合作地避免使用剩余地址空間。 如將更詳細(xì)討論地,VMM 1114可以確保VMlllOa遵從避免使用剩余地址空間的策略。這種 方案可以使得VM 1110a的分配的地址空間(事實(shí)上,整個(gè)圖形存儲(chǔ)器地址空間)的視圖與 VMM 1114的分配的地址空間(例如,VMM地址空間)的視圖相同。其它VM也可以包括效率 邏輯來(lái)以類(lèi)似方式對(duì)它們的非分配的地址空間進(jìn)行氣球操作。作為結(jié)果,可以淘汰傳統(tǒng)的 地址重新映射和/或地址固定方案,這轉(zhuǎn)而可以顯著地增強(qiáng)效率。
[0119] 更具體地,可以為操作1118的第一組1118a(例如,性能關(guān)鍵操作)提供到圖形 硬件1112的窗孔區(qū)域的直接訪問(wèn),而操作1118的第二組1118b(例如,非或少性能關(guān)鍵操 作)可以在給定到圖形硬件1112的麗10地址空間的訪問(wèn)之前由VMM 1114的捕捉和仿真 (trap-and-emulate)模塊1120進(jìn)行處理。"窗孔"區(qū)域可以是圖形處理單元(GPU)圖形存 儲(chǔ)器地址空間中的、映射到系統(tǒng)存儲(chǔ)器地址空間以供中央處理單元(CPU)訪問(wèn)的一部分。 因此,整個(gè)圖形存儲(chǔ)器地址空間(窗孔和非窗孔區(qū)域)可以由GPU以所示出的方案訪問(wèn)。例 如,操作1118可以涉及幀緩沖器訪問(wèn)和其它客戶(hù)虛擬0S活動(dòng)。如將更詳細(xì)討論地,窗孔區(qū) 域可以在VM 10之間被分割,以使得不需要地址重新映射和/或地址固定。
[0120] 圖11B示出了圖形虛擬化環(huán)境,在其中多個(gè)VM 1110生成直接通過(guò)到圖形處理器 (例如,GPU 1121)的命令1119。命令1119可以包括渲染命令、媒體命令、位塊傳送器命令 等,其可以通過(guò)主機(jī)處理器(例如,運(yùn)行VM 1110和/或VMM 1114的CPU(未示出))被放 置在批處理緩沖器和/或環(huán)形緩沖器1123中。GPU 1121可以從批處理緩沖器和/或環(huán)形 緩沖器1123中取得命令1119以進(jìn)行執(zhí)行。批處理緩沖器和/或環(huán)形緩沖器1123因此可 以使得CPU能夠安全地將命令發(fā)送到GPU 1121。通常,命令1119可以包括圖形存儲(chǔ)器地址 (GMA),圖形存儲(chǔ)器地址(GMA)可以被認(rèn)為是圖形硬件的非窗孔區(qū)域。
[0121] 如在與麗10操作1118相關(guān)聯(lián)的窗孔區(qū)域的情況下(圖11A),與命令1119相關(guān) 聯(lián)的非窗孔區(qū)域可以在VM 1110之間被分割,以使得不需要地址重新映射和/或地址固定。 此外,所示出的效率邏輯1122可以識(shí)別VMlllOa的分配的地址空間以用于命令,并對(duì)未分 配給VM 1110a的剩余地址空間(例如,分配給其它VM的地址空間)進(jìn)行氣球操作。如已 經(jīng)說(shuō)明的,其它VM也可以包括效率邏輯從而以類(lèi)似方式對(duì)它們的非分配的地址空間進(jìn)行 氣球操作。
[0122] 圖12示出了分割方案,其中,分配給VM的圖形存儲(chǔ)器地址空間的VM視圖1236 與圖形存儲(chǔ)器地址空間的VMM視圖1226相同。在所示出的例子中,特定VM(VM2)可以發(fā) 布用于直接訪問(wèn)圖形存儲(chǔ)器地址空間的窗孔區(qū)域以及直接訪問(wèn)圖形存儲(chǔ)器地址空間的非 窗孔區(qū)域的命令。在所示出的例子中,圖形轉(zhuǎn)換表(GTT) 1232將圖形存儲(chǔ)器地址空間中的 地址映射為在與圖形硬件/存儲(chǔ)器相關(guān)聯(lián)的系統(tǒng)總線(xiàn)上的物理地址空間(例如,系統(tǒng)地址 空間)1234中的地址。所示出的分割方案還可以應(yīng)用到系統(tǒng)中的其他VM(例如,VM0、VM1、 VM3)。例如,未分配給VM2的地址空間可以在VM0、VM1、VM3之間被分割并分配給VM0、VM1、 VM3等,以使得其它VM也可以發(fā)布用于直接訪問(wèn)圖形硬件的窗孔區(qū)域以及直接訪問(wèn)圖形硬 件的非窗孔區(qū)域的命令。
[0123] 更具體地,示出了地址氣球操作方案,其中,分配給VM的圖形存儲(chǔ)器地址空間的 VM視圖1236包括被氣球操作的地址空間。例如,在窗孔區(qū)域中的除分配的地址空間1238之 外的剩余地址空間可以被進(jìn)行氣球操作,以使得與分配的地址空間1238相對(duì)應(yīng)的VM(VM2) 將不使用窗孔區(qū)域中的剩余地址空間。類(lèi)似地,在非窗孔區(qū)域中的除分配的地址空間1240 之外的剩余地址空間可以被進(jìn)行氣球操作,以使得所討論的VM將不使用非窗孔區(qū)域中的 剩余地址空間。VMM視圖1226展示了從VM和VMM二者的視角看分配的地址空間1238U240 可以是相同的。雖然圖示例子示出了在窗孔和非窗孔區(qū)域中的單個(gè)地址空間,但每個(gè)VM還 可以具有在每個(gè)區(qū)域中的多個(gè)地址空間段。
[0124] 現(xiàn)在轉(zhuǎn)向圖13,示出了管理虛擬機(jī)的方法1344。方法1344可以作為一組邏輯指 令和/或固件被實(shí)施在計(jì)算設(shè)備中,其被存儲(chǔ)在機(jī)器或計(jì)算機(jī)可讀介質(zhì)中,例如,隨機(jī)存取 存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可編程ROM (PROM)、閃速存儲(chǔ)器等,存儲(chǔ)在可配置邏輯中, 例如,可編程邏輯陣列(PLA)、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)、復(fù)雜可編程邏輯設(shè)備(CPLD),存 儲(chǔ)在使用電路技術(shù)的固定功能邏輯硬件中,例如,專(zhuān)用集成電路(ASIC)、互補(bǔ)金屬氧化物半 導(dǎo)體(CMOS)或晶體管-晶體管邏輯(TTL)技術(shù),或其任意組合。例如,執(zhí)行方法1344中所 示出的操作的計(jì)算機(jī)程序代碼可以以一個(gè)或多個(gè)編程語(yǔ)言的任意組合來(lái)編寫(xiě),包括面向?qū)?象編程語(yǔ)言,例如C++等,或者傳統(tǒng)過(guò)程編程語(yǔ)言,例如C編程語(yǔ)言或類(lèi)似編程語(yǔ)言。此外, 可以使用任意前述電路技術(shù)實(shí)現(xiàn)方法1344。
[0125] 所示出的VM塊1346識(shí)別VM的分配的地址空間,其中分配的地址空間與圖形存儲(chǔ) 器地址空間相關(guān)聯(lián)。VM和與VM相關(guān)聯(lián)的VMM可以使用半虛擬化機(jī)制來(lái)傳送信息,所述信息 指示分配的地址空間和/或VM中的客戶(hù)軟件可以向VMM查詢(xún)(例如,通過(guò)超級(jí)調(diào)用)分配 的地址空間。VM塊1348對(duì)未分配給該VM的剩余地址空間進(jìn)行氣球操作。如已經(jīng)說(shuō)明的, 這種方法可以使得VM的分配的地址空間和被進(jìn)行氣球操作的地址空間的視圖與主機(jī)(或 VMM)的地址空間的視圖相同。VM塊1350可以將命令(例如,幀緩沖器訪問(wèn)、渲染、媒體和 /或位塊傳送器命令)通過(guò)批處理緩沖器和/或環(huán)形緩沖器(例如,環(huán)形緩沖器1323 (圖 11B))發(fā)布到圖形硬件,如已經(jīng)討論過(guò)的。
[0126] 所示出的VMM塊1352提供識(shí)別來(lái)自VM的命令,其中所述命令可以包括渲染命令、 媒體命令、位塊傳送器命令等。在所示出的例子中,可以在VMM塊1354處進(jìn)行對(duì)命令的掃 描,其中,可以經(jīng)由VMM和/或硬件邊界檢查器來(lái)進(jìn)行所述掃描。純基于VMM的方案可以被 認(rèn)為是相對(duì)"輕量"的,這是因?yàn)椴簧婕暗刂忿D(zhuǎn)換。
[0127] 如果在VMM塊1356處確定命令試圖訪問(wèn)未分配給所討論的VM的圖形硬件中的剩 余地址空間,則所示出的VMM塊1358可以生成警報(bào)(例如,主機(jī)處理器、中央處理單元/CPU 中斷等)。如果VM和/或客戶(hù)軟件是可信任的,則可以略過(guò)在VMM塊1354處的命令掃描和 在VMM塊1356處的確定,以便提高性能。
[0128] 關(guān)于CPU存儲(chǔ)器訪問(wèn),可以使用擴(kuò)展頁(yè)面表(EPT)來(lái)保護(hù)以避免分配的地址空間 外部的訪問(wèn)。然而,對(duì)于GPU存儲(chǔ)器訪問(wèn),可以使用GTT和/或每進(jìn)程GTT (PPGTT)來(lái)保護(hù) 以避免分配的地址空間外部的訪問(wèn)。
[0129] 圖14示出了使用硬件邊界檢查器1462來(lái)掃描VM命令的圖形處理器架構(gòu)。在所 示出的例子中,命令解析器1464解析命令并將它們分布到各個(gè)圖形模塊(例如,渲染引 擎)1466,圖形模塊1466接著將這些命令發(fā)布到包含硬件邊界檢查器1462的存儲(chǔ)器訪問(wèn)模 塊1468。在一個(gè)實(shí)現(xiàn)方式中,邊界檢查器1462使用低/高對(duì)地址寄存器用于當(dāng)前VM的圖 形存儲(chǔ)器地址空間的客戶(hù)窗孔(低)和非窗孔(高)區(qū)域??梢栽阡秩疽?所有者切換 的時(shí)間通過(guò)VMM編程/恢復(fù)這些地址寄存器。因此,以下偽代碼可以提供警報(bào)決策制定過(guò) 程。
[0130] If((GMA> = lower_aperture)&&(GMA<upper_aperture)), access OK;
[0131] Else if ((GMA> = lower_gmadr) &&(GMA<upper_gmadr)), access OK;
[0132] Else access is denied
[0133] 其中"GMA"可以指圖形存儲(chǔ)器訪問(wèn)嘗試的地址,"lower_aperture"和"upper_ aperture"可以分別指在分配給所討論的VM的圖形存儲(chǔ)器的窗孔區(qū)域中的低和高地址邊 界,而"lower_gmadr"和"upper_gmadr"分別指的是圖形存儲(chǔ)器的非窗孔區(qū)域中低和高邊 界。
[0134] 在一個(gè)例子中,硬件邊界檢查器1462僅檢查來(lái)自圖形模塊1466的訪問(wèn)。在這種 情況下,可以利用VMM的EPT進(jìn)行對(duì)主機(jī)處理器訪問(wèn)的檢查(例如,通過(guò)窗孔),如已經(jīng)說(shuō)明 的那樣。
[0135] 在另一實(shí)現(xiàn)方式中,硬件掃描可以針對(duì)分配的地址空間中的多個(gè)窗孔段和多個(gè)非 窗孔段驗(yàn)證命令。因此,邊界檢查器1462可以使用多組低/高對(duì)地址寄存器來(lái)支持窗孔 (aperture)/gmadr區(qū)域的多個(gè)片段,如下。
[0136] {
[0137] For(i = 0 ;i<numl ;i++)
[0138] If((GMA> = lower_aperture [i]) &&(GMA<upper_aperture [i]), access OK;
[0139] If (i == numl)
[0140] For(i = 0 ;i〈num2 ;i++)
[0141] If((GMA> = lower_gmadr [i]) &&(GMA<upper_gmadr [i])), access OK;
[0142] If (i == num2)
[0143] access is denied.
[0144] }
[0145] 圖15示出了每進(jìn)程圖形虛擬化環(huán)境1580。就此,如本文所描述的GTT地址空間分 割可以與基于每進(jìn)程GTT(PPGTT)的全地址空間切換共同存在。通常,PPGTT地址空間可以 在當(dāng)前過(guò)程上下文下設(shè)計(jì)以用于大量渲染工作負(fù)載使用,并且可能由于性能和安全原因不 能或不適合用作全局地址空間。雖然考慮了其它實(shí)施例,但是環(huán)境1580可以包括兩條主要 數(shù)據(jù)路徑,例如,渲染數(shù)據(jù)路徑和顯示數(shù)據(jù)路徑。
[0146] 例如,環(huán)境1580可以表示在高級(jí)調(diào)度器模型中的圖形數(shù)據(jù)路徑,其中,高級(jí)調(diào)度 器可以是0S或圖形VM(例如,VM 1510(圖1))的一部分。所示出的環(huán)境1580包括顯示路 徑1582和渲染路徑1584,其中,圖形模塊1590可以使用圖形存儲(chǔ)器地址來(lái)訪問(wèn)數(shù)據(jù)。圖 形模塊1590可以包括例如渲染引擎、媒體(例如,音頻和視頻)引擎、GPGPU(通用GPU)引 擎等??梢酝ㄟ^(guò)全局GTT 1588將圖形存儲(chǔ)器地址轉(zhuǎn)換為系統(tǒng)存儲(chǔ)器地址。圖形模塊1590 還可以使用包括頁(yè)面目錄1592和頁(yè)面表1594的PPGTT,以將圖形存儲(chǔ)器地址轉(zhuǎn)換為物理地 址,這取決于命令所使用的尋址模式。因此,包括窗孔區(qū)域的、GTT轉(zhuǎn)換的地址空間可以由 GPU訪問(wèn),作為幀緩沖器和/或用于其它渲染引擎目的??商娲?,PPGTT轉(zhuǎn)換的地址空間 也可以被用作幀緩沖器。
[0147] 因此,圖16展示了虛擬化方案1670,其中PPGTT的映射不需要一直存在(例如,當(dāng) 上下文是"調(diào)度出(scheduled out) "時(shí)),或者PPGTT的映射可以在客戶(hù)PPGTT之間進(jìn)行動(dòng) 態(tài)切換。在一個(gè)例子中,每個(gè)PPGTT條目包括:到頁(yè)面目錄的頁(yè)面目錄索引(例如,頁(yè)面表 基、GTT的部分)、到頁(yè)面表的頁(yè)面表索引(例如,頁(yè)面地址、系統(tǒng)存儲(chǔ)器的部分)以及到存 儲(chǔ)器中頁(yè)面的偏移(例如,最終地址)。在這種情況下,頁(yè)面目錄索引和頁(yè)面表索引可以構(gòu) 成系統(tǒng)地址、從客戶(hù)視角的客戶(hù)頁(yè)面數(shù)(GPN)以及從主機(jī)視角的主機(jī)頁(yè)面數(shù)(HPN)。因此, 所示出的方案1670展示了可以識(shí)別PPGTT 1676,可以為頁(yè)面表?xiàng)l目(PTE)維護(hù)陰影PPGTT 1671,并且可以為窗孔區(qū)域和PPGTT 1676的頁(yè)面目錄條目(TOE)維護(hù)分割的GTT 1673。
[0148] 現(xiàn)在轉(zhuǎn)向圖17,示出了邏輯架構(gòu)1772(1772a-1772d)。邏輯架構(gòu)1772通??梢詫?shí) 現(xiàn)方法1744(圖3)的一個(gè)或多個(gè)方面,并且可以充當(dāng)效率邏輯1722(圖1),如已經(jīng)討論的 那樣。因此,尋址模塊1722a(例如,試圖訪問(wèn)圖形存儲(chǔ)器的各種應(yīng)用)可以識(shí)別VM的分配 的地址空間,其中分配的地址空間將與圖形存儲(chǔ)器相關(guān)聯(lián)。邏輯架構(gòu)1772還可以包括氣球 模塊1772b,以對(duì)未分配給該VM的剩余地址空間進(jìn)行氣球操作。如已經(jīng)討論的,VM的圖形 存儲(chǔ)器地址空間的視圖可以與VMM地址空間的視圖相同。
[0149] 在一個(gè)例子中,邏輯架構(gòu)1772還包括安全模塊1772c,其識(shí)別來(lái)自VM的命令,使用 VMM來(lái)進(jìn)行對(duì)命令的掃描,以及如果命令試圖訪問(wèn)未分配給該VM的剩余地址空間(例如,被 氣球操作圈出的地址空間),則生成警報(bào)(例如,主機(jī)處理器/CPU中斷)和或停止執(zhí)行命 令。一旦完成掃描,則VMM可以將命令發(fā)布給硬件設(shè)備以供執(zhí)行。
[0150] 所示出的邏輯架構(gòu)1772的VMM部分還包括用于識(shí)別PPGTT 1776的每進(jìn)程模塊 1772d,維護(hù)針對(duì)頁(yè)面表?xiàng)l目(PTE)的陰影PPGTT 1771,以及維護(hù)針對(duì)PPGTT 76的窗孔區(qū)域 和頁(yè)面目錄條目(TOE)的分割的GTT 1732。
[0151] 圖形處理器可以替代地使用硬件邊界檢查器1762