嵌入式虛擬化為實現多核處理能力的優勢提供了一種可擴展的機制。嵌入式應用中的虛擬化與其企業和桌面應用有許多共同之處。獨特的嵌入式使用案例和專業的底層技術為嵌入式開發人員提供了優化性能和響應設計的新機會。
在臺式機、數據中心以及現在的嵌入式設計中采用多核技術可以滿足類似的需求——在不提高系統時鐘的情況下擴展計算能力,并為下一代設備和應用實現更高的每瓦MIPS。
臺式機和數據中心的主流多核需要部署的操作系統(OS)提供對稱多處理(SMP)支持。Linux內核支持SMP已經快十年了,支持SMP的Windows和Mac OS版本如今也在廣泛使用。
相比之下,在嵌入式開發中,嵌入式操作系統正試圖趕上支持多核CPU。即使操作系統越來越擅長在多核環境中運行,應用程序和中間件仍然面臨線程安全、并發性和負載平衡的挑戰。
虛擬化軟件架構
為了解決這些挑戰,出現了不同的虛擬化策略,從類型I和類型II開始,如圖1所示。在第一類虛擬化中,虛擬機管理程序“擁有”CPU,并負責引導和運行客戶操作系統。I型平臺是“精益的”, 我的意思是,“成熟,從大型機和小型機的幾代發展中出現,現在是移動設備。相比之下,VMware Fusion、Parallels和Sun VirtualBox等平臺提供的第二類虛擬化側重于最終用戶體驗,虛擬機管理程序作為應用程序在另一個操作系統上運行,沒有性能保證。
嵌入式虛擬化遵循自己的范例。在路由器、交換機和網關等基礎設施應用中,用例類似于企業。I類虛擬機管理程序托管Linux或實時操作系統(RTOS)的實例,以在冗余高可用性架構中的單個硬件或虛擬備件上支持虛擬設備(防火墻、深度包檢查器和其他設備)。
在移動設備中,原始設備制造商使用裸機虛擬化來整合多個CPU,以便在單個CPU上運行基帶、多媒體和應用堆棧以及各種操作系統(一個或多個虛擬機中運行Android或Linux,另一個虛擬機中運行RTOS ),從而節省材料成本。
走向多核
在嵌入式開發中,除了硬件整合之外,虛擬化還提供了一種在單個處理器的多個內核之間分配現有負載的良好機制。嵌入式操作系統架構師傾向于將多核芯片視為離散CPU的集合。大多數傳統RTOS多核支持反映了這一觀點,要求操作系統和堆棧的唯一副本在獨立的內核上以準合作方式運行。
隨著RTOS供應商開始創造他們產品的多核版本,他們經常使用多核芯片中內核負載的靜態映射。一些嵌入式虛擬化平臺需要靜態分配虛擬機管理程序及其托管和運行的負載
物理芯片到虛擬化負載的靜態映射效率低下,無法提供虛擬化帶來的優勢。在嵌入式開發中,更有效的方法是為每個操作系統配置一個虛擬CPU,該虛擬CPU可以映射到單個CPU(一對一),共享一個CPU(多對一),或者分布在多個內核上(一對多)。
負載平衡
今天的聯網設備——手機、機頂盒、車載系統、網絡設備和幾乎任何類型的智能設備——都是應用程序平臺,其負載像臺式計算機、數據中心刀片和服務器一樣復雜多樣。多核CPU承諾現代嵌入式軟件的高吞吐量和敏捷響應,但預測負載和內核利用率超過了集成不同來源軟件的過程,特別是來自應用商店的軟件。
虛擬化為嵌入式開發人員和集成商提供了優化設備性能的額外工具。嵌入式管理程序可以監控客戶操作系統和主機策略軟件的負載,從而相應地分配CPU周期和其他資源。
多核電源管理
多核系統可能會給針對單核系統優化的電源管理方案帶來巨大挑戰。特別是,許多多核片上系統(SOC)對動態電壓和頻率縮放(DVFS)的范圍和能力有限制:
l SoC子系統和多核CPU通常共享電源電壓、時鐘、緩存和其他資源,這意味著DVFS適用于所有內核。
l 一個SoC子系統上的縮放電壓(如果可能)會限制通過本地總線與其他子系統的通信,并拒絕訪問共享內存,包括子系統自己的DRAM。
l 單個SoC子系統的時鐘縮放限制了互操作性,尤其是對于同步總線。
l 有些操作完全使用內核或根本不使用內核,但其他操作會施加不同的負載。全有或全無的使用很容易管理,但多核上的動態負載會帶來更大的電源管理挑戰。
現在添加多個操作系統。在嵌入式開發中,高級操作系統通常包括DVFS電源管理,如Linux高級電源管理和動態電源管理,以及Windows/BIOS高級配置和電源接口。大多數RTOS避免限制實時響應的操作,當它們提供明確的電源管理API時,如vxLib的vxPowerDown(),它們缺乏電源管理策略。即使一個操作系統能夠管理其自身域中的電源,它也不會意識到同一系統中其他操作系統的能力和狀態。
DVFS通過降低電壓和時鐘頻率來提高能效。支持DVFS的CPU在固定的電壓和頻率下提供安全的工作點。
DVFS的邏輯擴展是將電壓降至0 VDC,并通過僅利用兩個操作點(全停和全節流)停止CPU時鐘,這兩個操作點適用于所有可用內核。這個巧妙的技巧只有在虛擬CPU(參見圖3和圖4)的情況下才有可能將負載映射到物理芯片,并在CPU內核之間透明地遷移運行負載。關閉整個內核比DVFS更容易管理,并導致線性的、高度可預測的性能-能量權衡。
多核基帶
隨著高帶寬4G網絡(尤其是LTE)的出現,移動設備需要將更多處理能力用于無線數據通信。在嵌入式開發中,為了通過更高的并發性來提高吞吐量,新出現的需求要求將整個內核專用于4G I/O操作。這一要求使得無線芯片組廠商和傳統的RTOS供應商爭先恐后地為SMP操作重組基帶操作系統和軟件堆棧。
更簡單的解決方案是使用移動/嵌入式虛擬化來提高4G吞吐量。虛擬機管理程序可以根據需要將可用內核映射到輸入或輸出操作,并縮減映射以支持其他CPU密集型操作或執行每內核電源管理,而不是將兩個、四個或更多內核專用于基帶處理。
只有虛擬化可以擴展
多核軟件設計比看起來更復雜也更簡單。系統架構師應該抵制誘惑,不要將傳統軟件元素大規模分配給下一代嵌入式芯片上的可用內核。
處理器路線圖表明可用處理器內核將進一步倍增:如今嵌入式CPU的內核數將增加2倍,很快將增加4倍、8倍甚至更多。這種芯片過剩將很快超過供應和管理多核軟件負載的靜態方法。
在嵌入式開發中,只有嵌入式/移動虛擬化能夠提供可擴展且靈活的機制來實現多核處理能力的優勢,并簡化系統設計、集成和部署,同時使這些系統更加可靠和安全。