+ 任勃1,張明昆1,劉建平1,2,吳濤1,胡科飛1 (1. 西安衛(wèi)星測控中心) (2. 宇航動力學國家重點實驗室)
隨著智能終端的大規(guī)模普及,計算和存儲服務從客戶端轉向云端,計算機軟件正在以數(shù)字比特的形式改寫現(xiàn)實世界中的方方面面,軟件定義蓬勃發(fā)展[1]。2017年9月,中國科學院軟件研究所聯(lián)合國內(nèi)三十余家單位發(fā)起成立軟件定義衛(wèi)星技術聯(lián)盟,提出了以天基超算平臺和星載操作環(huán)境為核心的軟件衛(wèi)星開放式系統(tǒng)[2-3]。聯(lián)盟計劃搭建以天智系列衛(wèi)星為基礎的平臺化軟件解決方案,設立航天應用軟件商店,形成軟件定義衛(wèi)星開放生態(tài),稱之為“Sputnix”。
建立航天應用商店時,不同的應用軟件需要和衛(wèi)星進行不同的信息交互,涉及到各種星載硬件和鏈路協(xié)議,一定程度上造成了衛(wèi)星服務和軟件接口的重復開發(fā),數(shù)據(jù)交互比較復雜,對星上鏈路和軟件安全造成威脅[4]。在星載操作環(huán)境中部署一個強大的公用平臺可以為星上航天應用軟件提供完善豐富的系統(tǒng)配置和基礎服務支持,符合釋放平臺能力和生產(chǎn)力的技術趨勢[5]。公共平臺使衛(wèi)星應用軟件開發(fā)者可以專注于軟件功能和用戶體驗,而與衛(wèi)星硬件傳感器產(chǎn)生的在軌數(shù)據(jù)的交互全部由公用平臺來完成。洪錫軍等提出的軟件通用運行平臺主要關注應用軟件的可移植性[6],廖明宏等提出的小衛(wèi)星軟件公用平臺側重于基于功能的程序語言類庫的建設[7],本文針對軟件定義衛(wèi)星提出在系統(tǒng)上建立一個公共軟件服務平臺,包括硬件計算設施、系統(tǒng)軟件倉庫、計算作業(yè)算法庫、信息交互接口四大模塊。硬件計算設施由天基超算平臺、磁盤陣列數(shù)據(jù)存儲器等組成,衛(wèi)星硬件傳感器與公共軟件平臺的接口暫不考慮;系統(tǒng)軟件倉庫主要為星上軟件提供各類基礎性軟件包安裝源,類似于Ubuntu系統(tǒng)軟件更新中心;計算作業(yè)算法庫為應用軟件提供多樣化、具有一定普適性的在軌計算算法;交互接口則負責所有應用軟件與軟件定義衛(wèi)星系統(tǒng)的信息交換。模塊化的設計符合軟件定義衛(wèi)星的重組、重配和重構理念,同時也提升了整個系統(tǒng)的安全性。
公共軟件服務平臺外部主要與衛(wèi)星的各個硬件傳感器、航天軟件商店應用軟件相聯(lián)系。平臺的目標是使星載操作環(huán)境與航天應用軟件適當解耦,做到“緊貼和、弱隔離”?!熬o貼和”的前提是提供應用軟件依賴軟件包的最大支持集合,以及完整、豐富、安全的系統(tǒng)配置,使星載操作環(huán)境能夠滿足個性化應用軟件對系統(tǒng)環(huán)境的要求;在系統(tǒng)環(huán)境未能滿足應用軟件需求時,可從系統(tǒng)軟件倉庫下載安裝可選軟件包,或搜索衛(wèi)星作業(yè)算法庫中的算法列表進行調(diào)用和引用,并通過接口和數(shù)據(jù)控制使應用軟件與星載操作環(huán)境相對分離,實現(xiàn)“弱隔離”,避免應用軟件對衛(wèi)星核心系統(tǒng)運行產(chǎn)生干擾。公共服務平臺架構如圖1所示。
所有星載應用軟件的運行均基于星載公共軟件服務平臺,新增上注的衛(wèi)星應用軟件通過向公共平臺注冊后再進入發(fā)布運行階段。應用程序管理,衛(wèi)星數(shù)據(jù)調(diào)度,系統(tǒng)狀態(tài)記錄,衛(wèi)星配置管理等衛(wèi)星在軌公共業(yè)務由公共軟件服務平臺的信息交互接口模塊統(tǒng)一處理,公共平臺按照一定的規(guī)則和時間間隔向全系統(tǒng)廣播系統(tǒng)狀態(tài)和配置信息。公共服務平臺上的應用軟件作為一個獨立的Linux系統(tǒng)后臺進程運行,公共平臺負責所有應用軟件傳輸數(shù)據(jù)的分發(fā)調(diào)度。
公共軟件服務平臺的四大組成模塊中,系統(tǒng)軟件倉庫主要解決應用軟件依賴的下載與部署,對各種Linux系統(tǒng)引用軟件包進行版本控制,建立系統(tǒng)軟件安全規(guī)范。計算作業(yè)算法庫的主要目標是存儲各類常用并具有一定系統(tǒng)普適性和標準接口的算法,結合天基超算平臺的算力支持,為應用軟件提供一個基礎業(yè)務環(huán)境,使應用軟件開發(fā)者不再需要關注衛(wèi)星硬件傳感器數(shù)據(jù)的產(chǎn)生和輸出,同時輔助實現(xiàn)衛(wèi)星功能拓展。衛(wèi)星在軌運行期間,需要計算軌道、姿態(tài)、能源等基本要素,這些內(nèi)容屬于傳統(tǒng)意義上衛(wèi)星的基礎計算作業(yè)。同時,基于強大的天基超算平臺,衛(wèi)星還可以進行多樣化的復雜運算和智能推理,稱之為智能計算作業(yè)。智能計算作業(yè)基于蒙特卡洛模擬方法、無監(jiān)督學習等數(shù)據(jù)處理和機器學習算法,其應用領域包括基于深度學習的對地觀測圖片在軌識別、太空VR/AR應用效果渲染等。
在基礎作業(yè)算法庫部署精密定軌工具。精密定軌是保證衛(wèi)星正常在軌運行的基本條件,一個完整的定軌流程包括GNSS(Global Navigation Satellite System,全球導航衛(wèi)星系統(tǒng))定位數(shù)據(jù)接收、數(shù)據(jù)解包與坐標轉換、迭代計算定軌三個步驟。相應的,基礎作業(yè)算法庫提供位置數(shù)據(jù)解包、坐標轉換、定軌算法引用列表等基礎服務包,為衛(wèi)星在軌長期管理提供基本信息,也可以供地球參數(shù)解算等基礎科學研究類型的航天應用軟件調(diào)用。
圖1 公共軟件服務平臺框架
在智能作業(yè)算法庫中部署C++庫Tensor RT。Tensor RT是英偉達(NVIDIA)公司發(fā)布的高性能深度學習推理引擎[8],在對地觀測圖像處理、空間操作、航天器碰撞預警等領域具有廣泛的應用前景。航天應用軟件首先利用天基超算平臺中的GPU對海量數(shù)據(jù)進行神經(jīng)網(wǎng)絡模型訓練,經(jīng)過網(wǎng)絡前向和后向傳播,生成模型文件;再調(diào)用推理引擎使用訓練好的模型對新數(shù)據(jù)進行預測,并進行前向傳播。當星上航天應用軟件使用基于Caあe(伯克利大學人工智能研究團隊提出的一種深度學習框架)和TensorFlow(谷歌公司推出的機器學習框架)等深度學習框架時,推理引擎能夠直接加載開發(fā)人員在地面訓練好的模型文件,并根據(jù)天基超算平臺GPU陣列的參數(shù)對模型進行優(yōu)化,遙控上注改進的模型文件就可以持續(xù)發(fā)揮Tensor RT的巨大潛力。
公共平臺的作業(yè)算法庫中的算法模塊提供動態(tài)鏈接庫可以供應用軟件直接引用,也提供標準的應用程序接口,具體以算法函數(shù)的封裝演進版本等級而定。針對沒有動態(tài)鏈接庫的情況,初步設計了如圖2的接口,其中算法實例是指一次算法服務的實例化,服務單元負責算法服務實例的創(chuàng)建、配置和刪除,代理服務器負責創(chuàng)建請求、從通信服務中接收數(shù)據(jù)單元等,底層采用TCP/IP協(xié)議連接。作業(yè)算法庫的引入使航天領域各類算法能夠在軌驗證、比較和標定,同時極大的拓展了衛(wèi)星系統(tǒng)的功能,實現(xiàn)軟件定義衛(wèi)星智能化、需求動態(tài)重構的目標。
衛(wèi)星硬件傳感器產(chǎn)生的高碼率數(shù)據(jù)(大于1Mbps)通過公共軟件平臺發(fā)送給應用軟件,如果接收同一類工程數(shù)據(jù)的應用軟件都對數(shù)據(jù)進行緩存,或存入存儲器再讀出,則會極大的占用系統(tǒng)硬件資源,數(shù)據(jù)時延也會對實時類應用產(chǎn)生很大負面影響[9]。因此本文設計“數(shù)據(jù)類型相同,緩沖內(nèi)存共享”的數(shù)據(jù)交互方式,使公共平臺和應用軟件的數(shù)據(jù)交互在共享內(nèi)存中完成。共享內(nèi)存區(qū)是最快的Linux進程間通信形式,一旦這樣的內(nèi)存映射到共享它的進程的地址空間,這些進程間的數(shù)據(jù)傳遞不再涉及到Linux內(nèi)核。共享內(nèi)存允許兩個或多個進程共享一個給定的存儲區(qū)域,數(shù)據(jù)不需要在多個進程之間進行復制。考慮部分應用軟件對高碼率數(shù)據(jù)傳輸?shù)男枨?,在星載操作環(huán)境下設計公共平臺與應用軟件共享內(nèi)存的數(shù)據(jù)交互方式。
圖2 作業(yè)算法庫與應用軟件接口
在搭建數(shù)據(jù)交互流程時,采用模塊化的設計方式,將涉及共享內(nèi)存的操作封裝為一個MemoryHighWay類,該類實例化后以命名和空間大小為標記開辟共享內(nèi)存,定義一個環(huán)形數(shù)據(jù)緩沖區(qū)并將緩沖區(qū)寫入共享內(nèi)存進行維護。每個需要高速數(shù)據(jù)傳輸服務的應用軟件調(diào)用MemoryHighWay類,在該應用軟件與數(shù)據(jù)緩沖區(qū)之間形成管道,多個應用軟件以緩沖區(qū)為中心形成多個管道,MemoryHighWay類可以對管道上的數(shù)據(jù)進行操作,在必要情況下可以對數(shù)據(jù)幀的時序進行檢查。在操作管道數(shù)據(jù)時,啟用多線程,利用線程互斥保護數(shù)據(jù)安全,在每次操作流程中加入計數(shù)信號對數(shù)據(jù)進行同步,示意圖如圖3。在星載操作環(huán)境下,應用軟件的交互對象既可以是其他一個或多個應用軟件,也可以是公共軟件服務平臺。
測試環(huán)境采用中標麒麟國產(chǎn)化Linux操作系統(tǒng),使用C++語言和Qt平臺開發(fā)高碼率數(shù)據(jù)發(fā)生器軟件,以及兩個基于共享內(nèi)存方案的應用軟件接收處理數(shù)據(jù)。經(jīng)過地面測試,在4M帶寬下傳輸1.13Mbps的數(shù)據(jù)時,應用軟件收到的數(shù)據(jù)沒有逆序;軟件能夠正確處理數(shù)據(jù)丟失等異常情況;在數(shù)據(jù)發(fā)生器進行主備機切換時,測試軟件能夠正確完成新數(shù)據(jù)幀序列的重新捕獲接收。
2.2 基于消息中間件的信息交互機制
公共平臺和應用軟件之間的信息交互主要有應用軟件管理、衛(wèi)星數(shù)據(jù)調(diào)度,系統(tǒng)狀態(tài)記錄,衛(wèi)星配置管理等信息交換業(yè)務。為了便于衛(wèi)星內(nèi)部統(tǒng)一信息交換格式,解決系統(tǒng)表示層的互操作問題,參考測控數(shù)據(jù)表示[10],定義一種稱為SDF(Satellite Data Format,衛(wèi)星數(shù)據(jù)格式)的協(xié)議作為統(tǒng)一的數(shù)據(jù)交換格式,各類數(shù)據(jù)按照約定的編碼表由信源新宿、數(shù)據(jù)類型等封裝成SDF數(shù)據(jù)包,假設衛(wèi)星硬件傳感器產(chǎn)生的數(shù)據(jù)在到達公共平臺時已經(jīng)轉換為SDF格式。SDF格式可以與標準XML文件格式相互轉換,適應主流應用軟件配置文件格式的傳輸。
圖3 共享內(nèi)存方式數(shù)據(jù)交互
采用消息中間件完成公共平臺和應用軟件之間的信息交互,C++消息服務(C++ Messaging Service,CMS)定義了消息中間件的接口規(guī)范,可以提供與各廠商無關的消息訪問與收發(fā)服務。公共平臺與應用軟件通過CMS接口實現(xiàn)數(shù)據(jù)交互,包括文本信息、可序列化對象信息、鍵值對屬性集合、字節(jié)流和原始值流信息等均可以在虛擬信道中傳輸。在應用軟件與公共平臺之間數(shù)據(jù)傳輸速率較低的情況下,該方式可以代替共享內(nèi)存實現(xiàn)數(shù)據(jù)交互?;贑MS規(guī)范的消息中間件,屏蔽了底層操作系統(tǒng)、通信協(xié)議和數(shù)據(jù)格式的差異,使公共平臺與應用軟件在數(shù)據(jù)層面解耦,同時實現(xiàn)了公共平臺的管理功能和倉儲功能。兩者之間的交互內(nèi)容主要包含以下幾個方面:
(1)應用軟件向公共平臺發(fā)送注冊信息,建立信息管道;
(2)公共平臺向所有應用軟件發(fā)送心跳信號;
(3)公共平臺向應用軟件發(fā)送啟動和關閉信號;
(4)應用軟件按照SDF中數(shù)據(jù)類型和應用軟件標識向公共平臺發(fā)送數(shù)據(jù)請求;
(5)公共平臺按照數(shù)據(jù)請求列表向應用軟件發(fā)送數(shù)據(jù);
(6)應用軟件向公共平臺發(fā)送停發(fā)數(shù)據(jù)申請;
(7)應用軟件關閉前向發(fā)送公共平臺發(fā)送下線信號;
(8)公共平臺向所有應用軟件發(fā)送公共配置更新。
其中第(5)項是指,發(fā)送速率大于1Mbps時使用2.1節(jié)的共享內(nèi)存方式,低于1Mbps時使用消息中間件管道。
單個航天應用軟件在運行過程中與公共平臺的數(shù)據(jù)交互如圖4,假設同時運行多個應用軟件,在普通硬件水平的計算機環(huán)境下,使用ActiveMQ在中標麒麟Linux操作系統(tǒng)上對設計的交互機制進行了測試。由飛行圈次序號、信息類別碼、數(shù)據(jù)類型、信息源(應用軟件進程號)、注冊和反注冊標識、數(shù)據(jù)索取條件、注冊信息哈希碼等七項組成信息交互基類,基于C++的Boost庫的序列化模塊實現(xiàn)信息交互中基類的序列化和反序列化。該基類可以在應用軟件向公共平臺注冊、應用軟件向公共平臺發(fā)送數(shù)據(jù)申請兩種情況下通用,區(qū)別僅在于注冊時信息交互類中的數(shù)據(jù)類型為注冊類型,數(shù)據(jù)申請時數(shù)據(jù)類型為應用軟件業(yè)務數(shù)據(jù)類型。每個交互信息的哈希碼作為唯一鍵值索引動態(tài)存儲在公共平臺注冊列表和數(shù)據(jù)列表中,單個應用軟件第一次注冊時加入注冊列表,第一次反注冊時從注冊列表中刪除;某個應用軟件第一次申請某一種數(shù)據(jù)類型時加入數(shù)據(jù)列表,所有應用軟件最后一次撤銷該數(shù)據(jù)類型時從數(shù)據(jù)列表中刪除。從測試情況來看,在通常的衛(wèi)星下行遙測數(shù)據(jù)傳輸速率下,數(shù)據(jù)的注冊和申請沒有丟失現(xiàn)象,數(shù)據(jù)的申請和索取沒有延遲,并且能夠實時接收到,數(shù)據(jù)解包正常,ActiveMQ服務運行穩(wěn)定,對硬件資源的消耗占用不明顯。
圖4 航天商店應用軟件數(shù)據(jù)交換流程
針對軟件定義衛(wèi)星開放系統(tǒng)建設中航天應用軟件商店發(fā)展思路和面臨的具體問題,設計了一種軟件定義衛(wèi)星公共服務平臺,設置衛(wèi)星作業(yè)算法庫實現(xiàn)應用軟件引用和衛(wèi)星功能擴展,提出了應用軟件和公共平臺的數(shù)據(jù)交互方法和信息交互機制,中標麒麟Linux系統(tǒng)環(huán)境下的仿真數(shù)據(jù)測試表明本文的設計符合高速率數(shù)據(jù)的傳輸,實現(xiàn)了應用軟件和公共平臺之間規(guī)范的信息交換。有效屏蔽了軟件定義衛(wèi)星硬件層面的交互,使軟硬件解耦。下一步將在地面使用TensorFlow建立神經(jīng)網(wǎng)絡深度學習模型,重點研究在編隊衛(wèi)星伴飛、空間操作任務中,通過圖像處理識別衛(wèi)星物理邊緣、相對距離和速度,調(diào)用智能作業(yè)算法庫Tensor RT進行航天器碰撞預警分析,使軟件定義衛(wèi)星公共服務平臺在天智系列衛(wèi)星中得到在軌測試和應用。
[1]葉毓睿,雷迎春,李炫輝,等. 軟件定義存儲:原理、實踐與生態(tài)[M]. 北京:機械工業(yè)出版社,2016:1-3.YE Y R,LEI Y C,LI X H,et al. Software defined storage:principle, practice and ecosystem[M]. Beijing:China Machine Press,,2016:1-3(in Chinese).
[2]軟件定義衛(wèi)星項目組. 軟件定義衛(wèi)星-商業(yè)航天發(fā)展的助推器[J].衛(wèi)星與網(wǎng)絡,2017,9:36-38.
[3]趙軍鎖,吳鳳鴿,劉光明. 軟件定義衛(wèi)星技術發(fā)展與展望[J]. 衛(wèi)星與網(wǎng)絡,2017,12:23-29.
[4]王麗沖,姚秀娟,閆毅. 一種基于OpenFlow的軟件定義衛(wèi)星網(wǎng)絡架構設計方案[J]. 電子設計工程,2016,24(17):85-89.WANG L C,YAO X J,YAN,Y. A SDSN architecture design based on OpenFlow[J]. Electronic Design Engineering,2016,24(17):85-89.
[5]顏凱,張軍. 軟件定義服務架構研究[J]. 信息技術與標準化,2016,8:28-32.
YAN K,ZHANG J. Research of the framework of software defined service[J]. Information Technology & Standardization,2016,8:28-32.
[6]廖明宏,吳翔虎,程光明. 小衛(wèi)星軟件公用平臺設計[J]. 計算機工程與設計,2001,22(6):28-33.LIAO M H,WU X H,CHENG G M. Common software platform design for small satellite[J]. Computer Engineering and Design,2001,22(6):28-33.
[7]洪錫軍,張激. 嵌入式應用軟件通用運行平臺研究[J]. 計算機工程,2004,30(24):67-69.HONG X J,ZHANG J. Research on common running platform for embedded applications[J]. Computer Engineering,2004,30(24): 67-69.
[8]SHASHANK PRASANNA, PRETHVI KASHINKUNTI,FAUSTO MILLETARI. Tensor RT 3: faster tensor flow inference and volta support[EB/OL].NVIDIA DEVELOPER: NVIDIA Developer Blog,2017(2017-12-04)[2018-02-27]. https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/.
[9]威廉姆斯著,周全,梁娟娟,宋真真,許敏等譯,C++并發(fā)編程實戰(zhàn)[M]. 北京:人民郵電出版社,2015:3-4.Anthony Williams. C++ Concurrency In Action[M]. Manning Publications,2012:4-5.
[10]李英女,鄭國雄. 測控數(shù)據(jù)的軟件定義方法[J]. 飛行器測控學報,2001,20(2):72-76.