一種基于硬件的虛擬化設計簡化多核處理器的方案
引言
本文引用地址:http://m.butianyuan.cn/article/149462.htm今天的SoC(系統(tǒng)單芯片)處理器都集成了一系列的核心、加速器和其它處理單元。這些異質的多核架構提供了更多的計算能力,但其復雜性也為各種應用中嵌入系統(tǒng)的開發(fā)人員帶來了新的挑戰(zhàn),這些應用包括控制層處理器、視頻服務器、無線基站,以及寬帶網關等。如果是分立的核心,每個核心都能完全地訪問和控制自己的資源。這種可預測的訪問能夠做直接的管理,而有實時約束的應用也具備了確定的性能。然而,在一個多核架構中,各個核心共享資源,潛在的競爭使很多設計因素復雜化,例如處理延時以及可靠地中斷處理。
為了提供與單核器件相當?shù)拇_定性能,多核架構開始采用已經過網絡通信驗證的資源共享與管理技術。這些架構使用已有的隊列與流量管理技術,在多個核心之間有效地分配資源、使吞吐量最大化、盡可能減小響應延時,并且避免了不必要的擁擠。
1 資源虛擬化
從架構的角度看,SoC是多核心的復雜系統(tǒng),它通過一個高速結構,將各種控制與資源連接起來(圖1)。在很多方式上,一片SoC內部的無數(shù)交互操作都很像一個有很多資源(或核心)的通信網絡,這些資源與相同目的地做交互操作,包括內存、外設與總線。顯然,設計人員用于提高網絡效率的帶寬管理技術(如虛擬化)也能用于管理多處理器核心以及共享外設之間的流量。
圖1.下一代SOC是多核心訪問相同的共同資源的復雜系統(tǒng)
片上資源的虛擬化使各個核心能夠共享訪問權;這種共享的訪問權對應用是透明的。每個應用都可以把一個資源看作像自己獨有一樣,而一個虛擬化管理器用于匯總共享的所有權(由所分配的帶寬量所測定)。對資源的虛擬訪問和共享訪問都需要一個隊列管理器和一個流量管理器。各應用使用一個或多個隊列,緩存對某個資源的訪問。虛擬化為隊列增加事件或事務,當資源可用時將它們從隊列中拉出。隊列包含了一個指向緩沖區(qū)中數(shù)據(jù)的緩存描述符(buffer descriptor),并且實現(xiàn)隊列可以有多種方式,具體取決于應用的需求。一只SoC所支持的隊列數(shù)是不定的,從數(shù)百個到數(shù)萬個,可滿足各種應用的需求。
隊列管理器可刷新隊列的狀態(tài),即:隊列大小、頭指針、尾指針,以及起始地址,并且維護填充水平與閾值,包括全滿(full)、將滿(almoST full)、將空(almost empty)和全空(empty)。隊列管理器還為每個隊列提供完全的內存管理,包括空閑池的緩沖分配與回收,以及當某個隊列中增加事件時的訪問權檢查(圖2)。多個請求者可以同時為一個或多個隊列增加描述符,也能在等待某項服務的多個隊列中做出選擇。
對于指向相同資源的多個隊列,管理器作為可用帶寬的仲裁器。此任務不僅是在共享某個資源的各應用之間,也包括一個應用可能必須使能QoS(服務質量)的多個隊列之間。
流量管理采用監(jiān)管與整形機制,測量并控制指定給某個流或一組流的帶寬數(shù)。監(jiān)管機制用于控制流量管理器為某個隊列增加事件的速率,而整形機制則是流量管理器從隊列中去除事件的速率。為了獲得最佳的控制,以及管理隊列優(yōu)先權的能力,必須在每個隊列基礎上實現(xiàn)監(jiān)管與整形。流量管理器亦根據(jù)一個預設的服務算法,將多個隊列映射到單一的共享資源。
有了隊列和流量管理,就可以提供可靠的端至端QoS。這種方案允許多個路徑共享一個資源,而不會對帶寬的預訂產生負面影響。精細粒度QoS支持SLA(服務水平協(xié)議),保證了在每個流量基礎上的最小、平均和最大帶寬。開發(fā)人員可以實現(xiàn)隊列水平的流量標記與度量,以防止出現(xiàn)擁塞。擁塞的早期通知使隊列管理器能夠采用正確的措施,通過向流量資源的反饋,去除對可能丟棄數(shù)據(jù)包的不必要處理,或理想情況下,能完全避免擁塞。
舉例來說,一個基于隊列與流量管理的以太網驅動程序能防止任何一個處理器不公平地獨占端口帶寬。它還能確保帶寬分配以及最大的延時約束,而與其它隊列狀態(tài)無關。驅動程序支持對仲裁方法的選擇(例如:嚴格優(yōu)先級或帶權重的輪叫),有助于實現(xiàn)可靠的實時服務,如視頻流。最后,多個資源還可以共享以太網端口,而不會對帶寬預訂產生負面影響。像IP(互聯(lián)網協(xié)議)轉發(fā)這類任務很容易可靠地實現(xiàn),而對延時敏感的應用(如音視頻的發(fā)送)則受益于確定且可靠的端口管理。另外,當用硬件實現(xiàn)了隊列和流量管理時,驅動程序幾乎無需軟件開銷,就可以維持端至端的QoS。
2 虛擬化層
早期的多核SoC與初期的網絡處理器類似,都將虛擬化資源的全部工作留給了開發(fā)人員。應用在某種程度上必須判斷出自己在與其它應用共享某個資源。當一個應用使用某個共享資源時,它必須以某種與其它應用共存的方式這樣做。操作系統(tǒng)也需要支持虛擬化。
圖2.基于硬件的虛擬化卸下了應用處理器的隊列管理負擔,包括刷新隊列狀態(tài),維持填充水平和閾值,分配與重新分配緩沖區(qū),以及當應用要訪問某隊列時,確認其訪問權限。
在一個傳統(tǒng)架構中,處理器通過一個軟件層,管理著自己對共享資源的訪問(圖3a)。處理器必須知道哪個資源是可用的,以及自己可以使用它們的頻率。隨著處理數(shù)量的增加,資源共享的復雜性也在增長。基于軟件虛擬化的一個缺點在于,它為數(shù)據(jù)包存儲以及接下來數(shù)據(jù)包獲取的每個事務都引入了一個開銷。這種開銷消耗了處理器周期,為代碼處理帶來了復雜性。它還給虛擬化軟件帶來了帶寬管理和滿足預訂保證的負擔。即使通過工具實現(xiàn)了虛擬化代碼的自動化創(chuàng)建,開發(fā)者仍然必須在應用交互通過虛擬化代碼時,進行查錯調試。
評論