從概念上來說,虛擬化是指可讓一台設備作為一個或多個虛擬機(VM)主機的功能,而且每個虛擬機就像是獨立運作的機器,擁有自己的作業系統(OS),但所有的操作都是在相同的底層硬體設備上執行。
對繪圖處理器(GPU)來說,這表示此功能可支援多個作業系統同時執行,其中每個作業系統都能把影像處理運算交付給單一的圖像處理硬體單元來處理。
認識GPU虛擬化了解常見三種類型
GPU虛擬化儼然已成為各種下一代應用的必備功能。具有硬體虛擬化功能的GPU,可在各個應用程式/作業系統之間提供安全隔離,以提升安全性,並將底層GPU硬體的利用率最大化。在虛擬化解決方案中,包含了以下三個關鍵要素:
・主機作業系統(Host OS)
相比客端作業系統,主機作業系統具有完整的驅動程式,並且對底層硬體擁有較高的控制權限。
・客端作業系統(Guest OS)
由虛擬機管理程式(Hypervisor)監管,各自具有作業系統的虛擬機,可以是一個或多個,可以共享底層的硬體資源。
・虛擬機管理程式(Hypervisor)
基本上是為客端作業系統提供共享虛擬硬體平台(在本例中為GPU硬體),並管理虛擬作業系統軟體 所謂的GPU虛擬化技術,含括了以下所述的三種類型:
・半虛擬化(Paravirtualization)
客端(虛擬機)作業系統能夠意識到它們是虛擬化的,並且與其他客端系統共享底層硬體資源。在這種情況下,客端系統須透過管理程式(Hypervisor)提交工作,整個系統必須以一個內聚單位協同作業。此解決方案中的管理程式會有額外的工作量(在CPU上運算),而且工作提交的延遲較長,這有可能會降低底層GPU硬體的有效利用率。此外,還須要修改客端作業系統(增加額外的功能),使其能夠透過管理程式相互溝通。
・完全硬體虛擬化(Full Hardware Virtualization)
在管理程式下運行的每個客端作業系統,都不會意識到它正與其他客端作業系統及主機作業系統共享GPU資源。每個客端系統都具有完整的驅動程式,並且可以獨立及合併直接向底層硬體提交工作。這種方式的好處是,在處理不同「客端」提交的工作時,不會造成管理程式的額外工作量,從而也降低了向GPU提交工作的等待時間,因此具有更高的利用率。
・完全軟體虛擬化(Complete Software Virtualization)
主要是利用軟體來模擬所需的系統、作業系統和硬體功能性。由於它的各種限制,並不適用於GPU虛擬化解決方案,因此這裡就不特別說明。
GPU虛擬化應用日增遍及汽車/DTV/STB設計
在詳細探討虛擬化解決方案之前,先介紹此項技術的一些實際應用案例,其市場與應用十分廣泛,但主要是嵌入式市場,包含汽車、數位電視(DTV)/機上盒(STB)、物聯網/可穿戴設備以及手機/平板電腦。以下將專注於其中汽車和數位電視/機上盒兩項應用,這些是目前主要的應用需求,而且逐漸趨向於採用完全硬體虛擬化。
GPU虛擬化正成為汽車產業的必備技術。隨著汽車朝自動駕駛發展,越來越需要能夠支援更強大的自動輔助駕駛系統(ADAS)功能。與此同時,擁有更高解析度的顯示螢幕也是日益普遍的趨勢,像是電子儀表板資訊娛樂系統(儀表板和後座)、抬頭顯示器(HUD)等。
傳統的做法是,不同的應用由各自單獨的晶片來處理,或是由單一晶片執行軟體或半虛擬化技術。為了降低成本,一線供應商/原始設備製造商(OEM)正朝功能更強大的單晶片方案發展。在單一晶片上執行軟體或半虛擬化技術,雖然也是可行選項之一,但其缺點是效能/利用率降低、功耗較高,而且缺乏穩定性與安全性,但此二者卻是車用市場的重要考量。
圖1在每個虛擬機/客端操作系統上執行的汽車應用程式都是彼此隔離的,但卻共享相同的底層GPU。有些重要的安全應用程式(在隔離的虛擬機中執行),例如儀表板和ADAS應用程式,通常都要保證性能達到比較高的要求。其他應用程式,如車用資訊娛樂應用程式,出於數位版權管理(DRM)的考量,也必須確保安全性。
此外,消費者也希望能夠使用從第三方下載的非關鍵性與非安全性相關的應用程式。為了避免惡意攻擊及保護版權內容,這些應用程式須要與高安全性的應用程式保持隔離,所有這些要求都能透過PowerVR的完全硬體虛擬化解決方案來實現。
除此之外,數位電視/機上盒很早就採用GPU來呈現使用者介面(UI)和遊戲。至今,GPU正日益廣泛地用來執行影像的介面後處理與合成。過去,由於影像保護/數位版權管理內容保護的考量,此用途是不允許的(例如此做法會帶來風險,亦即當影像通過不安全的IP或系統的某部分時有可能被複製)。然而,有些GPU現已內建了支援數位版權管理內容保護的硬體。此GPU可作為系統的一部分,從受保護的記憶體區域存取數位版權管理內容,並將處理過的內容寫回此受保護的記憶體區域。從Series6開始,PowerVR GPU已可支援全硬體內置的數位版權管理安全性。因此可實現安全與非安全性應用的隔離,確保記憶體中的應用程式內容不會被複製到非安全的記憶體區域。
雖然這樣的解決方案可滿足此種要求,但是希望能在多個安全的應用程式之間,提供增強的隔離性能的需求日益增加。舉例來說,內容供應商A的內容,需要與供應商B的內容隔離,這項要求是由內容供應商及其上游供應商所推動的。此外,廣播電視也須要與其他下載的應用程式隔離,不管它們是否是安全的。為了滿足這樣的需求,完全硬體虛擬化技術可被用來實現單一作業系統(或多個作業系統)上的多個安全應用程式的真正隔離。
如圖2所示,一個帶有多個應用程式的數位電視/機上盒系統,其中有些應用程式須要被保護或者完全隔離。
完全硬體GPU虛擬化GPU資源利用率最大化
PowerVR GPU虛擬化是完全硬體虛擬化解決方案,其中客端作業系統具備完整的驅動程式,每個都能直接向GPU全硬體提交工作。此解決方案並不須要管理程式(Hypervisor)介入以提交任務,因此能使GPU資源的硬體利用率最大化。PowerVR GPU可支援多達八個虛擬機/作業系統,每個虛擬機都能獨立且平行地運作。
在圖3所展示的範例中,每個作業系統都能同時提交一個或多個任務給底層硬體,而且從軟體、硬體和記憶體內容的角度來看,每個作業系統都彼此隔離,可有效提供穩定性與安全性。
一旦作業系統向GPU硬體提交任務,運行在整合於GPU內的獨立微處理器上的韌體(Firmware),會排程調度在硬體上的任務。 為確保圖3所展示的解決方案可行性,因此採取了以下兩種機制:
・每個作業系統硬體調節介面提交任務
在GPU中,每個作業系統都有任務提交(執行)緩存器,它們可透過主機與GPU之間的緩存器接口來存取。若有任務提交給GPU,這些緩存器就會被寫入,每一個都會對映到其相對的作業系統地址空間,使其能被正確的作業系統任務提交所存取。每個作業系統能利用此機制把任務直接交給硬體,無須管理程式介入。這從本質上帶來了很好的安全性/隔離性,因為客端作業系統僅能存取自己的任務提交緩存器,而不能存取其他的配置緩存器,因為這些配置緩存器只有主機管理程式/Hypervisor能夠存取。
・利用OS_ID標識存取記憶體
針對每個作業系統,GPU與記憶體的每筆交易都會有一個獨特的ID,此ID可作為該作業系統中唯一的地址空間選擇器。例如,若在系統單晶片(SoC)中有一個記憶體管理單元(MMU),GPU的實體位址便成為中間實體位址(IPA)。與此唯一的ID結合,IPA能使系統MMU准許或阻擋存取,並將IPA轉換為真的實體位址,透過這種方法再加上系統中某種程度的防火牆,可為記憶體中所有的作業系統資源提供實際保護。
實作影片操作解說示範利用率最大化
如前所述,本機韌體負責調度從不同作業系統提交來的工作,此韌體的主要目標是達到GPU資源的最大利用率,並實現更高效能,以及遵循既有的各種機制來確保穩定性與安全性。藉由實測影片展現了此種性能,亦即PowerVR GPU完全硬體虛擬化的最大利用率。
影片一(兩個擁有相同優先等級的儀表板)是由一個採用PowerVR Series6XT GPU的參考平台來展示,如圖4所示,兩個單獨的作業系統分別提交了兩個應用程式,它們都在同一個虛擬化PowerVR GPU硬體上運作。
影片一開始,兩個作業系統的工作被賦予相同的優先等級,因此它們會被本機韌體在硬體上以循環方式進行調度。可以看出,它們平均共享GPU資源,而達到了相同的性能(以每秒張數-影格率(fps)來量化)。此外,從分析GPU內部的硬體計數器來看(圖5),硬體被最大程度的利用(沒有明顯的差異),顯示出PowerVR虛擬化方案並無增加額外的工作負載,並降低利用率。
這項以硬體計數器為基礎的利用率分析,是採用Imagination的效能分析軟體PVRTune。這是一個可免費使用的圖形化使用者介面(GUI)式軟體工具,利用硬體計數器與定時器,可用來即時存取、對照並具體化GPU的性能。
它可提供包括fps、GPU與中央處理器(CPU)利用率以及頻率等綜合指標,同時也能提供像是紋理與ALU管線利用率、頻寬消耗、類別標識(Context) ID、頂點和畫素處理週期等詳細資訊。這些都是以GPU內的硬體計數器為基礎,並能根據用戶配置以特定間隔來取樣。對研發人員來說,可用來檢查其應用程式的性能,並藉此找出瓶頸,以優化性能。
在影片的第二部分,OS1(在螢幕一上顯示)的應用程式性能被人為限制在最大影格率120、90、60和30fps等,可以看到,OS2應用程式的性能會依比例提升,因為OS2並沒有設定影格率,這表示在此情境下,韌體依然能夠有效調度,並達到最大的利用率。
在影片的最後部分,進一步強化了此特點。OS1應用程式影格率被限制為10fps,而不設限執行的OS2應用程式影格率為247fps,當OS1應用程式影格率再設定為20fps,那麼OS2應用程式的影格率,則如預期地變為237fps。圖6所示為其硬體計數器的圖表。再次證明,虛擬化PowerVR GPU的額外工作負載極小,並能最大化資源的利用率。
基本隔離
一般來說,虛擬化的好處之一是可在不同的OS,及其相對應的應用程式之間,提供軟體層級的安全隔離,這是汽車應用的基本需求,因為非關鍵性OS應用程式的失效,絕對不能影響到主要的OS應用程式。影片二(圖7)展示了這個特點,該影片將說明核心錯誤(Kernel Panic)和OS重啟。
這裡用了一個採用PowerVR Series6XT GPU的參考平台來示範,有兩個應用程式,分別是從兩個OS提交過來的:關鍵OS運行儀表板應用程式,而非關鍵OS執行導航應用程式。
非主要OS應用程式若發生當機,會造成核心錯誤及客端OS的重新啟動,但因為GPU的虛擬化特性,這不會影響主要OS執行的關鍵應用程式,也就是說,它不會中斷且繼續運作。此外,一旦客端OS重啟完成,又能再度無縫地提交工作給GPU。
服務品質
有時候,主要OS的應用程式(一個或多個)有一定的安全性要求,以免受到惡意程式的攻擊,同時還要確保一定程度的效能。這可以透過支援環境穩定性來達成,包括建立機制來防止阻斷服務(DoS)攻擊,以保護其免受惡意程式的攻擊,例如故意消耗所有資源,進而讓主要的OS應用程式無法執行。
設定優先等級/次序
為了滿足許多車用系統所需的性能保證水準,需要有一個優先排序機制,在GPU內的專用微控制器(MCU)上運行的韌體,可如上述處理調度硬體上的工作,以達到GPU利用率與性能的最大化。該實體還能履行為每個OS設定的優先等級,並以工作負載精細度等級在OS內運作,當較高優先次序的OS任務提交給GPU時,較低優先次序的OS工作就會被環境切換(Context Switch)出去。簡而言之,所謂的環境切換,是在較早的時間點暫停當下操作,並寫出所需的數據,以便在稍後的時間點恢復操作。較早的時間暫停點,也就是Series6XT(支援全硬體虛擬化技術的第一代PowerVR GPU)可提供的場景切換最小精細度(Granularity),包括幾何處理、畫素處理、運算處理。幾何處理是為了繪圖調度(Draw Call)精細度,畫素處理針對圖塊(Tile)精細度,而運算處理用於工作群組(Workgroup)精細度。
優先等級較高的OS工作完成後,較低優先順序的工作便會恢復,此功能有助於確保較高優先順序的主要OS工作,可取得必需的GPU資源,以保證效能。
影片三(效能與優先順序)的示範,是在採用全硬體虛擬化PowerVR Series6XT GPU的參考平台上運行的。在影片三的開頭,有兩個OS,其中一個要求60fps的性能水準,這是主要OS,因此被標記為高優先順序,當所需的效能等級進一步提高到90fps時,導航應用程式(被設定為較低優先順序)的效能便會降低。這是由於上述的優先順序機制,也就是說,每當提交高優先順序的工作時,導航應用程式就會被環境切換出去,以確保高優先順序工作可達到所需的效能,同樣地,當高優先順序OS要求的fps進一步提高到120fps時,導航應用程式的效能又會被再次降低,以確保主要OS能有GPU資源來達成所需效能。
在影片三的第二部分,為了展示其功能性,高優先順序OS所需的fps降低到10fps以及20fps,如預期的,導航應用程式的效能也相對提高。此外,當高優先順序OS被設定為不要求fps並自由執行時,由於其優先順序較高,因會消耗GPU資源,由此可預見的是,導航應用程式將完全停止。
在影片的最後部分,兩個OS的優先順序被設定為相同,如先前所述,對於優先等級相同的任務,韌體提交給硬體的任務順序,取絕於主機端的提交速率,並以循環方式進行。在此案例中,雖然儀表板應用程式設定為不要求fps(可最大程度的自由執行),它仍會與導航應用程式共享GPU資源,這可反映在導航應用程式fps的改變。
阻斷服務攻擊(DoS)
只要所有不同作業系統的應用程式能正確執行,上述的優先順序機制便能發揮作用,然而,可編寫惡意應用程式使其無法執行環境切換,以獲得更高優先次序的調度,例如惡意的畫素著色器可以被設定為無限迴圈,因此當某個畫素低於圖塊(Tile)的精細度時,場景/環境切換就不會發生。
為避免此情況發生,PowerVR GPU可定義最大的環境切換週期,如果環境切換沒有完成,將執行刪除針對個別數據主檔案(Per Data Master Kill)或軟重設(取決於工作負載類型)。個別數據主檔案刪除與軟重設之間的差異在於,前者不會中斷同一時間點在GPU上執行的其他工作負載,而軟重設則會中斷所有執行中的工作任務。針對展示所用的參考平台(PowerVR Series 6XT GPU),運算工作會被刪除,而頂點和畫素處理運算將會被軟重設,此特點可確保服務品質,因為GPU能免於受到惡意程式的攻擊,因此達到保證的效能等級。環境切換的週期是可設定的,能為一線供應商或原始設備製造商提供完整的靈活性與客製化功能。
OS隔離
雖然以上的解決方案,可確保GPU免於惡意程式的攻擊,但PowerVR GPU還有一個可選的附加功能,亦即OS隔離,可使穩定性方面進一步提高。只有被認為是主要且安全的OS才能在GPU上完全隔離地執行,例如當儀表板應用程式是在封閉環境中開發的,因此是安全的,並且要保證效能和免於受到惡意程式的攻擊,它能同時在GPU上運作,且限制第三方的存取權限,因此在客端OS上的潛在不安全/惡意應用程式(如從應用程式商店下載的)無法在相同的時間點執行。
從硬體角度來看,如此能夠確保真正的隔離,不安全的應用程式僅能在「安全的」應用程式完成後,才能以隔離的方式執行,隔離的應用程式可以更快地執行,因為GPU和記憶體子系統資源(頻寬)沒有被共享。此解決方案能夠進一步擴充至其他來自單一或多個安全OS的應用程式,取決於原始設備製造商定義的安全性,因此GPU具備完全的靈活性及可配置性。
PowerVR虛擬化效能再升級
PowerVR Series8XT GPU是第一代基於Imagination Furian架構的GPU,可支援PowerVR的第三版硬體虛擬化。一些主要的進化功能,包括以下幾項:
・更精細的環境切換
利用Series8XT GPU,環境切換能以更精細的等級來執行,確保較低優先順序的工作能夠更快地被環境切換出去,並調度給較高優先順序的任務。現在,環境切換的精細度為:頂點處理(原始粒度)、畫素處理(圖塊中的原始模組,或最差的情況,回到圖塊的粒度)。
・刪除個別的數據主檔案(Per Data Master Killing)
如果較低優先順序的應用程式未在定義的時間範圍內,進行環境切換,則依據數據主檔案(Data Master)(運算、頂點或畫素處理),如前所述的DoS機制,可終止或軟重設此應用程式。前幾代的PowerVR GPU只能支援運算終止功能,而頂點和畫素處理需要軟重設,因此如果與不安全的較低優先順序應用程式執行重疊的話,會對高優先順序工作造成影響。到了Series8XT,所有的數據主檔案都能被刪除,以確保即使高優先順序/主要的工作負載與須要逐出的應用程式重疊,也不會受到影響。
・與第二層MMU緊密整合
前幾代的PowerVR GPU具有第一層的記憶體管理單元(MMU),因此系統單晶片供應商須要設計與導入第二層/系統MMU,或在系統單晶片級別設計有類似的機制,以支援虛擬化,Series 8XT在GPU中整合了第二層MMU,並有具備以下的優點,包括與第一層MMU緊密耦合,延遲較低且效率更佳;減少系統單晶片廠的工作量,並縮短產品上市時程;提供可在Hypervisor使用的、與實體相對映的隔離軟體;透過全/雙向的一致性支持,可提升效能並降低系統頻寬;在虛擬化環境中的防護等級更高,並提供更高精細度(頁面邊界)的安全性。
・個別SPU工作提交的控制權限
在PowerVR虛擬化第三版中,可以在GPU內為特定的應用程式提供專屬可擴充處理單元(SPU),以執行其工作負載,這對需要長時間運作且密集運算的ADAS應用是很有助益的,因為應用程式能夠在其專屬的專用SPU上,不受干擾地運作,而其他的應用程式則利用其他適用的機制(例如基於優先順序任務的環境切換)來共享其餘的GPU資源。
提供真正隔離保障安全硬體虛擬化發展受矚目
對於許多將穩定性與安全性視為關鍵考量因素的市場來說,能否支援虛擬化已成為選用GPU IP的重要條件。隨著ADAS功能的日益提升,朝更高等級的自動駕駛邁進,加上對車內更高解析度螢幕的需求,這些要素刺激了快速、節能且支援虛擬化的GPU需求。全硬體虛擬化PowerVR GPU解決方案,可以滿足此市場的需求,並具備了高度的可擴展性設計,能提供各種所需的效能特點,對有意尋求研發領先車用系統單晶片解決方案的供應商來說,支援硬體虛擬化是其理想的解決方案。
總歸來說,硬體虛擬化解決方案可最大程度地利用底層GPU硬體資源,並在軟體和硬體中的應用程式之間,提供真正的隔離,且幾乎不會增加額外的效能負載。此外,包括優先順序劃分機制、QoS、DoS和OS隔離等其它機制,也可實現更高級別的安全性。
(本文作者為Imagination PowerVR部門高級技術經理)