朱 強(qiáng)
(中國(guó)航空工業(yè)集團(tuán)公司洛陽(yáng)電光設(shè)備研究所,河南 洛陽(yáng) 471000)
當(dāng)前,隨著戰(zhàn)斗機(jī)作戰(zhàn)任務(wù)的復(fù)雜度越來(lái)越高,對(duì)戰(zhàn)斗機(jī)的航電系統(tǒng)要求也越來(lái)越高,綜合核心處理機(jī)是航電任務(wù)系統(tǒng)核心組成部分,任務(wù)系統(tǒng)的大部分應(yīng)用程序都駐留在綜合核心處理機(jī)中,比如,火控管理、戰(zhàn)術(shù)決策、導(dǎo)航解算、傳感器管理、數(shù)據(jù)融合、顯示控制等。這些應(yīng)用對(duì)綜合核心處理機(jī)的硬件要求也越來(lái)越高。隨著電子技術(shù)的發(fā)展,單純提高處理器的主頻的空間越來(lái)越小,而目前多核是處理器發(fā)展的主要方向。在航空電子系統(tǒng)中,多核處理器也開(kāi)始在各種型號(hào)處理器中使用。飛思卡爾推出的T2080處理器是四核八線程高性能處理器,每個(gè)核的最高主頻可達(dá)1.8 GHz,而風(fēng)河公司推出的vxWorks653 3.0多核操作系統(tǒng)也支持T2080處理器。在多核系統(tǒng)中,其應(yīng)用程序的部署方式以及驅(qū)動(dòng)開(kāi)發(fā)等與在單核系統(tǒng)中不同。在某型號(hào)綜合核心處理機(jī)驗(yàn)證系統(tǒng)中高性能數(shù)據(jù)處理單元以T2080多核處理器為硬件平臺(tái),以vxWorks653 3.0為軟件平臺(tái),負(fù)責(zé)運(yùn)行各種任務(wù)系統(tǒng)的應(yīng)用程序。圖1是高性能數(shù)據(jù)處理模塊組成框圖。
圖1 高性能數(shù)據(jù)處理模塊組成框圖
在高性能數(shù)據(jù)處理單元中,多核通信中間件運(yùn)行在核0分區(qū)操作系統(tǒng)中,核0上的分區(qū)還運(yùn)行FC驅(qū)動(dòng)程序。多核通信中間件主要完成數(shù)據(jù)的轉(zhuǎn)發(fā)工作,即將應(yīng)用程序需要發(fā)送的數(shù)據(jù)通過(guò)端口PORT發(fā)送到中間件,中間件將數(shù)據(jù)轉(zhuǎn)發(fā)到FC總線,或者中間件將數(shù)據(jù)直接轉(zhuǎn)發(fā)到其他分區(qū)應(yīng)用中。同時(shí)中間件接收FC總線的數(shù)據(jù)或者其他分區(qū)的數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)發(fā)到對(duì)應(yīng)的分區(qū)應(yīng)用中。此外還具備消息組播功能,即收到消息后,根據(jù)配置轉(zhuǎn)發(fā)到多個(gè)端口中[1]。
在多核通信中間件中,主要包含三個(gè)模塊,分別是應(yīng)用程序發(fā)送模塊、應(yīng)用程序接收模塊、轉(zhuǎn)換算法模塊。
(1)應(yīng)用程序發(fā)送模塊:完成從端口中接收分區(qū)應(yīng)用發(fā)過(guò)來(lái)的數(shù)據(jù),根據(jù)配置,將數(shù)據(jù)轉(zhuǎn)發(fā)到FC總線或者將數(shù)據(jù)轉(zhuǎn)發(fā)到對(duì)應(yīng)的分區(qū)應(yīng)用中。
(2)應(yīng)用程序接收模塊:根據(jù)配置,從FC驅(qū)動(dòng)中接收數(shù)據(jù)或者從分區(qū)應(yīng)用中接收數(shù)據(jù),然后將數(shù)據(jù)單發(fā)或者以組播方式發(fā)送到對(duì)應(yīng)的接收分區(qū)應(yīng)用中。
(3)轉(zhuǎn)換算法模塊:多核通信中間件在初始化時(shí),需要完成配置表到轉(zhuǎn)發(fā)表的轉(zhuǎn)換,涉及的兩個(gè)轉(zhuǎn)換分別是,組播轉(zhuǎn)換和核間通信轉(zhuǎn)發(fā)時(shí)需要的索引轉(zhuǎn)換。
多核通信中間件在運(yùn)行時(shí)先初始化發(fā)送和接收的配置表數(shù)據(jù)結(jié)構(gòu)、創(chuàng)建端口、轉(zhuǎn)換成發(fā)送和接收轉(zhuǎn)發(fā)表,然后創(chuàng)建應(yīng)用程序接收任務(wù)和應(yīng)用程序發(fā)送任務(wù),兩個(gè)任務(wù)會(huì)讀取轉(zhuǎn)發(fā)表的信息進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。
圖2 多核通信中間件架構(gòu)圖
多核通信中間件在初始化時(shí)需要將配置表轉(zhuǎn)換成轉(zhuǎn)發(fā)表,配置表是多核通信中間件的輸入,包括發(fā)送配置表和接收配置表。轉(zhuǎn)發(fā)表是多核通信中間件將配置表轉(zhuǎn)換后形成的,在進(jìn)行多核通信轉(zhuǎn)發(fā)時(shí)用到的信息都在轉(zhuǎn)發(fā)表中。轉(zhuǎn)換算法分為組播算法和內(nèi)部轉(zhuǎn)發(fā)算法[2]。
發(fā)送和接收配置表的信息主要包括消息ID、消息類型、端口名稱、消息大小、最大消息數(shù)量、以及內(nèi)部和外部標(biāo)志等。發(fā)送和接收配置表使用相同的結(jié)構(gòu)體,結(jié)構(gòu)體成員信息如下。
發(fā)送轉(zhuǎn)發(fā)表的信息主要包括消息ID、消息類型、消息大小、消息數(shù)量、發(fā)送端口portID、核間通信時(shí)對(duì)應(yīng)的接收轉(zhuǎn)發(fā)表的索引、內(nèi)部外部標(biāo)識(shí)等。發(fā)送轉(zhuǎn)發(fā)表的結(jié)構(gòu)體成員信息如下。
接收轉(zhuǎn)發(fā)表的信息主要包括消息ID、消息類型、消息大小、消息數(shù)量、接收端口portID數(shù)組、接收端口PortID數(shù)量、核間通信時(shí)對(duì)應(yīng)的發(fā)送轉(zhuǎn)發(fā)表的索引、內(nèi)部外部標(biāo)識(shí)等。接收轉(zhuǎn)發(fā)表的結(jié)構(gòu)體成員信息如下。
發(fā)送轉(zhuǎn)發(fā)表與接收轉(zhuǎn)發(fā)表不同的地方在于接收轉(zhuǎn)發(fā)表的端口portID是數(shù)組。當(dāng)多核通信中間件收到FC總線消息或者分區(qū)應(yīng)用的消息后,將消息組播到對(duì)應(yīng)分區(qū),而接收端口的portID數(shù)組則保存了組播時(shí)需要的端口信息,進(jìn)行組播時(shí)遍歷這個(gè)數(shù)組,逐條轉(zhuǎn)發(fā)。
組播算法的核心思想是將接收配置表的信息進(jìn)行重組后轉(zhuǎn)化成接收轉(zhuǎn)發(fā)表,當(dāng)多核中間件進(jìn)行轉(zhuǎn)發(fā)時(shí),讀取轉(zhuǎn)發(fā)表的信息就可以完成組播消息轉(zhuǎn)發(fā)。配置表和轉(zhuǎn)發(fā)表的轉(zhuǎn)換是遍歷配置表里的所有消息ID,當(dāng)配置表中有多個(gè)相同的消息ID時(shí),代表這些相同的消息ID為組播消息。轉(zhuǎn)發(fā)表過(guò)濾并記錄這些相同的消息ID,并保存在數(shù)組中,在進(jìn)行轉(zhuǎn)發(fā)時(shí),遍歷這個(gè)數(shù)組就可以逐條轉(zhuǎn)發(fā)[3]。
假設(shè)接收配置表為集合T={T[0],T[1],T[2],T[3]…},假設(shè)接收轉(zhuǎn)發(fā)表集合S={S[0],S[1],S[2],S[3]…}
(1)初始狀態(tài),轉(zhuǎn)發(fā)表接收集合S={0}為空,配置表接收集合T={T1,T2,T3,T4…}。接收轉(zhuǎn)發(fā)表結(jié)構(gòu)體創(chuàng)建時(shí)被初始化為0。
(2)遍歷接收配置表的每一項(xiàng),并和接收轉(zhuǎn)發(fā)表的每一項(xiàng)的消息ID進(jìn)行比對(duì)。
(3)如果接收配置表的消息ID和接收轉(zhuǎn)發(fā)表的消息ID不同,則將接收配置表的消息ID等信息復(fù)制到接收轉(zhuǎn)發(fā)表的當(dāng)前最后一項(xiàng)中。
(4)如果接受配置表的消息ID和接收轉(zhuǎn)發(fā)表的消息ID相同,則說(shuō)明有組播消息,因?yàn)樵诮M播消息中多個(gè)接收的消息ID相同,在轉(zhuǎn)發(fā)表中需要將這些相同的消息ID進(jìn)行記錄,相同消息的ID不再在轉(zhuǎn)發(fā)表中占用新的結(jié)構(gòu)體空間,而是將這些相同的ID放到一個(gè)結(jié)構(gòu)體空間中,只需要記錄其portID即可,這樣在進(jìn)行轉(zhuǎn)發(fā)過(guò)的過(guò)程中,收到消息后,遍歷所有對(duì)應(yīng)的發(fā)送PortID即可。
由于vxWorks653 3.0提供了基于port的核間通信機(jī)制,因此分區(qū)之間的應(yīng)用即可以通過(guò)FC總線進(jìn)行通信,也可以不經(jīng)過(guò)FC總線,中間件收到分區(qū)的消息后,直接轉(zhuǎn)發(fā)到對(duì)應(yīng)的接收分區(qū)。這樣可以減輕FC總線通信壓力。
集合T代表轉(zhuǎn)發(fā)表中發(fā)送信息,包括發(fā)送消息msgID、發(fā)送端口portID、內(nèi)部轉(zhuǎn)發(fā)標(biāo)志、內(nèi)部轉(zhuǎn)發(fā)對(duì)應(yīng)的接收索引等。集合R代表轉(zhuǎn)發(fā)表中的接收信息,包括接收消息msgID、接收端口portID、內(nèi)部轉(zhuǎn)發(fā)標(biāo)志、內(nèi)部轉(zhuǎn)發(fā)對(duì)應(yīng)的發(fā)送索引等。
遍歷轉(zhuǎn)發(fā)表中接收信息的每一項(xiàng),判斷其內(nèi)外轉(zhuǎn)發(fā)標(biāo)志,如果是外部,即標(biāo)志為EXTRAL,代表消息從FC總線接收,此時(shí)內(nèi)部轉(zhuǎn)發(fā)對(duì)應(yīng)的發(fā)送索引設(shè)置為-1。
如果是內(nèi)部,即標(biāo)志為INTERNAL,代表消息直接從分區(qū)中接收。遍歷轉(zhuǎn)發(fā)表中的發(fā)送信息的每一項(xiàng),如果發(fā)送信息中的消息msgID和接收信息中的消息msgID相同,則發(fā)送信息中的結(jié)構(gòu)體記錄接收信息的索引,同樣接收信息的結(jié)構(gòu)體記錄發(fā)送信息的索引。
應(yīng)用程序接收任務(wù)負(fù)責(zé)從FC總線接收數(shù)據(jù)或者從其他分區(qū)中接收數(shù)據(jù)然后轉(zhuǎn)發(fā)到對(duì)應(yīng)的分區(qū)應(yīng)用中。
圖3 應(yīng)用程序接收任務(wù)流程圖
(1)遍歷接收轉(zhuǎn)發(fā)表中的每條信息,判斷內(nèi)部外部標(biāo)志。
(2)如果是外部標(biāo)志,則說(shuō)明任務(wù)從FC總線接收數(shù)據(jù),然后再組播到對(duì)應(yīng)的分區(qū)應(yīng)用中。其中單播是組播的一種情況,只是需要轉(zhuǎn)發(fā)的消息個(gè)數(shù)為1,這樣就可以都統(tǒng)一按照組播轉(zhuǎn)發(fā)。
(3)如果是內(nèi)部標(biāo)志,則說(shuō)明任務(wù)是從其他分區(qū)中接收數(shù)據(jù),然后再組播到對(duì)應(yīng)的分區(qū)應(yīng)用中。其中單播是組播的一種情況,只是需要轉(zhuǎn)發(fā)的消息個(gè)數(shù)為1,這樣就可以都統(tǒng)一按照組播轉(zhuǎn)發(fā)。
應(yīng)用程序發(fā)送任務(wù)負(fù)責(zé)將分區(qū)應(yīng)用中的數(shù)據(jù)發(fā)送到FC總線或者轉(zhuǎn)發(fā)到對(duì)應(yīng)的其他分區(qū)應(yīng)用中。
(1)遍歷發(fā)送轉(zhuǎn)發(fā)表中的每條信息,判斷內(nèi)部外部標(biāo)志。
(2)如果是外部標(biāo)志,則說(shuō)明任務(wù)從應(yīng)用分區(qū)中接收數(shù)據(jù)再發(fā)送到FC總線。
(3)如果是內(nèi)部,則說(shuō)明任務(wù)從應(yīng)用分區(qū)中接收數(shù)據(jù)直接組播到其他分區(qū)中。其中單播是組播的一種情況,只是需要轉(zhuǎn)發(fā)的消息個(gè)數(shù)為1,這樣就可以都統(tǒng)一按照組播轉(zhuǎn)發(fā)。
本文提出了基于FC總線的多核通信中間件實(shí)現(xiàn)方案,該方案對(duì)于分區(qū)間通信本文提供了兩個(gè)可以配置的方案,即發(fā)送分區(qū)將數(shù)據(jù)發(fā)送到多核通信中間件,中間件根據(jù)配置信息,即可以將數(shù)據(jù)發(fā)送到FC總線后再經(jīng)過(guò)FC交換機(jī)轉(zhuǎn)到多核通信中間件,中間件再將數(shù)據(jù)發(fā)送到接收分區(qū)中。還可以將數(shù)據(jù)直接轉(zhuǎn)發(fā)到接收分區(qū)中。這樣可以減輕FC子卡的通信壓力。同時(shí)本文中的多核通信中間件還實(shí)現(xiàn)了消息多播功能。經(jīng)過(guò)測(cè)試,該方案轉(zhuǎn)發(fā)效率高,配置靈活。
圖4 應(yīng)用程序發(fā)送任務(wù)流程圖