任志明
(中國船舶重工集團(tuán)公司第723研究所,揚(yáng)州 225001)
?
基于DSPC6678多核平臺(tái)的實(shí)時(shí)任務(wù)調(diào)度架構(gòu)設(shè)計(jì)分析
任志明
(中國船舶重工集團(tuán)公司第723研究所,揚(yáng)州 225001)
分析了數(shù)字信號(hào)處理器(DSP)C6678的多核模式,設(shè)計(jì)了一種基于C6678高速多核DSP硬件平臺(tái)的實(shí)時(shí)任務(wù)調(diào)度軟件架構(gòu),實(shí)現(xiàn)了實(shí)時(shí)任務(wù)調(diào)度。通過實(shí)際測試,整體設(shè)計(jì)滿足了設(shè)計(jì)指標(biāo)。
實(shí)時(shí)任務(wù)調(diào)度;多核數(shù)字信號(hào)處理器;軟件架構(gòu)
在當(dāng)前艦載設(shè)備的控制系統(tǒng)中,任務(wù)調(diào)度模塊需要從外部接收大量導(dǎo)航數(shù)據(jù)、目標(biāo)更新參數(shù),并實(shí)時(shí)進(jìn)行坐標(biāo)轉(zhuǎn)換計(jì)算,輸出控制。單核主機(jī)已經(jīng)難以滿足既能快速處理大量網(wǎng)絡(luò)輸入輸出,又能實(shí)現(xiàn)穩(wěn)定的脈沖級(jí)的實(shí)時(shí)控制,因此需要選用合適的多核硬件平臺(tái),并研究相應(yīng)的系統(tǒng)控制軟件架構(gòu)。
艦載設(shè)備任務(wù)是以正北坐標(biāo)設(shè)置的,任務(wù)最后的執(zhí)行必須是以設(shè)備坐標(biāo)進(jìn)行控制,整個(gè)流程有大量的坐標(biāo)轉(zhuǎn)換計(jì)算,需要較高的浮點(diǎn)計(jì)算能力。實(shí)時(shí)任務(wù)調(diào)度運(yùn)行的模式是以指定的周期運(yùn)行,通過調(diào)度算法輸出每個(gè)周期需要執(zhí)行的動(dòng)作序列,然后依次執(zhí)行每個(gè)控制[1]。在大網(wǎng)絡(luò)數(shù)據(jù)流量的輸入下,需要能夠穩(wěn)定地輸出調(diào)度結(jié)果,實(shí)時(shí)地執(zhí)行調(diào)度結(jié)果,因此需要從物理上將網(wǎng)絡(luò)輸入和調(diào)度、執(zhí)行隔離,避免影響調(diào)度、執(zhí)行的實(shí)時(shí)性。
按照對(duì)時(shí)間的響應(yīng)要求劃分,整個(gè)處理流程可以分為3類:非實(shí)時(shí)性的,實(shí)時(shí)性的,強(qiáng)實(shí)時(shí)性的。如果從硬件上將3個(gè)層次的處理完全隔離,就可以保證在系統(tǒng)高數(shù)據(jù)流量輸入的情況下,不影響調(diào)度輸出的穩(wěn)定性和執(zhí)行的強(qiáng)實(shí)時(shí)性。系統(tǒng)功能分級(jí)示意圖如圖1所示。
圖1 軟件模塊分級(jí)示意圖
所以,系統(tǒng)的硬件平臺(tái)需要支持多核、高速度計(jì)算性能,同時(shí)需要設(shè)計(jì)匹配多核的軟件架構(gòu),實(shí)現(xiàn)穩(wěn)定的實(shí)時(shí)控制輸出。TI公司的C6678是一款高速多核DSP芯片,有8個(gè)核,而且TI也提供了配套的多核軟件開發(fā)包[2]。
設(shè)計(jì)目標(biāo)是從網(wǎng)絡(luò)接收100次/s的導(dǎo)航數(shù)據(jù),500次/s目標(biāo)更新的情況下,調(diào)度模塊實(shí)現(xiàn)小于1ms精度的控制輸出,在執(zhí)行模塊實(shí)現(xiàn)精度為2μs的實(shí)時(shí)控制。
C6678是TI公司的多核高速數(shù)字信號(hào)處理器,支持高速定點(diǎn)和浮點(diǎn)計(jì)算,每個(gè)核的主頻高達(dá)1GHz,它是為了滿足高速的計(jì)算性能和低功耗的要求,以多核實(shí)現(xiàn)系統(tǒng)的性能提升,同時(shí)保持低功耗。每個(gè)核可以運(yùn)行獨(dú)立的操作系統(tǒng),有獨(dú)立的L2SRAM,可以通過GPIO響應(yīng)外部硬件中斷,通過EMIF和SRIO與外部設(shè)備進(jìn)行高速通信[3]。核之間通過消息隊(duì)列和共享內(nèi)存進(jìn)行同步、數(shù)據(jù)共享。
C6678計(jì)算能力強(qiáng),多核并行同時(shí)處理,為軟件設(shè)計(jì)提供了強(qiáng)大的硬件平臺(tái),為軟件的架構(gòu)提供了極大的靈活性,但是軟件設(shè)計(jì)難度較大,測試比較麻煩。
TI為C6678提供了實(shí)時(shí)操作系統(tǒng)Sys/Bios,具備操作系統(tǒng)的任務(wù)調(diào)度、中斷管理、同步模塊、定時(shí)器服務(wù)、內(nèi)存管理、硬件抽象層管理、輸入輸出管理等主要功能,而且提供了集成開發(fā)調(diào)試工具CCS,能夠在開發(fā)過程中查看任務(wù)和各個(gè)對(duì)象的狀態(tài)[2]。和多核計(jì)算相關(guān)的軟件組件主要包括IPC、MCSDK、NDK、PDK和OpenMP。
IPC提供了處理器多核管理組件、共享區(qū)域管理組件、消息隊(duì)列管理組件、內(nèi)存堆管理組件,如果使用多核必須使用IPC提供的組件進(jìn)行配置和調(diào)度[3]。MCSDK提供了芯片支持庫、驅(qū)動(dòng)、平臺(tái)配置工具、核間通信模塊[2]。NDK是TI公司的網(wǎng)絡(luò)通信組件模塊,實(shí)現(xiàn)了TCP/IP協(xié)議[2]。PDK是TI公司提供的平臺(tái)配置開發(fā)包,實(shí)現(xiàn)了CSL庫和硬件驅(qū)動(dòng)程序、平臺(tái)庫。OpenMP是TI對(duì)實(shí)現(xiàn)并行計(jì)算的軟件支持包。
設(shè)計(jì)實(shí)時(shí)任務(wù)調(diào)度的硬件平臺(tái)框圖如圖2所示。
圖2 硬件平臺(tái)框圖
C6678多核的使用模式主要有3類:主從模式、數(shù)據(jù)流模式、OpenMP模式[2]。
3.1 主從模式
主從模式中有一個(gè)核作為主控,其他核只負(fù)責(zé)執(zhí)行分配的任務(wù),集中控制分布執(zhí)行。主核負(fù)責(zé)調(diào)度分配任務(wù),將數(shù)據(jù)分發(fā)給從核,主核使用高級(jí)操作系統(tǒng)linux運(yùn)行復(fù)雜的邏輯控制、任務(wù)監(jiān)控。此種模式適用于有很多小的獨(dú)立任務(wù)的應(yīng)用,每個(gè)任務(wù)可以獨(dú)立在單核上運(yùn)行,任務(wù)之間不需要進(jìn)行交互、同步、數(shù)據(jù)共享。對(duì)于電信協(xié)議的多路解析,每一鏈路對(duì)應(yīng)一個(gè)獨(dú)立的任務(wù),可以同時(shí)將多個(gè)任務(wù)分布到多個(gè)核上,各自獨(dú)立運(yùn)行。主從模式示意圖如圖3所示。
圖3 主從模式示意圖
主核負(fù)責(zé)管理空閑資源以均衡運(yùn)行,不至于有過載或過閑的核。任務(wù)分配通過消息隊(duì)列傳輸,從核一直有一個(gè)獨(dú)立的任務(wù)處于等待接收消息的狀態(tài),在消息沒有到來之前處于掛起狀態(tài)。
此種模式的難點(diǎn)在于如何實(shí)時(shí)均衡地分配任務(wù)和監(jiān)控執(zhí)行狀態(tài),因?yàn)槊總€(gè)核運(yùn)行的任務(wù)不同,而且執(zhí)行順序是隨機(jī)的,任務(wù)的需求吞吐可能相差很大,所以需要不斷地進(jìn)行任務(wù)的動(dòng)態(tài)分配與資源調(diào)整。
3.2 數(shù)據(jù)流模式
數(shù)據(jù)流模式代表的是一種分段流水式的控制和執(zhí)行,每個(gè)核負(fù)責(zé)處理過程的一個(gè)步驟,然后將處理結(jié)果傳遞到下一個(gè)核進(jìn)行后續(xù)處理,各個(gè)核相互協(xié)同,共同完成整個(gè)處理過程。一般的會(huì)有一個(gè)核負(fù)責(zé)從外部接收輸入的指令或者數(shù)據(jù),可以從網(wǎng)絡(luò)或者現(xiàn)場可編程門陣列(FPGA)接收外部輸入,整個(gè)處理流程是數(shù)據(jù)流驅(qū)動(dòng)的。一個(gè)核處理的輸出是另外一個(gè)核的輸入,適用于大型、復(fù)雜、相互依賴、不適合單核進(jìn)行處理的任務(wù),或者是需要實(shí)現(xiàn)高速外部輸入的情況下、能夠?qū)崟r(shí)穩(wěn)定輸出控制的應(yīng)用,每個(gè)核各自獨(dú)立地運(yùn)行實(shí)時(shí)操作系統(tǒng)。
此種模式的難點(diǎn)在于如何將一個(gè)復(fù)雜的任務(wù)分解到多個(gè)核上,形成一個(gè)處理的流水,同時(shí)設(shè)計(jì)核之間高速的數(shù)據(jù)通信模式,保證數(shù)據(jù)流輸出的穩(wěn)定性,形成數(shù)據(jù)處理流水線。數(shù)據(jù)流模式示意圖如圖4所示。
圖4 數(shù)據(jù)流模式示意圖
3.3 OpenMP模式
OpenMP模式是一套在對(duì)稱多處理(SMP)模式下開發(fā)多任務(wù)應(yīng)用的接口,由編譯指令、庫以及環(huán)境變量構(gòu)成。一般是在主程序中通過編譯指令,指定需要運(yùn)行時(shí)用的核和執(zhí)行體,執(zhí)行時(shí)展開到各個(gè)核上并行運(yùn)行。
這種模式和主從模式有點(diǎn)類似,但是使用比主從模式簡單,只需要通過編譯指令就可以實(shí)現(xiàn),不需要對(duì)任務(wù)進(jìn)行動(dòng)態(tài)的監(jiān)控調(diào)整。每個(gè)核上運(yùn)行的代碼可以是相同的,也可以是不同的。OpenMP模式示意圖如圖5所示。
每個(gè)核執(zhí)行相同代碼的OpenMP示例:
omp_set_num_thread(4);
#pragmaompparallel
{
ProcessData();
}
每個(gè)核執(zhí)行不同代碼的OpenMP示例:
#pragmaompparallel
#pragmaompsections
{
#pragmaompsection
Process1();
#pragmaompsection
Process2();
}
圖5 OpenMP模式示意圖
此種模式一般用于計(jì)算量較大、數(shù)據(jù)能夠分段并行處理的場合,典型的應(yīng)用有圖像數(shù)據(jù)處理、雷達(dá)快速傅里葉變換(FFT)計(jì)算等。
軟件架構(gòu)必須匹配于應(yīng)用模型,相應(yīng)地也分為3個(gè)部分:非實(shí)時(shí)部分、實(shí)時(shí)部分、強(qiáng)實(shí)時(shí)部分,分別對(duì)應(yīng)于接口、調(diào)度和執(zhí)行,3個(gè)部分分別運(yùn)行于3個(gè)核上,相互獨(dú)立,通過消息隊(duì)列和直接共享內(nèi)存?zhèn)鬟f、控制數(shù)據(jù)。軟件架構(gòu)圖如圖6所示。
多核模式中的數(shù)據(jù)流模式比較符合此種應(yīng)用場景,因此選用了多核模式中的數(shù)據(jù)流模式作為實(shí)時(shí)任務(wù)調(diào)度的控制模式。
通過物理隔離,將不同時(shí)間響應(yīng)要求的功能模塊分布到不同的核上,避免了大流量的網(wǎng)絡(luò)輸入對(duì)調(diào)度和執(zhí)行的影響。
圖6 軟件架構(gòu)圖
在核0上接收到導(dǎo)航數(shù)據(jù)后,寫入共享內(nèi)存,核1與核2在需要時(shí),直接訪問共享內(nèi)存。在核1上,實(shí)時(shí)任務(wù)調(diào)度從核內(nèi)的任務(wù)隊(duì)列空間讀取需要調(diào)度的任務(wù),輸出每個(gè)調(diào)度周期的執(zhí)行波位序列。在核2上接收到執(zhí)行參數(shù)后,觸發(fā)實(shí)時(shí)任務(wù)執(zhí)行,從執(zhí)行波位序列中讀取執(zhí)行參數(shù),實(shí)時(shí)任務(wù)執(zhí)行通知FPGA控制外部,當(dāng)?shù)?個(gè)結(jié)束后,F(xiàn)PGA觸發(fā)實(shí)時(shí)任務(wù)執(zhí)行繼續(xù)讀取第2個(gè),直到執(zhí)行序列全部處理結(jié)束。圖6中核2的框圖內(nèi)部使用粗實(shí)線表示與FPGA的硬中斷實(shí)時(shí)交互控制。
基于以上的分析,設(shè)計(jì)了實(shí)時(shí)任務(wù)調(diào)度系統(tǒng)。應(yīng)用分為3個(gè)部分,每個(gè)部分為一個(gè)獨(dú)立的工程,分布在C6678的3個(gè)核上(核0、核1和核2)。
在核0上進(jìn)行接口和數(shù)據(jù)預(yù)處理,處理非實(shí)時(shí)數(shù)據(jù),連接非實(shí)時(shí)的對(duì)外接口;在核1上運(yùn)行調(diào)度模塊,以小于1ms的誤差輸出調(diào)度的執(zhí)行序列;在核2上運(yùn)行強(qiáng)實(shí)時(shí)執(zhí)行模塊,將一個(gè)調(diào)度周期的執(zhí)行序列在FPGA的實(shí)時(shí)中斷驅(qū)動(dòng)下,以微秒級(jí)別的控制精度輸出。
給系統(tǒng)輸入導(dǎo)航數(shù)據(jù),模擬目標(biāo)更新數(shù)據(jù),然后啟動(dòng)一個(gè)控制任務(wù),經(jīng)過實(shí)時(shí)任務(wù)調(diào)度輸出調(diào)度結(jié)果,每個(gè)調(diào)度結(jié)果代表一組連續(xù)執(zhí)行的脈沖,測量其運(yùn)行參數(shù),進(jìn)行驗(yàn)證測試。
6.1 測試方法
通過網(wǎng)絡(luò)以100次/s的速度發(fā)送導(dǎo)航數(shù)據(jù),按照500次/s的速度發(fā)送更新參數(shù),然后啟動(dòng)運(yùn)行1個(gè)控制任務(wù),工作參數(shù)是1組16個(gè)脈沖,每個(gè)脈沖的執(zhí)行時(shí)間長度為1 000μs。通過計(jì)算相鄰的調(diào)度結(jié)果輸出的時(shí)間間隔,可以評(píng)估調(diào)度輸出的穩(wěn)定性;通過計(jì)算1組脈沖連續(xù)輸出的時(shí)間間隔,可以評(píng)估脈沖的控制精度。在調(diào)度輸出的節(jié)點(diǎn)和任務(wù)執(zhí)行的節(jié)點(diǎn)錄取時(shí)間戳信息,然后通過網(wǎng)絡(luò)輸出,在外部進(jìn)行錄取和統(tǒng)計(jì)分析,最后進(jìn)行整體控制精度評(píng)估。
調(diào)度結(jié)果的輸出間隔應(yīng)該是10ms的整數(shù)倍,脈沖執(zhí)行輸出的時(shí)間間隔應(yīng)該是1 000μs,調(diào)度間隔與10ms整數(shù)倍的偏差小于1ms,脈沖執(zhí)行的偏差小于2μs。
6.2 測試結(jié)果統(tǒng)計(jì)
在設(shè)計(jì)中,在DSP和FPGA之間采用了數(shù)據(jù)流水線設(shè)計(jì),在1組脈沖中,第1個(gè)脈沖執(zhí)行間隔實(shí)際是參數(shù)的計(jì)算時(shí)間,并不是執(zhí)行間隔,最后一個(gè)脈沖的時(shí)間間隔是下一個(gè)調(diào)度周期的脈沖的時(shí)間間隔,所以在數(shù)據(jù)處理的過程中需要去掉第一個(gè)脈沖間隔和最后一個(gè)脈沖間隔。
從錄取的輸出參數(shù)中總共提取了1 936 987組脈沖執(zhí)行參數(shù)、269 200組調(diào)度間隔參數(shù)。脈沖執(zhí)行參數(shù)偏差超過1μs的有22個(gè),最大偏差1.159μs,其余的偏差均小于1μs。從錄取中共提取了269 200組數(shù)據(jù),統(tǒng)計(jì)出調(diào)度的最大偏差為89.7μs,小于0.1ms。
本文通過分析艦載控制系統(tǒng)實(shí)時(shí)任務(wù)調(diào)度的過程,采用高速多核DSP平臺(tái),通過分層設(shè)計(jì)將不同時(shí)間響應(yīng)要求的邏輯處理進(jìn)行物理隔離,設(shè)計(jì)了實(shí)時(shí)任務(wù)調(diào)度的多核軟件架構(gòu)。從實(shí)際的測試數(shù)據(jù)可以看出,在高速網(wǎng)絡(luò)數(shù)據(jù)流輸入的情況下,調(diào)度結(jié)果的輸出是穩(wěn)定的,調(diào)度結(jié)果的執(zhí)行是實(shí)時(shí)的,實(shí)際的偏差在設(shè)計(jì)范圍內(nèi),實(shí)現(xiàn)了實(shí)時(shí)任務(wù)調(diào)度和實(shí)時(shí)任務(wù)執(zhí)行。
[1] 胡衛(wèi)東,郁文賢,盧建斌,王壯.相控陣?yán)走_(dá)資源管理的理論與方法[M].北京:國防工業(yè)出版社,2010.
[2] 董言治,婁樹理,劉松濤.TMS320C6000系列DSP系統(tǒng)結(jié)構(gòu)原理與應(yīng)用教程[M].北京:清華大學(xué)出版社,2014.
[3] 牛金海.TIC66X多核軟件開發(fā)技術(shù)[M].上海:上海交通大學(xué)出版社,2015.
DesignandAnalysisofReal-timeTaskSchedulingArchitectureBasedonDSPC6678Multi-corePlatform
RENZhi-ming
(The723InstituteofCSIC,Yangzhou225001,China)
Thispaperanalyzesthemulti-coremodeofdigitalsignalprocessor(DSP)C6678,designsareal-timetaskschedulingsoftwarearchitecturebasedonC6678high-speedmulti-coreDSPhardwareplatform,implementsreal-timetaskscheduling.Thetotaldesignissatisfiedforthedesignindexesthroughactualtest.
real-timetaskscheduling;multi-coredigitalsignalprocessor;softwarearchitecture
2015-05-03
TN
A
CN32-1413(2016)05-0090-04
10.16426/j.cnki.jcdzdk.2016.05.023