在計(jì)算設(shè)備中,圖形處理單元(GPU)可以通過(guò)提供可以快速地執(zhí)行數(shù)學(xué)運(yùn)算的電子電路來(lái)對(duì)中央處理單元(CPU)進(jìn)行補(bǔ)充。為此,GPU利用了大量的并行性和許多并發(fā)線程。GPU的能力使得其有助于加速對(duì)視覺(jué)媒體和并行計(jì)算任務(wù)的處理。例如,GPU可以用于視頻編碼/解碼、二維和三維游戲中的圖形渲染、以及其他通用計(jì)算應(yīng)用。如果可以克服在虛擬化GPU時(shí)涉及的復(fù)雜性,則可以將虛擬化技術(shù)應(yīng)用于許多不同類型的計(jì)算平臺(tái)上的圖形處理單元。
附圖說(shuō)明
在本文中所描述的概念是作為示例而不是限制在附圖中示出的。為了圖示的簡(jiǎn)單和清楚,在附圖中所描繪的元素不一定是按比例繪制的。在認(rèn)為合適的地方,已經(jīng)在附圖之間重復(fù)了附圖標(biāo)記以指示相對(duì)應(yīng)的或相似的元素。
圖1是計(jì)算系統(tǒng)的至少一個(gè)實(shí)施例的簡(jiǎn)化的框圖,該計(jì)算系統(tǒng)包括配置有如在本文中所公開(kāi)的智能GPU調(diào)度的至少一個(gè)計(jì)算設(shè)備;
圖2是圖1的服務(wù)器計(jì)算設(shè)備的環(huán)境的至少一個(gè)實(shí)施例的簡(jiǎn)化的框圖;
圖3是圖2的GPU調(diào)度器的環(huán)境的至少一個(gè)實(shí)施例的簡(jiǎn)化的框圖;
圖4是針對(duì)智能GPU調(diào)度的方法的至少一個(gè)實(shí)施例的簡(jiǎn)化的流程圖,該方法可以由圖1的計(jì)算設(shè)備中的一個(gè)或多個(gè)計(jì)算設(shè)備來(lái)執(zhí)行;并且
圖5是示出了針對(duì)圖1的計(jì)算設(shè)備的至少一個(gè)實(shí)施例的用例的簡(jiǎn)化的時(shí)序圖。
具體實(shí)施方式
盡管本公開(kāi)的概念可以受到各種修改和可替代的形式的影響,但是其具體的實(shí)施例已經(jīng)在附圖中作為示例示出,并且將在本文中詳細(xì)地描述。然而,應(yīng)當(dāng)理解的是,意圖不在于將本公開(kāi)的概念限于所公開(kāi)的特定的形式,而相反地,目的是覆蓋與本公開(kāi)和所附權(quán)利要求一致的全部修改、等價(jià)物、和替代物。
在說(shuō)明書(shū)中對(duì)“一個(gè)實(shí)施例”、“實(shí)施例”、“示例性實(shí)施例”等的引用指示所描述的實(shí)施例可以包括特定的特征、結(jié)構(gòu)、或特性,但每個(gè)實(shí)施例可以或不一定包括該特定的特征、結(jié)構(gòu)、或特性。此外,這樣的短語(yǔ)非必須指的是相同的實(shí)施例。此外,當(dāng)結(jié)合實(shí)施例來(lái)描述特定的特征、結(jié)構(gòu)、或特性時(shí),所主張的是結(jié)合其他實(shí)施例(無(wú)論其是否進(jìn)行了明確地描述)實(shí)現(xiàn)這樣的特征、結(jié)構(gòu)、或特性也在本領(lǐng)域技術(shù)人員的知識(shí)范圍內(nèi)。額外地,應(yīng)當(dāng)理解的是,以“至少一個(gè)A、B和C”的形式包括在列表中的項(xiàng)目可以意味著(A);(B);(C);(A和B);(B和C);(A和C);或者(A、B和C)。類似地,以“A、B或C中的至少一個(gè)”的形式列出的項(xiàng)目可以意味著(A);(B);(C);(A和B);(B和C);(A和C);或者(A、B和C)。
在一些情況下,可以以硬件、固件、軟件或其任何組合來(lái)實(shí)現(xiàn)所公開(kāi)的實(shí)施例。此外,還可以將所公開(kāi)的實(shí)施例實(shí)現(xiàn)為由一個(gè)或多個(gè)瞬時(shí)性或者非瞬時(shí)性機(jī)器可讀(例如,計(jì)算機(jī)可讀)存儲(chǔ)介質(zhì)所實(shí)行或存儲(chǔ)在其上的指令,所述指令可以由一個(gè)或多個(gè)處理器來(lái)讀取或執(zhí)行。機(jī)器可讀存儲(chǔ)介質(zhì)可以被實(shí)施為用于以能夠由機(jī)器讀取的形式存儲(chǔ)或發(fā)送信息的任何存儲(chǔ)設(shè)備、機(jī)制、或其他物理結(jié)構(gòu)(例如,易失性或非易失性存儲(chǔ)器、媒體盤(pán)、或其他介質(zhì)設(shè)備)。
在附圖中,可以以具體的布置和/或順序來(lái)示出一些結(jié)構(gòu)或方法特征。然而,應(yīng)當(dāng)理解的是,這樣的具體的布置和/或順序不是必需的。相反,在一些實(shí)施例中,可以以與在說(shuō)明性附圖中所示出的不同的方式和/或順序來(lái)布置這些特征。額外地,將結(jié)構(gòu)或方法特征包含在特定的附圖中不意味著暗示在所有實(shí)施例中都需要這樣的特征,相反,在一些實(shí)施例中,這樣的特征可以不被包括,或者可以與其他特征進(jìn)行組合。
現(xiàn)在參考圖1,計(jì)算系統(tǒng)100的實(shí)施例包括客戶端計(jì)算設(shè)備110和服務(wù)器計(jì)算設(shè)備142??蛻舳擞?jì)算設(shè)備110和服務(wù)器計(jì)算設(shè)備142通信地耦合至一個(gè)或多個(gè)網(wǎng)絡(luò)140??蛻舳擞?jì)算設(shè)備110和服務(wù)器計(jì)算設(shè)備142中的一個(gè)或兩者可以被配置為利用在本文中所公開(kāi)的技術(shù)。由此,客戶端計(jì)算設(shè)備110和服務(wù)器計(jì)算設(shè)備142中的一個(gè)或兩者可以裝備有圖形處理單元126、152和虛擬化服務(wù)132、162,該虛擬化服務(wù)132、162可以提供包括GPU調(diào)度器模塊138、176的GPU虛擬化。為了討論的方便,可以在本文中使用“圖形處理單元”或“GPU”來(lái)指圖形處理單元、圖形加速器、或其他類型的專用電子電路或設(shè)備,例如通用GPU(GPGPU)、視覺(jué)處理單元、加速處理單元(APU)、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)、或者可以由計(jì)算設(shè)備110、142使用以加速圖形任務(wù)和/或?qū)⑹芤嬗诮?jīng)加速的處理的其他計(jì)算操作的任何其他設(shè)備或電路。說(shuō)明性的虛擬化服務(wù)132、162被配置成針對(duì)GPU126、152建立虛擬化環(huán)境,其包括多個(gè)不同的虛擬機(jī)(VM),使得本地圖形驅(qū)動(dòng)器在每一VM中運(yùn)行。
說(shuō)明性的GPU調(diào)度器模塊138、176處理對(duì)由不同的VM發(fā)出以用于在GPU硬件(GPU 126、GPU 152)上執(zhí)行的某些類型的GPU命令的調(diào)度。例如,GPU調(diào)度器模塊138、176可以處理對(duì)特權(quán)命令的調(diào)度,而VM中的本機(jī)圖形驅(qū)動(dòng)器可以直接訪問(wèn)GPU 126、152的性能關(guān)鍵資源,例如幀緩沖器和命令緩沖器。如下文更加詳細(xì)地描述的,GPU調(diào)度器模塊138、176基于GPU命令的一個(gè)或多個(gè)屬性、GPU命令緩沖器的依賴性、和/或其他決策標(biāo)準(zhǔn)來(lái)從多個(gè)可能的調(diào)度策略中動(dòng)態(tài)地選擇調(diào)度策略,并根據(jù)該動(dòng)態(tài)地選擇的調(diào)度策略來(lái)調(diào)度GPU命令。以該方式,GPU調(diào)度器模塊138、176可以智能地改變適用于VM和/或GPU命令中的一個(gè)或多個(gè)的調(diào)度策略,以達(dá)到更高的效率或出于其他原因。作為示例,當(dāng)不同的VM在運(yùn)行不同類型的GPU工作負(fù)荷時(shí)(例如,一個(gè)VM上是3D任務(wù),而另一VM上是視頻編碼任務(wù)),GPU調(diào)度器模塊138、176可以實(shí)現(xiàn)按緩沖器的調(diào)度策略(例如,針對(duì)環(huán)形緩沖器的“每環(huán)形”的策略)而不是群調(diào)度策略,以提高性能或出于其他原因。如本文中所使用的,“工作負(fù)荷”可以指的是可以包括一個(gè)或多個(gè)GPU命令的一組GPU命令等。此外,GPU調(diào)度器模塊138、176可以根據(jù)需要而切換至群調(diào)度策略以便提供跨緩沖器的同步,從而避免鎖死的情況,或出于其他原因。
現(xiàn)在更加詳細(xì)地參考客戶端計(jì)算設(shè)備110,說(shuō)明性的客戶端計(jì)算設(shè)備110包括中央處理單元(CPU)112和圖形處理單元126。CPU通常通過(guò)CPU存儲(chǔ)器116與GPU存儲(chǔ)器128之間的直接存儲(chǔ)器訪問(wèn)來(lái)向GPU 126提交包括GPU命令的工作負(fù)荷。客戶端計(jì)算設(shè)備110可以被實(shí)施為用于執(zhí)行在本文中所描述的功能的任何類型的設(shè)備。例如,客戶端計(jì)算設(shè)備110可以被實(shí)施為以下設(shè)備而不限于以下設(shè)備:智能電話、平板計(jì)算機(jī)、可穿戴計(jì)算設(shè)備、膝上型計(jì)算機(jī)、筆記本計(jì)算機(jī)、移動(dòng)計(jì)算設(shè)備、蜂窩電話、手持設(shè)備、消息傳送設(shè)備、車載遠(yuǎn)程信息處理設(shè)備、服務(wù)器計(jì)算機(jī)、工作站、分布式計(jì)算系統(tǒng)、多處理器系統(tǒng)、消費(fèi)型電子設(shè)備、和/或被配置為執(zhí)行在本文中所描述的功能的任何其他計(jì)算設(shè)備。如在圖1中所示出的,客戶端計(jì)算設(shè)備110還包括輸入/輸出子系統(tǒng)114、數(shù)據(jù)存儲(chǔ)設(shè)備118、顯示器120、通信子系統(tǒng)122、用戶接口子系統(tǒng)124、操作系統(tǒng)130、虛擬化服務(wù)132、圖形驅(qū)動(dòng)器134、以及GPU調(diào)度器模塊138??蛻舳擞?jì)算設(shè)備110還包括GPU 126和GPU存儲(chǔ)器128。在其他實(shí)施例中,客戶端計(jì)算設(shè)備110可以包括其他的或額外的組件,例如通常在移動(dòng)的和/或靜止的計(jì)算機(jī)中可以找到的那些組件(例如,各種傳感器和輸入/輸出設(shè)備)。額外地,在一些實(shí)施例中,說(shuō)明性組件中的一個(gè)或多個(gè)可以并入另一個(gè)組件中或者以其他方式形成另一個(gè)組件的一部分。例如,在一些實(shí)施中,CPU存儲(chǔ)器116或其部分可以并入CPU 112中和/或GPU存儲(chǔ)器128可以并入GPU 126中??蛻舳擞?jì)算設(shè)備110的組件可以被實(shí)施為軟件、固件、硬件、或軟件和硬件的組合。
CPU 112可以被實(shí)施為能夠執(zhí)行在本文中所描述的功能的任何類型的處理器。例如,CPU 112可以被實(shí)施為單核或多核處理器、數(shù)字信號(hào)處理器、微控制器、或其他的處理器或處理/控制電路。GPU 126可以被實(shí)施為能夠執(zhí)行在本文中所描述的功能的任何類型的圖形處理單元。例如,GPU126可以被實(shí)施為單核或多核處理器、數(shù)字信號(hào)處理器、微控制器、浮點(diǎn)加速器、協(xié)處理器、或者被設(shè)計(jì)為快速地操縱和改變存儲(chǔ)器中的數(shù)據(jù)的其他處理器或處理/控制電路。為了簡(jiǎn)化附圖和描述,參考下文中所描述的服務(wù)器計(jì)算設(shè)備142更加詳細(xì)地示出并描述了客戶端計(jì)算設(shè)備110的一些方面。例如,參考服務(wù)器計(jì)算設(shè)備142的對(duì)應(yīng)的組件更加詳細(xì)地描述了GPU 126、GPU存儲(chǔ)器128、以及GPU調(diào)度器模塊138的方面。通常而言,對(duì)計(jì)算設(shè)備110、142中的一個(gè)計(jì)算設(shè)備的組件的描述等同地適用于其他計(jì)算設(shè)備110、142的類似的組件。
客戶端計(jì)算設(shè)備110的CPU存儲(chǔ)器116和GPU存儲(chǔ)器128可以各自被實(shí)施為能夠執(zhí)行在本文中所描述的功能的任何類型的易失性或非易失性存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)。在操作中,存儲(chǔ)器116可以存儲(chǔ)在計(jì)算設(shè)備110的操作期間所使用的各種數(shù)據(jù)和軟件,例如操作系統(tǒng)、應(yīng)用、程序、庫(kù)、和驅(qū)動(dòng)器。例如,CPU存儲(chǔ)器116的部分至少暫時(shí)地存儲(chǔ)命令緩沖器和由CPU112所創(chuàng)建的GPU命令,而GPU存儲(chǔ)器128的部分至少暫時(shí)地存儲(chǔ)通過(guò)例如直接存儲(chǔ)器訪問(wèn)而從CPU存儲(chǔ)器116接收的GPU命令。
CPU存儲(chǔ)器116例如經(jīng)由I/O子系統(tǒng)114通信地耦合至CPU 112,而GPU存儲(chǔ)器128類似地通信地耦合至GPU 126。I/O子系統(tǒng)114可以被實(shí)施為電路和/或組件以促進(jìn)與CPU 112、CPU存儲(chǔ)器116、GPU 126、GPU存儲(chǔ)器128、以及客戶端計(jì)算設(shè)備110的其他組件的輸入/輸出操作。例如,I/O子系統(tǒng)114可以被實(shí)施為或者以其他方式包括存儲(chǔ)器控制器集線器、輸入/輸出控制集線器、固件設(shè)備、通信鏈路(即,點(diǎn)對(duì)點(diǎn)鏈路、總線鏈路、線、線纜、光導(dǎo)、印刷電路板跡線等)和/或其他組件和子系統(tǒng),以促進(jìn)輸入/輸出操作。在一些實(shí)施例中,I/O子系統(tǒng)114可以形成片上系統(tǒng)(SoC)的一部分,并且與CPU 112、CPU存儲(chǔ)器116、GPU 126、GPU存儲(chǔ)器128、和/或計(jì)算設(shè)備110的其他組件一起并入到單個(gè)集成電路芯片上。
數(shù)據(jù)存儲(chǔ)設(shè)備118可以被實(shí)施為針對(duì)短期或長(zhǎng)期數(shù)據(jù)存儲(chǔ)而配置的任何類型的設(shè)備,例如存儲(chǔ)器設(shè)備和電路、存儲(chǔ)器卡、硬盤(pán)驅(qū)動(dòng)器、固態(tài)驅(qū)動(dòng)器、或其他數(shù)據(jù)存儲(chǔ)設(shè)備。數(shù)據(jù)存儲(chǔ)設(shè)備118可以包括存儲(chǔ)針對(duì)計(jì)算設(shè)備110的數(shù)據(jù)和固件代碼的系統(tǒng)分區(qū)。數(shù)據(jù)存儲(chǔ)設(shè)備118還可以包括存儲(chǔ)針對(duì)計(jì)算設(shè)備110的操作系統(tǒng)130的數(shù)據(jù)文件和可執(zhí)行文件的操作系統(tǒng)分區(qū)。
顯示器120可以被實(shí)施為能夠顯示數(shù)字信息的任何類型的顯示器,例如液晶顯示器(LCD)、發(fā)光二極管(LED)、等離子顯示器、陰極射線管(CRT)、或其他類型的顯示設(shè)備。在一些實(shí)施例中,顯示器120可以耦合至觸摸屏或其他用戶輸入設(shè)備以允許與計(jì)算設(shè)備110的用戶交互。顯示器120可以是用戶接口子系統(tǒng)124的一部分。用戶接口子系統(tǒng)124可以包括用于促進(jìn)與計(jì)算設(shè)備110的用戶交互的多個(gè)額外的設(shè)備,包括物理或虛擬控制按鈕或按鍵、麥克風(fēng)、揚(yáng)聲器、單向或雙向靜止的和/或視頻相機(jī)等。用戶接口子系統(tǒng)124還可以包括諸如運(yùn)動(dòng)傳感器、接近度傳感器、以及眼睛追蹤設(shè)備之類的設(shè)備,所述設(shè)備可以被配置為檢測(cè)、捕獲、和處理涉及計(jì)算設(shè)備110的各種其他形式的人類交互。
計(jì)算設(shè)備110還包括通信子系統(tǒng)122,其可以被實(shí)施為能夠使能計(jì)算設(shè)備110與其他電子設(shè)備之間的通信的任何通信電路、設(shè)備、或其集合。通信子系統(tǒng)122可以被配置為使用通信技術(shù)(例如,無(wú)線通信或有線通信)和相關(guān)聯(lián)的協(xié)議(例如,以太網(wǎng)、WiMAX、3G/LTE等)中的一個(gè)或多個(gè)來(lái)實(shí)現(xiàn)這樣的通信。通信子系統(tǒng)122可以被實(shí)施為網(wǎng)絡(luò)適配器,包括無(wú)線網(wǎng)絡(luò)適配器。
說(shuō)明性的計(jì)算設(shè)備110還包括多個(gè)計(jì)算機(jī)程序組件,例如虛擬化服務(wù)132、圖形驅(qū)動(dòng)器134、操作系統(tǒng)130、以及GPU調(diào)度器模塊138。操作系統(tǒng)130促進(jìn)諸如GPU調(diào)度器模塊138和虛擬化服務(wù)132之類的計(jì)算機(jī)應(yīng)用與計(jì)算設(shè)備110的硬件組件之間的通信等。操作系統(tǒng)130可以被實(shí)施為能夠執(zhí)行在本文中所描述的功能的任何操作系統(tǒng),例如微軟公司的WINDOWS、谷歌有限公司的ANDROID等的一個(gè)版本。如在本文中所使用的,“計(jì)算機(jī)應(yīng)用”可以指終端用戶通過(guò)其可以與計(jì)算設(shè)備110進(jìn)行交互的“用戶空間”軟件和/或硬件應(yīng)用,和/或在其中編程代碼可以與計(jì)算設(shè)備110的硬件組件直接進(jìn)行交互的“系統(tǒng)空間”等。計(jì)算設(shè)備110的系統(tǒng)空間組件可以具有比計(jì)算設(shè)備110的用戶空間組件更大的特權(quán)。
在說(shuō)明性的實(shí)施例中,圖形驅(qū)動(dòng)器134處理計(jì)算機(jī)應(yīng)用與硬件組件之間的通信,例如顯示器120。在一些實(shí)施例中,圖形驅(qū)動(dòng)器134可以包括“通用”驅(qū)動(dòng)器,其例如可以將與設(shè)備無(wú)關(guān)的圖形渲染任務(wù)傳送至多種不同的硬件組件(例如,不同類型的顯示器);以及“設(shè)備專用的”驅(qū)動(dòng)器,其將與設(shè)備無(wú)關(guān)的任務(wù)轉(zhuǎn)換成特定的硬件組件可以執(zhí)行以完成所請(qǐng)求的任務(wù)的命令。在其他實(shí)施例中,通用驅(qū)動(dòng)器和設(shè)備專用的驅(qū)動(dòng)器的部分可以被組合到單個(gè)驅(qū)動(dòng)器組件(例如,圖形驅(qū)動(dòng)器134)中。在一些實(shí)施例中,圖形驅(qū)動(dòng)器134的部分可以被包括在操作系統(tǒng)130中。說(shuō)明性地,圖形驅(qū)動(dòng)器134是顯示驅(qū)動(dòng)器;然而,可以在其他應(yīng)用(例如,可以被卸載到GPU 126上的任何類型的任務(wù))中使用所公開(kāi)的GPU調(diào)度器模塊138的方面(例如,在GPU 126被配置為GPGPU的情況下)。
說(shuō)明性的虛擬化服務(wù)132被實(shí)施為一種類型的管理程序,其可以由引導(dǎo)裝載程序直接從固件啟動(dòng)或者由操作系統(tǒng)130啟動(dòng)。虛擬化服務(wù)132可以被實(shí)施為“瘦的”管理程序或者更傳統(tǒng)的管理程序、虛擬機(jī)管理器(VMM)、或類似的虛擬化平臺(tái)。例如,虛擬化服務(wù)132可以被實(shí)施為基于XEN(類型I)的VMM、基于內(nèi)核的虛擬機(jī)(KVM)(類型II)的VMM、或者基于WINDOWS的VMM。在一些實(shí)施例中,虛擬化服務(wù)132可以被實(shí)施為“裸金屬”管理程序,其可以直接從系統(tǒng)硬件中執(zhí)行。虛擬化服務(wù)132被實(shí)施為在特定的GPU 126中促進(jìn)和管理對(duì)計(jì)算設(shè)備110的共享資源的虛擬化的特權(quán)軟件或固件組件。由此,虛擬化服務(wù)132以計(jì)算設(shè)備110的較高特權(quán)的系統(tǒng)模式來(lái)執(zhí)行,其中虛擬化服務(wù)132可以大體上完全控制GPU 126和/或計(jì)算設(shè)備110的其他硬件資源。如上所述,虛擬化服務(wù)132可以建立針對(duì)GPU 126的虛擬化環(huán)境,其包括多個(gè)虛擬機(jī),其中每個(gè)虛擬機(jī)都運(yùn)行圖形驅(qū)動(dòng)器134的其自身的實(shí)例。GPU虛擬化服務(wù)的說(shuō)明性的示例包括Intel公司的XenGT和nVidia公司的GRID VGZ。GPU調(diào)度器模塊138可以被實(shí)施為虛擬化服務(wù)132的組件。在操作中,GPU調(diào)度器模塊138與VM中的圖形驅(qū)動(dòng)器134的虛擬實(shí)例進(jìn)行通信,以如在下文中所描述的那樣控制GPU命令向GPU 126的提交。
現(xiàn)在更加詳細(xì)地參考服務(wù)器計(jì)算設(shè)備142,服務(wù)器計(jì)算設(shè)備142可以被實(shí)施為用于執(zhí)行在本文中所描述的功能的任何類型的設(shè)備。例如,服務(wù)器計(jì)算設(shè)備142可以被實(shí)施為以下設(shè)備而不限于以下設(shè)備:智能電話、平板計(jì)算機(jī)、可穿戴計(jì)算設(shè)備、膝上型計(jì)算機(jī)、筆記本計(jì)算機(jī)、移動(dòng)計(jì)算設(shè)備、蜂窩電話、手持設(shè)備、消息傳送設(shè)備、車載遠(yuǎn)程信息處理設(shè)備、服務(wù)器計(jì)算機(jī)、工作站、分布式計(jì)算系統(tǒng)、多處理器系統(tǒng)、消費(fèi)型電子設(shè)備、和/或被配置為執(zhí)行在本文中所描述的功能的任何其他計(jì)算設(shè)備??梢灶愃频貙?shí)施具有與在上文中所描述的客戶端計(jì)算設(shè)備110的組件相同或類似的服務(wù)器計(jì)算設(shè)備142的組件,并且從而,不在這里對(duì)描述進(jìn)行重復(fù)。此外,應(yīng)該理解的是,客戶端計(jì)算設(shè)備110可以包括服務(wù)器計(jì)算設(shè)備142的組件中的任何一個(gè)組件,并且以下對(duì)這樣的組件的描述等同地適用于客戶端計(jì)算設(shè)備110的類似的組件。
說(shuō)明性的服務(wù)器計(jì)算設(shè)備142包括CPU 144、輸入/輸出子系統(tǒng)146、直接存儲(chǔ)器訪問(wèn)(DMA)子系統(tǒng)148、CPU存儲(chǔ)器150、操作系統(tǒng)160、虛擬化服務(wù)162、圖形驅(qū)動(dòng)器模塊164、數(shù)據(jù)存儲(chǔ)設(shè)備166、顯示器168、通信子系統(tǒng)170、用戶接口子系統(tǒng)172、以及GPU調(diào)度器模塊176。服務(wù)器計(jì)算設(shè)備142還包括GPU 152、渲染引擎154、GPU存儲(chǔ)器156、以及命令緩沖器158。在其他實(shí)施例中,服務(wù)器計(jì)算設(shè)備142可以包括其他的或額外的組件,例如通常在移動(dòng)的和/或固定的計(jì)算機(jī)中發(fā)現(xiàn)的那些組件(例如,各種傳感器和輸入/輸出設(shè)備)。額外地,在一些實(shí)施例中,說(shuō)明性的組件中的一個(gè)或多個(gè)組件可以并入到另一個(gè)組件中或者以其他方式形成另一個(gè)組件的一部分。服務(wù)器計(jì)算設(shè)備142的組件可以被實(shí)施為軟件、固件、硬件、或軟件和硬件的組合。
GPU 152包括多個(gè)渲染引擎154,其可以被實(shí)施為GPU 152的硬件執(zhí)行單元,例如,處理器內(nèi)核陣列或其中的每個(gè)都可以執(zhí)行多個(gè)并行的線程的并行處理器。GPU 152可以被實(shí)施為外圍設(shè)備(例如,在分立的圖形卡上),或者可以位于CPU母板上或在CPU管芯上。渲染引擎154可以各自被配置為處理具體的類型的GPU任務(wù)。例如,在一些實(shí)施中,多個(gè)不同的渲染引擎154可以被配置為獨(dú)立地處理3D渲染任務(wù)、位塊傳送器(blitter)(例如,2D圖形)、視頻、和視頻編碼/解碼任務(wù)。
CPU存儲(chǔ)器150的部分可以至少暫時(shí)地存儲(chǔ)命令緩沖器和由CPU 144所創(chuàng)建的GPU命令,并且GPU存儲(chǔ)器156的部分至少暫時(shí)地將GPU命令存儲(chǔ)在命令緩沖器158中。GPU命令由CPU 144通過(guò)直接存儲(chǔ)器訪問(wèn)子系統(tǒng)148傳輸至命令緩沖器158。直接存儲(chǔ)器訪問(wèn)(DMA)子系統(tǒng)148促進(jìn)CPU存儲(chǔ)器150與GPU存儲(chǔ)器156之間的數(shù)據(jù)傳輸。在一些實(shí)施例中,DMA子系統(tǒng)148允許GPU 152直接地訪問(wèn)CPU存儲(chǔ)器150并且允許CPU144直接地訪問(wèn)GPU存儲(chǔ)器156。DMA子系統(tǒng)148可以被實(shí)施為DMA控制器或DMA“引擎”,例如外圍組件互聯(lián)連(PCI)設(shè)備、外圍組件互連-快速(PCI-快速)設(shè)備、以及I/O加速技術(shù)(I/OAT)設(shè)備等。
說(shuō)明性的命令緩沖器158被實(shí)施為環(huán)形緩沖器,并且環(huán)形緩沖器中的每一個(gè)可以將許多批緩沖器鏈接在一起。在一些實(shí)施例中,計(jì)算設(shè)備142針對(duì)渲染引擎154中的每個(gè)渲染引擎實(shí)現(xiàn)不同的命令緩沖器(例如,針對(duì)3D、位塊傳送器、視頻、以及視頻編碼/解碼引擎154中的每個(gè)引擎的單獨(dú)的環(huán)形緩沖器)。環(huán)形緩沖器是可以對(duì)于例如異步輸入-輸出操作有用的一類先進(jìn)/先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)??梢栽谄渌麑?shí)施例中使用其他類型的FIFO的數(shù)據(jù)結(jié)構(gòu)、或其他合適的類型的數(shù)據(jù)結(jié)構(gòu)。
通過(guò)虛擬化服務(wù)162,命令緩沖器158被虛擬化以使得由虛擬化服務(wù)162所建立的每個(gè)VM包括一組命令緩沖器158(例如,每個(gè)VM中的3D、位塊傳送器、視頻、以及視頻編碼/解碼命令緩沖器),其中每個(gè)緩沖器由不同的命令解析器并行地解析(例如,3D、位塊傳送器、視頻、以及視頻編碼/解碼命令解析器)。當(dāng)新的VM被調(diào)度用于訪問(wèn)GPU 152時(shí),GPU調(diào)度器模塊176可以進(jìn)行上下文切換。響應(yīng)于該上下文切換,GPU 152可以提供不同的一組命令緩沖器(例如,與新的VM相關(guān)聯(lián)的命令緩沖器)。
說(shuō)明性的GPU調(diào)度器模塊176包括命令掃描器模塊178、命令數(shù)據(jù)庫(kù)180、仲裁器模塊182、以及多個(gè)調(diào)度策略184。GPU調(diào)度器模塊176、命令掃描器模塊178、命令數(shù)據(jù)庫(kù)180、以及仲裁器模塊182可以被實(shí)現(xiàn)為任何類型的處理器可執(zhí)行的代碼、模塊和/或數(shù)據(jù)結(jié)構(gòu)、或其結(jié)合。在下文中參考圖3更加詳細(xì)地描述了命令掃描器模塊178、命令數(shù)據(jù)庫(kù)180、以及仲裁器模塊182的方面。
說(shuō)明性地,調(diào)度策略184包括每環(huán)形的調(diào)度策略186以及群調(diào)度策略188。每環(huán)形的調(diào)度策略186可以允許環(huán)形緩沖器相互獨(dú)立地進(jìn)行上下文切換,由此如果來(lái)自不同的VM的GPU命令將使用不同的渲染引擎154,則允許同時(shí)地調(diào)度來(lái)自不同的VM的GPU命令。然而,如果針對(duì)不同的緩沖器的兩個(gè)GPU命令各自取決于由其他命令用信號(hào)發(fā)送的條件,或者如果針對(duì)不同的緩沖器的兩個(gè)命令取決于所滿足的相同的條件,則使用每環(huán)形的調(diào)度策略則可能導(dǎo)致鎖死問(wèn)題。針對(duì)VM的一個(gè)環(huán)形緩沖器的一個(gè)命令對(duì)針對(duì)由相同VM的另一個(gè)環(huán)形緩沖器的另一命令用信號(hào)發(fā)送的結(jié)果的依賴性可以通過(guò)在命令緩沖器中的同步或“等待”命令的出現(xiàn)以及所述等待命令所依賴的條件來(lái)證實(shí)。該類型的命令依賴性可以被稱為“跨環(huán)形同步”或者更加概括地被稱為(針對(duì)相同的VM的不同的緩沖器的GPU命令的)跨緩沖器依賴或跨緩沖器同步。
作為示例,假定每環(huán)形的調(diào)度策略186從第一虛擬機(jī)VM1的3D環(huán)形緩沖器接收并調(diào)度GPU工作負(fù)荷以用于由3D引擎154執(zhí)行。每環(huán)形的調(diào)度策略186還從另一個(gè)虛擬機(jī)VM2的位塊傳送器(blitter)環(huán)形緩沖器接收GPU工作負(fù)荷。按照每環(huán)形的調(diào)度策略,可以將VM2位塊傳送器任務(wù)調(diào)度在位塊傳送器引擎154上,這是因?yàn)槲粔K傳送器引擎154沒(méi)有由VM1使用。VM1 3D工作負(fù)荷包括與3D渲染任務(wù)有關(guān)的多個(gè)GPU命令,但是3D渲染任務(wù)必須與需要調(diào)度在位塊傳送器引擎154上的VM1的另一個(gè)任務(wù)進(jìn)行同步。這可以通過(guò)VM1 3D工作負(fù)荷中的等待命令來(lái)證實(shí),其中,等待命令取決于條件值COND1。值COND1由VM1位塊傳送器任務(wù)用信號(hào)發(fā)送。然而,VM1位塊傳送器工作負(fù)荷還包括取決于條件值COND2的等待命令,但是COND2由VM1 3D任務(wù)用信號(hào)發(fā)送。VM1位塊傳送器任務(wù)必須等直到VM2位塊傳送器任務(wù)完成為止才能被調(diào)度。VM1 3D任務(wù)不能夠完成直到VM1位塊傳送器任務(wù)用信號(hào)發(fā)送COND1為止,并且VM1位塊傳送器任務(wù)不能夠完成直到VM1 3D任務(wù)用信號(hào)發(fā)送COND2為止。因?yàn)椋鶕?jù)每環(huán)形的調(diào)度策略186,兩個(gè)VM1任務(wù)是在不同的時(shí)刻被調(diào)度的(例如,由于每環(huán)形的策略已經(jīng)允許VM2位塊傳送器命令因?yàn)槲粔K傳送器引擎154可用而被調(diào)度的事實(shí)),所以導(dǎo)致了鎖死的情況,其中GPU 152的處理將只得中止。即使GPU 152被配置有命令搶先(preemption)支持(其中,等待命令可以在一些暫停時(shí)段之后搶先),如果兩個(gè)不同的命令恰好使用相同的COND,則VM1中的等待命令可能由于從VM2用信號(hào)發(fā)送的COND值而被錯(cuò)誤地完成。
群調(diào)度策略188可以需要VM中的所有環(huán)形緩沖器一起上下文切換,而不是如每環(huán)形的調(diào)度策略186那樣獨(dú)立地進(jìn)行。群調(diào)度策略188可以用于克服跨環(huán)形同步問(wèn)題。繼續(xù)上文中的示例,假定使用群調(diào)度策略188而不是每環(huán)形的調(diào)度策略186。在該情況下,群調(diào)度策略188一起調(diào)度VM1 3D命令和VM1位塊傳送器命令(分別在3D和位塊傳送器引擎154上)。當(dāng)VM1位塊傳送器命令用信號(hào)發(fā)送COND1時(shí),VM1 3D命令可以繼續(xù)。當(dāng)VM1 3D命令用信號(hào)發(fā)送COND2時(shí),VM1位塊傳送器命令可以繼續(xù)。來(lái)自VM2的命令在其能被調(diào)度之前,必須等待來(lái)自所有VM1環(huán)形緩沖器的所有VM1命令完成。
然而,在GPU虛擬化中群調(diào)度策略188可能是低效的。例如,假定GPU調(diào)度器模塊176調(diào)度VM1工作負(fù)荷在3D引擎154上運(yùn)行,并且在其他VM1緩沖器中的任何緩沖器上沒(méi)有其他工作負(fù)荷。即使視頻引擎154(例如)沒(méi)有在由VM1使用(因?yàn)樵赩M1視頻緩沖器中沒(méi)有GPU命令),根據(jù)群調(diào)度策略188,直到VM1 3D任務(wù)完成為止才能使用視頻引擎154來(lái)運(yùn)行VM2視頻任務(wù)。
現(xiàn)在參考圖2,在一些實(shí)施例中,服務(wù)器計(jì)算設(shè)備142在操作期間建立了環(huán)境200。環(huán)境200包括特權(quán)虛擬環(huán)境210、GPU調(diào)度器模塊214、圖形驅(qū)動(dòng)器模塊216、命令緩沖器220、命令解析器222、圖形驅(qū)動(dòng)器模塊218、虛擬化服務(wù)226、以及GPU硬件152。環(huán)境200的各種模塊可以被實(shí)施為硬件、固件、軟件、或其組合。說(shuō)明性的環(huán)境200包括虛擬化服務(wù)162的執(zhí)行實(shí)例(虛擬化服務(wù)226),其建立了特權(quán)虛擬環(huán)境210和“N”個(gè)虛擬機(jī)212(其中,N是正整數(shù))。特權(quán)虛擬環(huán)境(在一些實(shí)現(xiàn)中,其可以被稱為“域0”)包括GPU調(diào)度器模塊176的執(zhí)行實(shí)例(GPU調(diào)度器模塊214)和圖形驅(qū)動(dòng)器模塊164的執(zhí)行實(shí)例(圖形驅(qū)動(dòng)器模塊216)。VM 212中的每個(gè)VM包括圖形驅(qū)動(dòng)器模塊164的執(zhí)行實(shí)例(圖形驅(qū)動(dòng)器模塊218)、每命令緩沖器158的實(shí)例(命令緩沖器220)、以及命令解析器222。每個(gè)VM的命令緩沖器220包括例如3D、位塊傳送器、視頻、和視頻編碼/解碼環(huán)形緩沖器。圖形驅(qū)動(dòng)器模塊216、218可以各自向GPU硬件152直接地提交非特權(quán)命令230、232。特權(quán)GPU命令224由GPU調(diào)度器模塊214處理(例如,利用陷阱(trap)和仿真技術(shù)),并且使用如在本文中所描述的動(dòng)態(tài)混合調(diào)度方法提交至GPU 152。
GPU調(diào)度器模塊214評(píng)估所有VM的所有命令緩沖器中的GPU命令,并且響應(yīng)于對(duì)GPU命令的評(píng)估的輸出,從多個(gè)不同的調(diào)度策略中動(dòng)態(tài)地選擇調(diào)度策略。根據(jù)動(dòng)態(tài)地選擇的調(diào)度策略,GPU調(diào)度器模塊214調(diào)度GPU命令中的至少一個(gè)GPU命令以由GPU處理。以下是由GPU調(diào)度器模塊214所執(zhí)行的一些“動(dòng)態(tài)的”和/或“混合的”調(diào)度示例。GPU調(diào)度器模塊214可以根據(jù)兩個(gè)不同的調(diào)度策略來(lái)調(diào)度兩個(gè)不同的VM的GPU命令。GPU調(diào)度器模塊214可以將適用于一個(gè)或多個(gè)VM的調(diào)度策略從每環(huán)形的調(diào)度策略切換至群調(diào)度策略,例如,響應(yīng)于檢測(cè)到同一虛擬機(jī)的不同的命令緩沖器中的兩個(gè)GPU命令之間的跨緩沖器依賴性。在針對(duì)一個(gè)VM從每環(huán)形的調(diào)度策略切換至群調(diào)度策略之后,GPU調(diào)度器模塊214可以評(píng)估不同的VM的GPU命令,并且根據(jù)不同的調(diào)度策略來(lái)調(diào)度不同VM的GPU命令(例如,GPU調(diào)度模塊214可以針對(duì)不同的VM切換回每環(huán)形的調(diào)度策略,因此在一個(gè)VM中運(yùn)行群調(diào)度策略而同時(shí)在另一VM中運(yùn)行每環(huán)形的調(diào)度策略)。在一些實(shí)施例中,GPU調(diào)度器可以記錄所有虛擬機(jī)的所有命令緩沖器間的跨緩沖器依賴性的出現(xiàn),并且如果在特定數(shù)量的命令緩沖器中或者在特定的時(shí)間段內(nèi)未檢測(cè)到跨緩沖器依賴性,或者更加具體地,基于跨緩沖器依賴性出現(xiàn)的頻率,來(lái)改變調(diào)度策略(例如,從每環(huán)形的策略改變成群調(diào)度策略,或反之亦然)。環(huán)境200的各種模塊和組件(例如,GPU調(diào)度器模塊214)可以被實(shí)施為硬件、固件、軟件、或其結(jié)合。額外地,在一些實(shí)施例中,環(huán)境200的模塊中的一些或全部模塊可以與其他模塊或軟件/固件結(jié)構(gòu)集成在一起或者形成其部分。
在一些實(shí)施例中,為了觸發(fā)GPU調(diào)度器模塊214的操作,圖形驅(qū)動(dòng)器模塊216、218將GPU命令224排隊(duì)到命令緩沖器220中,并且接著將存儲(chǔ)器映射的輸入-輸出(MMIO)寄存器(蹤跡)寫(xiě)入以發(fā)起由命令解析器222對(duì)排列的命令的解析。在虛擬的環(huán)境(例如,環(huán)境200)中,捕獲(trap)到最后的MMIO寫(xiě)入,使得GPU調(diào)度器模塊214可以執(zhí)行對(duì)VM的GPU命令的調(diào)度。
現(xiàn)在參考圖3,在一些實(shí)施例中,服務(wù)器計(jì)算設(shè)備142在操作期間建立環(huán)境300。環(huán)境300包括GPU調(diào)度器模塊214、命令掃描器模塊314、316、命令數(shù)據(jù)庫(kù)318、320、每環(huán)形的調(diào)度策略322、群調(diào)度策略324、以及仲裁器模塊326。環(huán)境300的各種模塊可以被實(shí)施為硬件、固件、軟件、或其組合。說(shuō)明性的環(huán)境300包括命令掃描器模塊178的執(zhí)行實(shí)例(命令掃描器模塊314、316)(例如,每個(gè)VM一個(gè)實(shí)例)、命令數(shù)據(jù)庫(kù)318、320的實(shí)例(例如,每個(gè)VM一個(gè)數(shù)據(jù)庫(kù))、仲裁器模塊182的執(zhí)行實(shí)例(仲裁器模塊326)、每環(huán)形的調(diào)度策略186的實(shí)例(每環(huán)形的調(diào)度策略322)、以及群調(diào)度策略188的實(shí)例(群調(diào)度策略324)。命令掃描器模塊314、316中的每個(gè)命令掃描器模塊掃描其相應(yīng)的VM的所有命令緩沖器中的經(jīng)排隊(duì)的GPU命令。例如,VM1命令掃描器模塊314掃描包含在VM1命令緩沖器220中的GPU命令(例如,其包括針對(duì)VM1的多個(gè)環(huán)形緩沖器,例如3D、位塊傳送器、視頻、以及視頻編碼/解碼緩沖器)。類似的,VM N命令掃描器模塊316掃描包含在VM N命令緩沖器312中的GPU命令(例如,其包括針對(duì)VM N的多個(gè)環(huán)形緩沖器,例如3D、位塊傳送器、視頻、以及視頻編碼/解碼緩沖器)。
每個(gè)命令掃描器模塊314、316產(chǎn)生指示在同一虛擬機(jī)的不同命令緩沖器中的GPU命令之間的跨緩沖器依賴性的數(shù)據(jù)、創(chuàng)建命令數(shù)據(jù)庫(kù)318、320、并且將指示命令類型的數(shù)據(jù)存儲(chǔ)在命令數(shù)據(jù)庫(kù)318、320中。即,每個(gè)命令掃描器模塊314、316識(shí)別其相應(yīng)的VM的GPU命令中的跨緩沖器依賴性,并且將指示針對(duì)其相應(yīng)的VM的依賴性的數(shù)據(jù)存儲(chǔ)在命令數(shù)據(jù)庫(kù)318、320中。命令掃描器模塊314、316可以確定針對(duì)VM的GPU命令中的每個(gè)GPU命令來(lái)確定命令類型,并且也將指示命令類型的數(shù)據(jù)存儲(chǔ)在命令數(shù)據(jù)庫(kù)318、320中。命令類型可以對(duì)應(yīng)于待由GPU 152執(zhí)行的任務(wù)的類型或者對(duì)應(yīng)于待執(zhí)行任務(wù)(例如3D、位塊傳送器、視頻、視頻編碼/解碼)的特定的渲染引擎154。
如果命令掃描器模塊314、316確定工作負(fù)荷提交包括跨緩沖器依賴性,則命令掃描器模塊314、316可以將標(biāo)記與具體的工作負(fù)荷提交相關(guān)聯(lián)。為此,命令掃描器可以對(duì)該組GPU命令執(zhí)行在位手段(in-place instrumentation)。在命令緩沖器220、312被實(shí)施為環(huán)形緩沖器的該情況下,命令掃描器模塊314、316可以識(shí)別跨環(huán)形同步基元(primitive)并將與存在或不存在跨環(huán)形同步基元相關(guān)的數(shù)據(jù)存儲(chǔ)在命令數(shù)據(jù)庫(kù)318、320中。例如,命令掃描器模塊314、316可以確定是否存在任何跨環(huán)形的同步基元,并且如果存在任何跨環(huán)形的同步基元,則針對(duì)相關(guān)聯(lián)的命令緩沖器220、312設(shè)置標(biāo)記(例如,REQ_GANG)。接著,仲裁器模塊326可以檢查該標(biāo)記,并且如果該標(biāo)記被有效地設(shè)置(例如,設(shè)置成REQ_GANG=Y(jié)ES),則仲裁器模塊326發(fā)起從每環(huán)形的調(diào)度策略322到群調(diào)度策略324的切換。為了從群調(diào)度策略324切換回每環(huán)形的調(diào)度策略322,仲裁器模塊326可以使用經(jīng)驗(yàn)策略,例如:如果在所有VM中的接下來(lái)的N個(gè)命令緩沖器中都未檢測(cè)到跨環(huán)形同步基元,則切換回每環(huán)形的調(diào)度策略322。如在本文中所使用的,“基元”可以指由計(jì)算平臺(tái)所提供的簡(jiǎn)單的軟件機(jī)制(例如,操作系統(tǒng))等,并且可以包括較低等級(jí)的機(jī)制(例如,原子操作、存儲(chǔ)器屏障、自旋鎖、上下文切換等)。作為示例,可以由計(jì)算平臺(tái)來(lái)提供發(fā)信號(hào)命令(例如,發(fā)“等待”命令信號(hào)),以便針對(duì)由多個(gè)環(huán)形緩沖器所分享的對(duì)象來(lái)將跨環(huán)形執(zhí)行序列化。
在一些實(shí)施例中,命令掃描器模塊314、316可以在其相應(yīng)的VM的不同的命令緩沖器之間建立直接依賴性。為此,命令掃描器模塊314、316可以用依賴性和命令類型信息來(lái)填充VM的命令數(shù)據(jù)庫(kù)318、320中的圖形數(shù)據(jù)結(jié)構(gòu)。以下的代碼示例1和2示出了針對(duì)圖形數(shù)據(jù)結(jié)構(gòu)的偽代碼的示例,所述偽代碼可以由VM1和VM2的命令掃描器模塊314、316創(chuàng)建并且存儲(chǔ)在VM1和VM2的命令數(shù)據(jù)庫(kù)318、320中。
代碼示例1.針對(duì)VM1的命令數(shù)據(jù)庫(kù)。
在代碼示例1中,Buf11、Buf12、Buf13、Buf14是VM1的四個(gè)環(huán)形緩沖器。代碼示例1指定了由隨后的依賴性信息(如果有的話)管理的緩沖器類型或命令類型(例如,3D、位塊傳送器)。例如,Buf11中的3D命令對(duì)Buf12中的位塊傳送器命令具有依賴性,其在于Buf11需要等待Buf12中的位塊傳送器命令來(lái)用信號(hào)發(fā)送COND1。在代碼示例1中,Buf13和Buf14可以被識(shí)別為沒(méi)有依賴性。
代碼示例2.針對(duì)VM1的命令數(shù)據(jù)庫(kù)。
在代碼示例2中,Buf21和Buf22是VM2的兩個(gè)緩沖器。代碼示例2示出了依賴信息可以由命令掃描器模塊314、316以高粒度等級(jí)構(gòu)建。例如,一些緩沖器可以被協(xié)同調(diào)度,而其他的緩沖器是每環(huán)形調(diào)度的。以該方式,命令掃描器模塊314、316可以使得能夠?qū)崿F(xiàn)模式靈活的調(diào)度策略。作為示例,如果VM1提交僅具有3D/位塊傳送器依賴性的命令緩沖器,但VM2提交具有視頻工作負(fù)荷的命令緩沖器,則GPU調(diào)度器模塊214可以使用群調(diào)度策略來(lái)將3D/位塊傳送器緩沖器協(xié)同調(diào)度至VM1,而使用每環(huán)形的調(diào)度策略來(lái)調(diào)度VM2的視頻工作負(fù)荷。
在一些實(shí)施例中,命令掃描器模塊314、316可以將閾值測(cè)試或值引入命令數(shù)據(jù)庫(kù)318、320中,以基于當(dāng)前的緩沖器活動(dòng)來(lái)進(jìn)一步控制策略切換。例如,如果頻繁地觀察到跨環(huán)形的同步基元(例如,在許多命令緩沖器中或者在一段時(shí)間內(nèi)的許多觀察中),則這可以指示是本機(jī)圖形驅(qū)動(dòng)器134被設(shè)計(jì)來(lái)以正常過(guò)程使用那些基元。因此,命令掃描器模塊314、316可以使用閾值來(lái)防止實(shí)現(xiàn)群調(diào)度策略188,直到已經(jīng)達(dá)到或者超過(guò)閾值(例如,所檢測(cè)的同步基元的數(shù)目)之后為止。
仲裁器模塊326評(píng)估所有虛擬機(jī)的命令數(shù)據(jù)庫(kù)并且基于對(duì)命令數(shù)據(jù)庫(kù)318、320中的所有命令數(shù)據(jù)庫(kù)的評(píng)估來(lái)選擇針對(duì)虛擬機(jī)中的至少一個(gè)虛擬機(jī)的調(diào)度策略。仲裁器模塊326利用命令數(shù)據(jù)庫(kù)318、320和調(diào)度策略322、324來(lái)動(dòng)態(tài)地選擇針對(duì)一個(gè)或多個(gè)GPU命令和/或VM的調(diào)度策略。為此,考慮到調(diào)度策略322、324,仲裁器模塊326分析命令數(shù)據(jù)庫(kù)318、320中的信息。作為該分析的結(jié)果,仲裁器模塊326可以發(fā)起從每環(huán)形的調(diào)度策略322到群調(diào)度策略324的切換或者從群調(diào)度策略324到每環(huán)形的調(diào)度策略322的切換。在從每環(huán)形的調(diào)度策略322切換至群調(diào)度策略324時(shí),仲裁器模塊326可以根據(jù)需要發(fā)起會(huì)合(rendezvous)過(guò)程以等待所有環(huán)形緩沖器變得空閑。
現(xiàn)在參考圖4,示出了用于動(dòng)態(tài)地選擇針對(duì)GPU提交的調(diào)度策略的方法400的示例。方法400的部分可以由計(jì)算設(shè)備110或計(jì)算設(shè)備142的硬件、固件和/或軟件來(lái)執(zhí)行;例如,由CPU 112、144和GPU 126、152來(lái)執(zhí)行。在框410處,計(jì)算設(shè)備110、142從VM接收GPU提交,其中VM是由計(jì)算設(shè)備110、142的GPU虛擬化服務(wù)所建立的多個(gè)VM中的一個(gè)VM,并且VM具有多個(gè)不同的命令緩沖器和一個(gè)本機(jī)圖形驅(qū)動(dòng)器。所述提交包括來(lái)自VM的不同的命令緩沖器的GPU命令。在框412處,計(jì)算設(shè)備110、142掃描關(guān)于所述提交的GPU命令。這樣做時(shí),計(jì)算設(shè)備110、142檢查GPU命令的語(yǔ)義以確定命令類型(例如,哪一個(gè)引擎154應(yīng)該處理命令:3D、位塊傳送器、視頻或視頻編碼/解碼)和/或以確定是否存在任何跨緩沖器依賴性(例如,是否存在任何跨環(huán)形的同步基元)。
在框414處,計(jì)算設(shè)備110、142識(shí)別跨緩沖器依賴性(如果存在的話)。在框416處,如果識(shí)別出跨緩沖器依賴性,則計(jì)算設(shè)備110、142將標(biāo)記(例如,REQ_GANG=Y(jié)ES)與VM的提交相關(guān)聯(lián)。如果沒(méi)有識(shí)別出跨緩沖器依賴性,則在框418處計(jì)算設(shè)備110、142繼續(xù)掃描在來(lái)自VM的提交中的另一個(gè)GPU命令(如果該提交包含待掃描的另一個(gè)命令)。如果存在待掃描的另一個(gè)GPU命令,則計(jì)算設(shè)備110、142返回至框412。如果在該提交中不存在需要掃描的其他GPU命令,則在框420處計(jì)算設(shè)備110、142繼續(xù)建立針對(duì)VM的命令數(shù)據(jù)庫(kù)。在框424處,計(jì)算設(shè)備110、142將配備有任何跨緩沖器依賴性信息和/或任何命令類型信息(例如,在框412-416處所執(zhí)行的掃描過(guò)程的輸出)的GPU命令存儲(chǔ)在命令數(shù)據(jù)庫(kù)中。
在框426處,計(jì)算設(shè)備110、142基于包含在命令數(shù)據(jù)庫(kù)和可用的調(diào)度策略(其包括例如每環(huán)形的調(diào)度策略和群調(diào)度策略)中的信息來(lái)選擇調(diào)度策略。為此,計(jì)算設(shè)備110、142可以執(zhí)行編程邏輯(例如,布爾邏輯)來(lái)確定是否已經(jīng)發(fā)生條件(例如,跨緩沖器依賴性存在或不存在、特定數(shù)目或頻率的跨緩沖器依賴性存在或不存在),并且基于指定的條件的存在或不存在來(lái)選擇策略。在框428處,計(jì)算設(shè)備110、142確定是否需要改變當(dāng)前的調(diào)度策略。為此,計(jì)算設(shè)備110、142可以將在框426處所選擇的策略與當(dāng)前生效的策略進(jìn)行比較,并且如果需要改變策略,則在框430處發(fā)起必要的動(dòng)作來(lái)實(shí)現(xiàn)新的策略(例如,根據(jù)需要的會(huì)合過(guò)程)。在框432處,計(jì)算設(shè)備110、142可以更新當(dāng)前的調(diào)度策略。例如,如上所述,如果計(jì)算設(shè)備110、142注意到在一段時(shí)間內(nèi)出現(xiàn)了許多跨緩沖器依賴性,則計(jì)算設(shè)備110、142可以更新群調(diào)度策略,以使得該群調(diào)度策略僅僅在已經(jīng)檢測(cè)到某閾值數(shù)量的跨緩沖器依賴之后被實(shí)現(xiàn)。計(jì)算設(shè)備110、142可以將經(jīng)更新的策略存儲(chǔ)在例如數(shù)據(jù)存儲(chǔ)設(shè)備118、166中。
現(xiàn)在參考圖5,示出了在本文中所公開(kāi)的動(dòng)態(tài)地選擇的、混合GPU調(diào)度方法的實(shí)現(xiàn)的示例500。在示例500中,計(jì)算設(shè)備110、142已經(jīng)識(shí)別出VM Buf11(3D)緩沖器和VM1Buf12(位塊傳送器)緩沖器之間的跨緩沖器依賴性??缇彌_器依賴性由“等待COND1”和“用信號(hào)發(fā)送COND1”同步基元來(lái)指示。作為結(jié)果,計(jì)算設(shè)備110、142實(shí)現(xiàn)了針對(duì)VM1的群調(diào)度策略。然而,因?yàn)橄嗷ヒ蕾囆詢H僅在針對(duì)VM1的3D和位塊傳送器緩沖器之間,并且不存在針對(duì)視頻引擎154的引擎間依賴性,所以計(jì)算設(shè)備110、142針對(duì)視頻引擎154而實(shí)現(xiàn)每環(huán)形的調(diào)度。作為結(jié)果,分別地,VM2Buf21和VM2Buf22視頻負(fù)荷由GPU 152的視頻引擎154處理,而3D和位塊傳送器引擎154處理VM1Buf11和Buf12工作負(fù)荷。此外,一旦移除了依賴性條件,計(jì)算設(shè)備110、142就返回至3D和位塊傳送器引擎154上的每環(huán)形的調(diào)度。作為結(jié)果,VM1Buf13和VM1Buf14工作負(fù)荷可以分別在3D和位塊傳送器引擎154上同時(shí)進(jìn)行。
示例
在下文中提供了在本文中所公開(kāi)的技術(shù)的說(shuō)明性示例。所述技術(shù)的實(shí)施例可以包括在下文中所描述的示例中的任何一個(gè)或多個(gè)、及其任何組合。
示例1包括用于調(diào)度針對(duì)虛擬化的圖形處理單元(GPU)的工作負(fù)荷提交的計(jì)算設(shè)備。所述計(jì)算設(shè)備包括用于建立包括多個(gè)虛擬機(jī)的虛擬化環(huán)境的虛擬化服務(wù),其中,所述虛擬機(jī)中的每個(gè)虛擬機(jī)包括用于與所述GPU進(jìn)行通信的圖形驅(qū)動(dòng)器以及用于存儲(chǔ)GPU命令的多個(gè)命令緩沖器。所述計(jì)算設(shè)備還包括GPU調(diào)度器模塊,其用于:評(píng)估所有虛擬機(jī)的所有命令緩沖器中的所述GPU命令;響應(yīng)于對(duì)所述GPU命令的評(píng)估,從多個(gè)不同的調(diào)度策略中動(dòng)態(tài)地選擇調(diào)度策略;以及根據(jù)動(dòng)態(tài)地選擇的調(diào)度策略來(lái)調(diào)度所述GPU命令中的至少一個(gè)GPU命令,以用于由所述GPU進(jìn)行處理。
示例2包括示例1的主題,并且包括命令掃描器模塊,所述命令掃描器模塊用于:掃描虛擬機(jī)的所述所有命令緩沖器中的所述GPU命令、生成指示同一虛擬機(jī)的不同的命令緩沖器中的GPU命令之間的跨緩沖器依賴性的數(shù)據(jù)、并且基于指示跨緩沖器依賴性的所述數(shù)據(jù)而動(dòng)態(tài)地選擇所述調(diào)度策略。
示例3包括示例1或示例2的主題,并且包括命令掃描器模塊,所述命令掃描器模塊用于:掃描虛擬機(jī)的所有命令緩沖器中的GPU命令、確定針對(duì)所述GPU命令中的每個(gè)GPU命令的命令類型、并且基于GPU命令的命令類型而動(dòng)態(tài)地選擇針對(duì)GPU命令的所述調(diào)度策略。
示例4包括前述示例中的任何一個(gè)示例的主題,其中GPU調(diào)度器用于:根據(jù)動(dòng)態(tài)地選擇的調(diào)度策略來(lái)調(diào)度所述虛擬機(jī)中一個(gè)虛擬機(jī)的GPU命令,并且根據(jù)不同的調(diào)度策略來(lái)調(diào)度所述虛擬機(jī)中的另一個(gè)虛擬機(jī)的GPU命令。
示例5包括前述示例中的任何一個(gè)示例的主題,其中所述GPU調(diào)度器模塊用于響應(yīng)于檢測(cè)到同一虛擬機(jī)的不同的命令緩沖器中的兩個(gè)GPU命令之間的跨緩沖器依賴性,而將所述調(diào)度策略從每環(huán)形的調(diào)度策略切換至群調(diào)度策略。
示例6包括示例5的主題,其中,所述GPU調(diào)度器模塊用于:評(píng)估不同的虛擬機(jī)的GPU命令,并且根據(jù)不是群調(diào)度策略的調(diào)度策略來(lái)調(diào)度所述不同的虛擬機(jī)的GPU命令。
示例7包括示例6的主題,其中,所述GPU調(diào)度器模塊用于根據(jù)每環(huán)形的調(diào)度策略來(lái)調(diào)度所述不同的虛擬機(jī)的GPU命令。
示例8包括示例1、5或6中的任何一個(gè)示例的主題,其中,所述命令緩沖器中的每個(gè)命令緩沖器被實(shí)施為環(huán)形緩沖器,并且所述GPU調(diào)度器模塊用于:針對(duì)跨環(huán)形同步基元來(lái)對(duì)虛擬機(jī)的GPU命令進(jìn)行掃描,并且基于存在或不存在跨環(huán)形的同步基元來(lái)選擇針對(duì)所述虛擬機(jī)的GPU命令的所述調(diào)度策略。
示例9包括示例1、5或6中的任何一個(gè)示例的主題,其中,所述GPU調(diào)度器模塊用于基于對(duì)所述GPU命令的所述評(píng)估的輸出,而動(dòng)態(tài)地選擇針對(duì)不同的虛擬機(jī)的不同的調(diào)度策略。
示例10包括示例1、5或6中的任何一個(gè)示例的主題,并且包括針對(duì)所述虛擬機(jī)中的每個(gè)虛擬機(jī)的命令掃描器模塊,每個(gè)命令掃描器模塊用于創(chuàng)建包括指示所述虛擬機(jī)的所述命令緩沖器之間的依賴性的數(shù)據(jù)的命令數(shù)據(jù)庫(kù)。
示例11包括示例1、5或6中的任何一個(gè)示例的主題,并且包括仲裁器模塊,所述仲裁器模塊用于:評(píng)估所有虛擬機(jī)的所述命令數(shù)據(jù)庫(kù),并且基于對(duì)所述所有命令數(shù)據(jù)庫(kù)的評(píng)估,而選擇針對(duì)所述虛擬機(jī)中的至少一個(gè)虛擬機(jī)的所述調(diào)度策略。
示例12包括示例1、5或6中的任何一個(gè)示例的主題,其中,所述GPU調(diào)度器模塊用于:掃描虛擬機(jī)的所有命令緩沖器中的所述GPU命令、檢測(cè)同一虛擬機(jī)的不同的命令緩沖器中的GPU命令之間的跨緩沖器依賴性、確定在一段時(shí)間內(nèi)跨緩沖器依賴性出現(xiàn)的頻率、并且基于所述跨緩沖器依賴性出現(xiàn)的所述頻率來(lái)改變所述調(diào)度策略。
示例13包括示例1、5或6中的任何一個(gè)示例的主題,其中,所述GPU調(diào)度器模塊用于:監(jiān)測(cè)所有虛擬機(jī)的所有命令緩沖器之間的跨緩沖器依賴性的出現(xiàn),并且如果在經(jīng)選擇的數(shù)量的命令緩沖器中沒(méi)有檢測(cè)到跨緩沖器依賴性,則將所述調(diào)度策略從每環(huán)形的策略改變至群策略。
示例14包括用于調(diào)度針對(duì)虛擬化的圖形處理單元(GPU)的工作負(fù)荷提交的方法,所述方法包括:建立包括多個(gè)虛擬機(jī)的虛擬化的環(huán)境,其中所述虛擬機(jī)中的每個(gè)虛擬機(jī)包括用于與GPU進(jìn)行通信的圖形驅(qū)動(dòng)器以及用于存儲(chǔ)GPU命令的多個(gè)命令緩沖器;評(píng)估所有虛擬機(jī)的所有命令緩沖器中的GPU命令;響應(yīng)于對(duì)所述GPU命令的評(píng)估的輸出,從多個(gè)不同的調(diào)度策略中動(dòng)態(tài)地選擇調(diào)度策略;以及根據(jù)動(dòng)態(tài)地選擇的調(diào)度策略來(lái)調(diào)度所述GPU命令中的至少一個(gè)GPU命令,以用于由所述GPU進(jìn)行處理。
示例15包括示例14的主題,并且包括:掃描虛擬機(jī)的所有命令緩沖器中的GPU命令、生成指示同一虛擬機(jī)的不同的命令緩沖器中的GPU命令之間的跨緩沖器依賴性的數(shù)據(jù)、并且基于指示跨緩沖器依賴性的所述數(shù)據(jù)而動(dòng)態(tài)地選擇所述調(diào)度策略。
示例16包括示例14的主題,并且包括:掃描虛擬機(jī)的所有命令緩沖器中的GPU命令,確定針對(duì)所述GPU命令中的每個(gè)GPU命令的命令類型、并且基于GPU命令的命令類型而動(dòng)態(tài)地選擇針對(duì)GPU命令的所述調(diào)度策略。
示例17包括示例14的主題,并且包括:根據(jù)動(dòng)態(tài)地選擇的調(diào)度策略來(lái)調(diào)度所述虛擬機(jī)中一個(gè)虛擬機(jī)的GPU命令,并且根據(jù)不同的調(diào)度策略來(lái)調(diào)度所述虛擬機(jī)中的另一個(gè)虛擬機(jī)的GPU命令。
示例18包括示例14的主題,并且包括響應(yīng)于檢測(cè)到同一虛擬機(jī)的不同的命令緩沖器中的兩個(gè)GPU命令之間的跨緩沖器依賴性,而將所述調(diào)度策略從每環(huán)形的調(diào)度策略切換至群調(diào)度策略。
示例19包括示例18的主題,并且包括:評(píng)估不同的虛擬機(jī)的GPU命令,并且根據(jù)不是群調(diào)度策略的不同的調(diào)度策略來(lái)調(diào)度所述不同的虛擬機(jī)的所述GPU命令。
示例20包括示例19的主題,并且包括根據(jù)每環(huán)形的調(diào)度策略來(lái)調(diào)度所述不同的虛擬機(jī)的所述GPU命令。
示例21包括示例14的主題,其中,命令緩沖器中的每個(gè)命令緩沖器被實(shí)施為環(huán)形緩沖器,并且所述方法包括:針對(duì)跨環(huán)形同步基元來(lái)對(duì)虛擬機(jī)的GPU命令進(jìn)行掃描,并且基于存在或不存在跨環(huán)形的同步基元來(lái)選擇針對(duì)所述虛擬機(jī)的GPU命令的所述調(diào)度策略。
示例22包括示例14的主題,并且包括基于對(duì)所述GPU命令的所述評(píng)估的所述輸出,而動(dòng)態(tài)地選擇針對(duì)不同的虛擬機(jī)的不同的調(diào)度策略。
示例23包括示例14的主題,并且包括針對(duì)所述虛擬機(jī)中的每個(gè)虛擬機(jī),創(chuàng)建包括指示所述虛擬機(jī)的所述命令緩沖器之間的依賴性的數(shù)據(jù)的命令數(shù)據(jù)庫(kù)。
示例24包括示例23的主題,并且包括:評(píng)估所有虛擬機(jī)的所述命令數(shù)據(jù)庫(kù),以及基于對(duì)所有命令數(shù)據(jù)庫(kù)的評(píng)估來(lái)選擇針對(duì)所述虛擬機(jī)中的至少一個(gè)虛擬機(jī)的所述調(diào)度策略。
示例25包括示例14的主題,并且包括:掃描虛擬機(jī)的所有命令緩沖器中的所述GPU命令、檢測(cè)同一虛擬機(jī)的不同的命令緩沖器中的GPU命令之間的跨緩沖器依賴性、確定在一段時(shí)間內(nèi)跨緩沖器依賴性出現(xiàn)的頻率、并且基于所述跨緩沖器依賴性出現(xiàn)的所述頻率來(lái)改變所述調(diào)度策略。
示例26包括示例14的主題,并且包括:監(jiān)測(cè)所有虛擬機(jī)的所有命令緩沖器之間的跨緩沖器依賴性的出現(xiàn),并且如果在經(jīng)選擇的數(shù)量的命令緩沖器中沒(méi)有檢測(cè)到跨緩沖器依賴性,則將所述調(diào)度策略從每環(huán)形的策略改變至群策略。
示例27包括計(jì)算設(shè)備,所述計(jì)算設(shè)備包括處理器以及其中存儲(chǔ)有多個(gè)指令的存儲(chǔ)器,其中當(dāng)由所述處理器執(zhí)行時(shí),所述指令使得所述計(jì)算設(shè)備執(zhí)行根據(jù)示例14-26中的任何示例的所述方法。
示例28包括一個(gè)或多個(gè)機(jī)器可讀存儲(chǔ)介質(zhì),其包括存儲(chǔ)在其上的多個(gè)指令,其中響應(yīng)于被執(zhí)行,所述指令使得計(jì)算設(shè)備執(zhí)行根據(jù)示例14-26中的任何示例的所述方法。
示例29包括計(jì)算設(shè)備,其包括用于執(zhí)行根據(jù)示例14-26中的任何示例的所述方法的單元。
示例30包括用于調(diào)度針對(duì)虛擬化的圖形處理單元(GPU)的工作負(fù)荷提交的系統(tǒng)。所述系統(tǒng)包括:用于建立包括多個(gè)虛擬機(jī)的虛擬化環(huán)境的單元,其中所述虛擬機(jī)中的每個(gè)虛擬機(jī)包括用于與GPU進(jìn)行通信的圖形驅(qū)動(dòng)器以及用于存儲(chǔ)GPU命令的多個(gè)命令緩沖器;用于評(píng)估所有虛擬機(jī)的所有命令緩沖器中的GPU命令的單元;用于響應(yīng)于對(duì)所述GPU命令的評(píng)估的輸出,從多個(gè)不同的調(diào)度策略中動(dòng)態(tài)地選擇策略的單元;以及用于根據(jù)動(dòng)態(tài)地選擇的調(diào)度策略來(lái)調(diào)度所述GPU命令中的至少一個(gè)GPU命令,以用于由所述GPU進(jìn)行處理的單元。
示例31包括示例30的主題,并且包括,用于針對(duì)所述虛擬機(jī)中的每個(gè)虛擬機(jī)而創(chuàng)建命令數(shù)據(jù)庫(kù)的單元,所述命令數(shù)據(jù)庫(kù)包括指示所述虛擬機(jī)的所述命令緩沖器之間的依賴性的數(shù)據(jù)。
示例32包括主題31的主題,并且包括用于評(píng)估所有虛擬機(jī)的所述命令數(shù)據(jù)庫(kù)并且基于對(duì)所有命令數(shù)據(jù)庫(kù)的評(píng)估來(lái)選擇針對(duì)所述虛擬機(jī)中的所述至少一個(gè)虛擬機(jī)的所述調(diào)度策略的單元。
示例33包括示例30的主題,并且包括單元,所述單元用于:掃描虛擬機(jī)的所有命令緩沖器中的所述GPU命令、檢測(cè)同一虛擬機(jī)的不同的命令緩沖器中的GPU命令之間的跨緩沖器依賴性、確定在一段時(shí)間內(nèi)跨緩沖器依賴性出現(xiàn)的頻率、并且基于所述跨緩沖器依賴性出現(xiàn)的所述頻率來(lái)改變所述調(diào)度策略。
示例34包括示例30的主題,其包括單元,所述單元用于:監(jiān)測(cè)所有虛擬機(jī)的所有命令緩沖器之間的跨緩沖器依賴性的出現(xiàn),并且如果在經(jīng)選擇的數(shù)量的命令緩沖器中沒(méi)有檢測(cè)到跨緩沖器依賴性,則將所述調(diào)度策略從每環(huán)形的策略改變至群策略。