一種基于硬件的虛擬化設(shè)計(jì)簡(jiǎn)化多核處理器的方案
基于硬件的隊(duì)列管理能在系統(tǒng)的各個(gè)部件之間提供保護(hù)。最基本的故障隔離方式是阻止對(duì)分配給其它應(yīng)用的內(nèi)存與資源帶寬的訪問(wèn)。為了使虛擬化資源對(duì)應(yīng)用完全透明,隊(duì)列和流量管理器必須只對(duì)損壞的應(yīng)用采取行動(dòng)。換句話說(shuō),必須要將應(yīng)用與其它應(yīng)用的活動(dòng)屏蔽開(kāi)來(lái),并且要適應(yīng)其它應(yīng)用的故障,以維持穩(wěn)定性。就其特性而言,專用隊(duì)列可隔離故障,防止其它處理器和應(yīng)用受到影響。這類隊(duì)列還有利于有效的錯(cuò)誤恢復(fù);專用隊(duì)列可以完全地清除錯(cuò)誤,而不會(huì)使其它應(yīng)用的數(shù)據(jù)受到損失。
一個(gè)隊(duì)列與流量管理控制器可以實(shí)現(xiàn)對(duì)非法資源訪問(wèn)的多級(jí)響應(yīng)。最簡(jiǎn)單的響應(yīng)是阻止訪問(wèn),并給應(yīng)用生成一個(gè)警報(bào),通常是通過(guò)一個(gè)中斷。這個(gè)警報(bào)告訴應(yīng)用,它試圖做了一些不應(yīng)做的事。第二種方法是由開(kāi)發(fā)人員記錄下使用的違背情況,幫助在現(xiàn)場(chǎng)查錯(cuò)。隊(duì)列與流量控制器亦必須能夠通過(guò)觸發(fā)一個(gè)復(fù)位,并重新初始化一個(gè)可能損壞的應(yīng)用,逐步升級(jí)其響應(yīng)。理想情況下,開(kāi)發(fā)人員可以創(chuàng)建一個(gè)控制此響應(yīng)的策略。例如,開(kāi)發(fā)人員可以設(shè)定一個(gè)閾值,如果某個(gè)應(yīng)用做了三次非法訪問(wèn),就認(rèn)為它是一個(gè)已損壞的應(yīng)用,必須重新啟動(dòng)。
6 部分虛擬化
當(dāng)一系列事務(wù)必須依次發(fā)生時(shí),這種要求就成為了一個(gè)阻塞實(shí)例,因?yàn)槠渌?qǐng)求方必須等待此事務(wù)的完成,然后才能獲得資源的控制權(quán)。考慮一個(gè)典型的SATA(串行先進(jìn)技術(shù)連接)事務(wù),此時(shí)首先要配置SATA端口,然后執(zhí)行一個(gè)指令序列。與數(shù)據(jù)包都是單個(gè)事件的以太網(wǎng)端口不同,SATA端口必須鎖定給某個(gè)應(yīng)用,直到事務(wù)完成時(shí)為止;否則,兩個(gè)應(yīng)用會(huì)相互覆蓋,致使誰(shuí)也無(wú)法完成自己的任務(wù)。
圖4.(a)硬件實(shí)施的虛擬化在有完全寬帶管理的SOC中也能實(shí)現(xiàn)資源分配
(b)這種方案能夠在整個(gè)系統(tǒng)上高效地共享資源
盡管各個(gè)應(yīng)用無(wú)法完全共享支持這種事務(wù)特性的資源,但對(duì)配額可以做部分虛擬化。首先,等待使用資源的應(yīng)用必須確認(rèn)端口空閑可用,然后在使用期間鎖定端口。對(duì)鎖定的支持要求在操作系統(tǒng)中有一個(gè)薄的軟件層,這樣就能相互通信,看哪個(gè)應(yīng)用擁有對(duì)鎖的控制權(quán)。不過(guò),硬件的使用可以管理鎖,并加快鎖的獲得速度。必須用硬件實(shí)現(xiàn)鎖的獲取,從而為資源提供一種失效恢復(fù)機(jī)制;或者,也可以用一個(gè)加鎖處理器去鎖定資源。
根據(jù)應(yīng)用情況,系統(tǒng)必須支持可以完全虛擬化的共享資源,以及需要鎖定的共享資源。例如,一片SoC可以提供一個(gè)不共享的SATA端口,但只有一個(gè)處理器可以使用它,而資源的共享必須在軟件中實(shí)現(xiàn)。另外通過(guò)對(duì)可鎖定資源的支持,SoC中的核心仍能夠以一種對(duì)所有應(yīng)用透明的方式,共享資源,具有失效恢復(fù)的可靠性。
多核架構(gòu)的一個(gè)重要方面是易于集成。將多個(gè)處理器做到一只芯片上的能力,需要應(yīng)用軟件的直接遷移;否則,開(kāi)發(fā)人員還不如去設(shè)計(jì)一個(gè)新的系統(tǒng)。
在確定遷移到虛擬化架構(gòu)是否方便時(shí),必須考慮一系列因素。例如,架構(gòu)必須支持多操作系統(tǒng),因?yàn)楦鶕?jù)需要支持的應(yīng)用情況,多處理器經(jīng)常會(huì)在多個(gè)核心上使用多個(gè)操作系統(tǒng)。僅支持一個(gè)操作系統(tǒng)的多核架構(gòu)會(huì)使開(kāi)發(fā)人員被迫采用該操作系統(tǒng),然后將所有代碼移植到它上面。而支持多個(gè)操作系統(tǒng)時(shí),一片多核SoC就簡(jiǎn)化了代碼遷移工作。
另外,還需要考慮到QoS問(wèn)題,因?yàn)楦鱾€(gè)應(yīng)用有不同的帶寬需求。延時(shí)敏感型應(yīng)用(如視頻流)需要實(shí)時(shí)訪問(wèn)共享資源,而數(shù)據(jù)型的應(yīng)用(如內(nèi)容下載)可以容忍延遲,充分利用未使用的帶寬。為不同帶寬需求提供服務(wù)的能力使開(kāi)發(fā)人員能夠在相同的處理簇下整合異質(zhì)的應(yīng)用。
還要考慮架構(gòu)是否包含了透明的資源共享,因?yàn)橥该餍阅茏岄_(kāi)發(fā)人員同時(shí)遷移支持虛擬化的應(yīng)用以及不支持虛擬化的應(yīng)用。另外一個(gè)方面是去除軟件虛擬化層。雖然在做SoC之間的移植時(shí),某些代碼的重寫(xiě)是必要的,但對(duì)很多應(yīng)用來(lái)說(shuō),當(dāng)轉(zhuǎn)向采用硬件資源共享的SoC時(shí),大多數(shù)的變動(dòng)并不是修改軟件,而是消除軟件虛擬化層。去掉這一層可簡(jiǎn)化系統(tǒng)設(shè)計(jì)與查錯(cuò)工作,增加了系統(tǒng)的效率。對(duì)于制造商已取得虛擬化代碼許可的情況,去掉此層還可以降低系統(tǒng)成本。
還有一個(gè)要考慮的因素,即架構(gòu)是否整合了系統(tǒng)資源。當(dāng)一個(gè)系統(tǒng)采用多只芯片和操作系統(tǒng)時(shí),每個(gè)都有自己的存儲(chǔ)資源。通過(guò)資源的硬件管理,所有任務(wù)都可以共享對(duì)資源的訪問(wèn)。例如,一塊硬盤(pán)或一個(gè)以太網(wǎng)端口可以服務(wù)于整個(gè)系統(tǒng)(甚至跨各個(gè)SoC),而不是像傳統(tǒng)架構(gòu)那樣需要多塊硬盤(pán)。這種方案可節(jié)省設(shè)備成本,降低系統(tǒng)部件的總數(shù)。
SoC之間的通信也很重要。各個(gè)應(yīng)用可以通過(guò)一個(gè)大帶寬系統(tǒng)總線(如PCIe)共享資源,從而實(shí)現(xiàn)了SoC之間的共享。傳統(tǒng)架構(gòu)會(huì)給每個(gè)處理器分配一個(gè)固定帶寬,這種方法限制了各核之間的有效QoS管理,難以超額申請(qǐng)(圖4a)。采用基于硬件的虛擬化時(shí),即使在SoC之間,資源的分配也是靈活的(圖4b)。通過(guò)速率監(jiān)管、流量整形,以及隊(duì)列仲裁,反映并平衡著每個(gè)處理器與應(yīng)用的需求,從而能夠?qū)崿F(xiàn)全帶寬管理。同樣,這種方案還能夠獲得資源(如一塊硬盤(pán)或一個(gè)安全引擎)在整個(gè)系統(tǒng)上的有效共享,而不僅是一只處理器。
另外還應(yīng)考慮的是處理器之間的通信,因?yàn)槎嗵幚砥飨到y(tǒng)經(jīng)常要在各處理器之間傳輸相當(dāng)多的數(shù)據(jù)。隊(duì)列管理機(jī)制為SoC上各處理器之間以及多個(gè)SoC之間的通信提供了一種簡(jiǎn)單而有效的加速方法。
7 結(jié)語(yǔ)
今天的下一代SoC是復(fù)雜的多處理器環(huán)境,它必須共享片上資源,而不會(huì)帶來(lái)額外開(kāi)銷,降低系統(tǒng)的效率。隊(duì)列管理有助于芯片資源的虛擬化,通過(guò)一種可靠的機(jī)制,分配帶寬、隔離故障,以及促進(jìn)可靠的錯(cuò)誤恢復(fù),簡(jiǎn)化了資源共享工作。流量管理通過(guò)一種滿足不同應(yīng)用對(duì)延時(shí)和流量需求的方式,控制流量進(jìn)出隊(duì)列的速率,從而確保了系統(tǒng)公平地共享資源。通過(guò)硬件實(shí)現(xiàn)的虛擬化,開(kāi)發(fā)人員可以卸載隊(duì)列與流量管理工作,從而增強(qiáng)應(yīng)用的效率、獲得最大的資源吞吐量、減少延時(shí),增加系統(tǒng)的可靠性。
評(píng)論