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