設計大吞吐量、實時SoC系統(tǒng)的最佳實踐
現(xiàn)代SoC軟件通常包括多種應用,從汽車發(fā)動機控制等硬件實時應用,到HD視頻流等大吞吐量應用。隨著現(xiàn)代SoC向大吞吐量系統(tǒng)的快速發(fā)展,處理器內(nèi)核數(shù)量不斷增加,寬帶互聯(lián)也越來越多,導致混合系統(tǒng)設計成為挑戰(zhàn)。在這類系統(tǒng)中實現(xiàn)硬件實時—μs量級響應,抖動不到1μs,需要仔細的綜合考慮分析和系統(tǒng)劃分。隨著SoC的復雜度越來越高,將來的驗證策略也必須納入考慮范圍。
這類系統(tǒng)設計主要有三種方法—非對稱多處理(AMP)、管理程序,以及支持內(nèi)核隔離的對稱多處理(SMP)(主要的對比見表1),系統(tǒng)設計人員可以從中選擇一種方法來優(yōu)化混合SoC系統(tǒng)。
非對稱多處理
AMP實際是基于物理上不同的處理器內(nèi)核的多操作系統(tǒng)(OS)端口。一個例子是,在第一個內(nèi)核上運行專門用于處理實時任務的裸金屬OS,在其他內(nèi)核上運行嵌入式Linux等完整的OS。很多時候,最初將OS導入到內(nèi)核中非常簡單,但是,在啟動代碼和資源管理上很容易出錯,例如,存儲器、高速緩存和外設等。當多個OS訪問相同的外設時,行為會是不確定的,調(diào)試起來可能非常耗時。通常要求仔細的保護ARM TrustZone等體系結(jié)構(gòu)不受影響。
更復雜的是,在OS之間傳遞消息要求存儲器共享,一起采用其他保護手段進行管理。不同的OS之間通常不會共享高速緩存。要通過非高速緩存區(qū)來傳遞消息,對于總體性能而言,增加了延時和抖動。從可擴展角度看,隨著內(nèi)核數(shù)量的增加,需要進行多次重新導入,使軟件體系結(jié)構(gòu)較差。
監(jiān)控程序
管理程序是直接在硬件上運行的底層軟件,在其上可管理多個獨立的OS。最初的導入與AMP相似,而其優(yōu)勢在于管理程序隱藏了資源管理和消息傳遞中不重要的細節(jié)。缺點是由于吞吐量和實時性能要求,增加了額外的軟件層,導致出現(xiàn)性能開銷。
對稱多處理
支持內(nèi)核隔離的SMP在多個內(nèi)核上運行一個OS,支持在內(nèi)部劃分內(nèi)核。一個例子是讓SMP OS在第一個內(nèi)核上分配實時應用程序,在其他的內(nèi)核上運行非實時應用程序。隨著內(nèi)核數(shù)量的增加,SMP OS可以設計無縫導入,因此,這一方法的可擴展性比較好。所有內(nèi)核都是由一個OS管理的,因此,內(nèi)核之間可以在L1數(shù)據(jù)高速緩存級上傳遞消息,通信速度更快,抖動 更低。
通過內(nèi)核隔離,可以保留一個內(nèi)核用于硬件實時應用,以屏蔽其他大吞吐量內(nèi)核的影響,保持了低抖動和實時數(shù)據(jù)響應。這樣,設計人員可以考慮使用哪一個OS,而不用重新設計容易出錯的底層軟件來管理多個OS。因此,這一般是很好的軟件體系結(jié)構(gòu)決定。如果從多個OS開始,最初的導入會需要一些付出。但是,從一個SMP體系結(jié)構(gòu)開始會省很多事。
通過SMP優(yōu)化大吞吐量、實時SoC
基于對各種方法的分析,支持內(nèi)核隔離的SMP是最好的體系結(jié)構(gòu),優(yōu)化了大吞吐量、實時SoC系統(tǒng)。我們考慮的體系結(jié)構(gòu)與圖3的系統(tǒng)相似,其中,I/O數(shù)據(jù)輸入到SoC中,處理器對其進行計算,送回至I/O,滿足低抖動和低延時實時響應要求。此外,SoC包括了多個內(nèi)核,可同時運行其他吞吐量較大的應用程序。
首先,需要理解一個實時響應(循環(huán)時間)由哪些組成:
1.從一個I/O,將新數(shù)據(jù)傳送至系統(tǒng)存儲器(DMA)。
2.處理器探測系統(tǒng)存儲器中的新數(shù)據(jù) (內(nèi)核隔離)。
3.將數(shù)據(jù)復制到私有存儲器(memcpy)。
4.對數(shù)據(jù)進行計算。
5.將結(jié)果復制回系統(tǒng)存儲器(memcpy)。
6.將結(jié)果傳送回I/O(DMA)。
抖動和延時是6個步驟的累積,因此,需要優(yōu)化每一個步驟。采用支持內(nèi)核隔離的VxWorks等RTOS,可以在納秒范圍內(nèi)完成輪詢/中斷響應(步驟2)。數(shù)據(jù)計算也是專用的,具有很好的可預測性(步驟4)。因此,我們的重點是綜合考慮直接存儲器訪問(DMA)和memcpy(步驟1/3/5/6)。主要有兩種方法來傳送數(shù)據(jù):高速緩存連續(xù)傳送,以及不支持高速緩沖連續(xù)的傳送。這兩種方法在DMA和memcpy上的響應有很大的不同。如圖1所示,雖然高速緩存連續(xù)傳送(使用ARM高速緩存連續(xù)端口(ACP))導致DMA需要較長的通路,但處理器只需要訪問L1高速緩存就可以獲得所傳送的數(shù)據(jù)。因此,使用高速緩存連續(xù)傳送的memcpy時間要少很多,但是DMA性能會有些劣化。對于設計人員而言,由于是直接高速緩存訪問,因此,高速緩存連續(xù)傳送的延時更短,抖動 更小。
案例研究:SoC設計最佳實踐
可以使用Cyclone V SoC FPGA開發(fā)套件,通過參考設計來演示一個完整的系統(tǒng)。器件在一個芯片中包括了一個雙核32ARM Cortex-A9內(nèi)核子系統(tǒng)(HPS)和一個28nm FPGA。下面總結(jié)了硬件和軟件體系結(jié)構(gòu),如圖2所示。
硬件體系結(jié)構(gòu)
·兩個DMA,將數(shù)據(jù)從FPGA I/O傳送至ARM處理器,反之亦然。
·兩個DMA都連接至ACP,實現(xiàn)數(shù)據(jù)在ARM處理器高速緩存的直接傳送。
·實時控制單元IP,以盡可能快的方式啟動ARM處理器和DMA引擎之間的消息傳遞。
·抖動監(jiān)視器直接探測DMA信號,采集實時性能和抖動,精度在±6.7ns以內(nèi)。
軟件體系結(jié)構(gòu)
·在雙核ARM處理器上的VxWorks實時OS運行在SMP模式下。
·內(nèi)核隔離,用于在第一個內(nèi)核上分配實時應用程序,在第二個內(nèi)核上分配其他的非 實時應用程序。
·實時應用程序連續(xù)從I/O讀取數(shù)據(jù),計算,然后將結(jié)果發(fā)送回I/O。
·當連續(xù)運行FTP傳輸并對數(shù)據(jù)加密時,非實時應用程序加重了對ARM內(nèi)核和其它 I/O性能的要求。
結(jié)果
在長度不同的數(shù)據(jù)上運行實驗,長度從32 字節(jié)直至2,048字節(jié)。為了采集循環(huán)時間的直方圖,來分析抖動(最大和最小循環(huán)時間之間的不同),每一長度都要運行數(shù)百萬次。如圖3所示,即使是在第二個內(nèi)核上運行數(shù)據(jù)流負載很大的FTP,經(jīng)過數(shù)百萬次的測試,延時也在微秒級,而抖動不到300ps。長度不同,會有些抖動擺動,但是可控制在200ps內(nèi),并不明顯。
相同的FTP應用程序也運行在VxWorks SMP上,使用了兩個內(nèi)核,速度提高了近2倍。因此,這一方法并沒有劣化吞吐量,是吞吐量和硬件實時應用程序的折中選擇。但是,由于對內(nèi)核進行了硬件劃分,不能夠靈活的增加內(nèi)核數(shù),因此,AMP解決方案也同樣有一些劣化。
結(jié)論
設計一個支持大吞吐量和實時應用程序的均衡SoC系統(tǒng)需要進行很多綜合考慮,例如:
·DMA數(shù)據(jù)傳送。
·連續(xù)高速緩存。
·處理器內(nèi)核與DMA之間的消息傳遞。
·OS劃分。
·軟件能夠隨著處理器內(nèi)核數(shù)量的增加而進行擴展。
在此次實驗中,我們展示了一個“最佳實踐”系統(tǒng)設計,它使用了支持內(nèi)核隔離和高速緩存連續(xù)傳送的SMP,實現(xiàn)了低延時、低抖動實時性能,同時軟件能夠擴展應用到未來幾代的SoC產(chǎn)品中。