段紅亮,2,劉天博,邵春收,王 鵬,朱元元
(1.北京航天長征飛行器研究所,北京 100076;2.西北工業(yè)大學(xué) 機(jī)電學(xué)院,西安 710072)
大部分武器系統(tǒng)設(shè)備都是強(qiáng)實(shí)時性的,設(shè)備之間信息交互都有嚴(yán)格的時間限制,要求毫秒級或微秒級,甚至是納秒級,所以主流的彈上設(shè)備均基于DSP、FPGA、單片機(jī)等架構(gòu)或者是組合架構(gòu)實(shí)現(xiàn),也有少部分采用實(shí)時操作系統(tǒng)平臺。地面測試設(shè)備用于武器設(shè)備的開發(fā)測試、出廠測試、上彈總裝前后或者年度定檢等等一系列測試工作,是所有武器必配設(shè)備,地面測試設(shè)備是武器設(shè)備的“診斷醫(yī)生”,只有經(jīng)過地面測試設(shè)備認(rèn)證為“健康”的彈上設(shè)備才允許使用,地面測試設(shè)備的研制開發(fā)甚至要早于彈上設(shè)備。
地面測試設(shè)備與彈上設(shè)備進(jìn)行通信和指令交互,完成功能測試等。微軟的Windows操作系統(tǒng)由于具備良好通用性、圖形用戶界面以及眾多的技術(shù)支持基礎(chǔ)而成為武器地面測試設(shè)備的首選解決方案。目前絕大部分型號的地面測試設(shè)備為了兼顧成本和開發(fā)難度等因素,采用Windows+x86架構(gòu)實(shí)現(xiàn)。但基于搶占式多任務(wù)調(diào)度策略就決定了Windows系統(tǒng)的非實(shí)時性屬性,作為通用高性能操作系統(tǒng)而設(shè)計(jì)的操作系統(tǒng),不能保證中斷響應(yīng)時間的確定性,也沒有提供讓線程獲得確定執(zhí)行時間的機(jī)制。在測試時地面測試軟件上偶爾會出現(xiàn)某條指令超時的現(xiàn)象,這時就很難判斷是彈上設(shè)備指令確實(shí)超時,還是由于地面測試設(shè)備非實(shí)時性而造成的時間誤判。
針對Windows平臺的非實(shí)時性問題,工業(yè)控制上一般采用RTX硬實(shí)時解決方案[1-2],RTX(Real-Time eXtension)是由美國IntervalZero公司開發(fā)的基于Windows平臺擴(kuò)展的實(shí)時控制解決方案,但需要單獨(dú)購買RTX軟件擴(kuò)展包,且RTX信息處理軟件獨(dú)立于Windows平臺需求單獨(dú)開發(fā),而武器地面測試設(shè)備由于生產(chǎn)量少、需求變化快等特點(diǎn),成本與周期上不適于采用RTX[3]。文獻(xiàn)[4]中提出了一種循環(huán)緩存處理方法來提高Windows系統(tǒng)的實(shí)時性,這種用空間換時間的方法在操作系統(tǒng)負(fù)載較小時一定程度上提高了實(shí)時性,但由于對緩存讀寫線程仍為操作系統(tǒng)的一個普通線程,在操作系統(tǒng)負(fù)載較大時,循環(huán)緩存處理方法的實(shí)時性不能得到保證。
文獻(xiàn)[5]提出了一種Windows操作系統(tǒng)中的排他性線程獨(dú)占技術(shù),使用該線程可以獨(dú)占一個CPU邏輯核,而不再受Windows任務(wù)管理器的調(diào)度,物理上將該邏輯核等效DSP使用,保證了信息處理的實(shí)時性?;谖墨I(xiàn)[5-7]的研究成果,面向武器地面測試設(shè)備,本文提出了一種實(shí)用的實(shí)時信息處理方法,可以實(shí)時處理以太網(wǎng)、串口等有線或無線I/O信息,該方法開發(fā)難度低、周期短且不增加設(shè)備成本。
論文結(jié)構(gòu)如下:第1部分簡要分析了Windows非實(shí)時性機(jī)理,第2部分詳細(xì)闡述高精度軟時鐘技術(shù)及實(shí)現(xiàn)方法,第3部分地面測試軟件的實(shí)時測試方法,第4部分介紹對本方法的有效性試驗(yàn)分析,最后一部分對全文進(jìn)行了總結(jié)。
x86的GPP架構(gòu)本身不能實(shí)現(xiàn)納秒級強(qiáng)實(shí)時性要求,這是通用CPU的CISC指令集決定的,有兩個層次原因,首先是CISC指令集長短不一,所以占用CPU時鐘周期不一;二是Intel在指令集中有很多優(yōu)化算法,同一條匯編指令在同一個CPU的不同負(fù)載下可能會被編譯成不同的匯編指令,目前Intel的CPU的時鐘周期都是亞納秒級,所以x86 CPU難以實(shí)現(xiàn)納秒級的高精度定時,用于十納秒級定時精度是普遍可以接受的。從目前的彈上設(shè)備所要求的毫秒級或微秒級實(shí)時性要求來看,x86 CPU架構(gòu)本身的定時精度是可以忽略不計(jì)。
Windows操作系統(tǒng)調(diào)度及響應(yīng)時延的不確定性。以串口通信為例(并口、以太網(wǎng)口類似),地面測試設(shè)備與彈上設(shè)備的信息交互流程如圖1所示,忽略彈上設(shè)備處理時延(或者假定為一個確定值)。
圖1 信息流示意圖
例如,有條指令要求彈上設(shè)備在100 ms內(nèi)回復(fù)指令,那么處理過程如下:
1)測試軟件打開某個串口,或在軟件初始化時即打開這個串口,并配置串口參數(shù);
2)當(dāng)有個指令發(fā)送時,測試軟件調(diào)用WinAPI串口函數(shù),發(fā)送該指令,同時啟動計(jì)時器,設(shè)置100 ms的超時值;
3)數(shù)據(jù)由用戶態(tài)進(jìn)入內(nèi)核態(tài),操作系統(tǒng)調(diào)度器需要將串口發(fā)送API指令調(diào)入到CPU任務(wù)隊(duì)列中,當(dāng)占用CPU當(dāng)前時間片時,CPU執(zhí)行該指令;
4)CPU將發(fā)送數(shù)據(jù)寫入到串口Tx寄存器中,同時通知串口有數(shù)據(jù)到達(dá),請發(fā)送;
5)串口通過物理層鏈路發(fā)送給DS設(shè)備,DS設(shè)備響應(yīng)該指令后發(fā)送回令給串口;
6)串口接收回令數(shù)據(jù),放入到Rx寄存器中,同時通知操作系統(tǒng)有數(shù)據(jù)到達(dá),通知消息本身是放入到操作系統(tǒng)的消息隊(duì)列中;
7)操作系統(tǒng)調(diào)度器在消息隊(duì)列中讀到串口的通知后,需要將串口接收API指令調(diào)入到CPU任務(wù)隊(duì)列中,當(dāng)占用CPU當(dāng)前時間片時,CPU執(zhí)行該指令;
8)CPU從串口Rx寄存器讀取數(shù)據(jù),交給測試軟件,由內(nèi)核態(tài)進(jìn)入用戶態(tài);
9)測試軟件根據(jù)數(shù)據(jù)協(xié)議解析該數(shù)據(jù),確認(rèn)為當(dāng)前指令的有效回令后,停止計(jì)時器,同時判斷計(jì)時器是否超100 ms。至此一個完整的信息交互結(jié)束。
Windows是基于消息響應(yīng)機(jī)制的多線程的非實(shí)時性操作系統(tǒng),盡管微軟沒有公開Windows操作系統(tǒng)內(nèi)核,當(dāng)通過一些公開資料和微軟的技術(shù)文檔可知,一個線程一旦調(diào)入到CPU中,那么最少占有一個時間片的時間長度才會有可能被調(diào)出,而一個時間片長為1/16 s。
在Windows的任務(wù)管理器的進(jìn)程欄可以看到,假如用戶未打開任何一個應(yīng)用程序,操作系統(tǒng)都會有約100個進(jìn)程在運(yùn)行,地面測試軟件運(yùn)行時,也只是其中之一個進(jìn)程。這些進(jìn)程都有不同的優(yōu)先級,所以當(dāng)一個進(jìn)程從進(jìn)入CPU調(diào)度隊(duì)列到占用CPU時間片,這個時間是不可預(yù)知的,這是Windows非實(shí)時性的最主要根源所在。具體到我們的串口收發(fā)數(shù)據(jù)流程中,第3)步和第7)步是時延不確定的最主要環(huán)節(jié)。
本文進(jìn)行了一項(xiàng)測試,當(dāng)?shù)孛鏈y試設(shè)備只運(yùn)行測試軟件,其他所有應(yīng)用軟件都停止(包括殺毒軟件),程序循環(huán)發(fā)送指令,等待100 ms,若超時未收到回令則停止循環(huán)并報錯,若正常則繼續(xù)循環(huán)。測試6個小時左右,發(fā)生2次超時。
作為對比測試,在運(yùn)行測試軟件循環(huán)測試的同時,打開殺毒軟件,進(jìn)行全盤查殺病毒,測試1個小時左右,發(fā)生了12次超時。主要原因是殺毒時頻繁的磁盤IO操作占用CPU資源,殺毒軟件進(jìn)程也需要大量占用CPU時間片,從而提高了與地面測試軟件的碰撞沖突概率,造成了大量的超時現(xiàn)象。
高精度時鐘源是實(shí)現(xiàn)信息實(shí)時處理的前提和基準(zhǔn)。例如通信設(shè)備上多采用外部時鐘源或衛(wèi)星授時方法,而在地面測試設(shè)備上外掛時鐘源或增加衛(wèi)星授時模塊的方法會顯著增加復(fù)雜度和成本,不易實(shí)現(xiàn)。
為了使各種實(shí)時處理任務(wù)能在Windows平臺上正確地執(zhí)行,利用操作系統(tǒng)API函數(shù)實(shí)現(xiàn)軟時鐘是可行的。然而Windows目前提供的延時函數(shù)最小時間粒度都是ms級,且理想情況下精度僅能達(dá)到百ms級,所以直接調(diào)用API函數(shù)也不能保證時間精度。
對于單核CPU,Intel匯編指令RDTSC可以獲得納秒級的精度[8]。然而,這項(xiàng)技術(shù)不再適用于多核環(huán)境[9]。為了構(gòu)造高精度的軟件時鐘,本文采用了文獻(xiàn)[5]所提出的排他性線程獨(dú)占技術(shù),它為輸出實(shí)時行為的特定任務(wù)分配一個獨(dú)占的處理器內(nèi)核。一個線程被創(chuàng)建并專用于在一個獨(dú)占的CPU邏輯核上執(zhí)行。該線程所做的一切就是調(diào)用RDTSC來計(jì)算當(dāng)前系統(tǒng)時間。由于線程是不可中斷的,這種方法為內(nèi)核模式的實(shí)時過程獲得了一個高精度的時鐘實(shí)用程序。圖2為構(gòu)造這種時鐘的偽代碼。
圖2 高精度時鐘源偽代碼
通過設(shè)置軟件時鐘,可以在每一個閾值時間段中執(zhí)行一次TIME_OUT事件。例如,將閾值定義為1 ms或1 μs,在主頻為2.8 GHz頻率的CPU上,觀察到實(shí)際的超時時間周期比閾值大幾納秒,這是合理的,因?yàn)樵贑PU中執(zhí)行單個匯編指令所需的時間為納秒級。所以本方法所生成的軟時鐘可以達(dá)到十納秒級精度。
為保證地面測試軟件實(shí)時性,信息交互線程也采用排他性線程獨(dú)占技術(shù),獨(dú)占一個CPU邏輯核,由于Intel的i5系列之后都是至少包含了4個物理核(單核雙線程技術(shù),等效為8個邏輯核),所以地面測試設(shè)備中被獨(dú)占2~3個邏輯核后并不會顯著操作系統(tǒng)的其他功能,如圖3所示。
由圖3可以看到,邏輯核3、5、7分別被3個線程獨(dú)占,在運(yùn)行中被獨(dú)占的邏輯核的CPU使用率始終為100%,不會被操作系統(tǒng)任務(wù)管理器中斷,從而保證了實(shí)時性。
信息交互線程在與彈上設(shè)備發(fā)生信息交互時,使用本文第2章所設(shè)計(jì)的高精度時鐘源來作為時鐘基準(zhǔn),可以精確計(jì)算出彈上設(shè)備回令是否超時。
地面測試軟件與彈上設(shè)備接口分為有線和無線接口兩類,其中有線接口多為串口、并口、1553B接口和以太網(wǎng)口等,無線接口多為各類專用無線通信接口,如遙測系統(tǒng)無線接口等。
一般來說,有線接口的計(jì)算量不大,若地面測試軟件與彈上設(shè)備接口為無線接口,無線通信協(xié)議的計(jì)算量是非常巨大的,尤其是物理層,包含了信道編碼與解調(diào)、FFT等。一般來說,GPP的運(yùn)算能力是不能勝任基帶數(shù)字信號處理計(jì)算的,這也是為什么到目前為止商用無線通信都是用專用基帶芯片的原因。為了突破這個計(jì)算瓶頸,可充分借鑒FPGA的原理,地面測試軟件可將所有輸入與輸出結(jié)果映射為一個查找表(LUT),然后將LUT裝載到CPU的二級緩存中。一方面節(jié)省了計(jì)算的時間開銷,另一方面減少了查找的時間[10-14]。在通用CPU中,不同存儲器的典型容量和訪問時間如圖4所示。
圖4 通用存儲器容量及訪問時間
由圖1可以看到串口在Windows平臺下的信息流,是包含了多個環(huán)節(jié)。
在信息流中,每一個環(huán)節(jié)意味著數(shù)據(jù)的轉(zhuǎn)移和傳遞,為了避免程度中內(nèi)存拷貝所引入的處理時延,要在地面測試軟件設(shè)計(jì)開發(fā)時盡可能多地采用數(shù)據(jù)“零”拷貝,即利用MDL(memory descriptor list)來進(jìn)行內(nèi)存操作,這樣可顯著減小信息傳輸時延,避免造成地面測試設(shè)備向彈上設(shè)備回令時超時。
用兩臺地面測試設(shè)備搭建試驗(yàn)場景。為不失一般性,測試設(shè)備之間采用串口(RS422)通信,兩臺測試設(shè)備均是Windows平臺,安裝了采用了本文所述實(shí)時信息處理方法的軟件。試驗(yàn)方法如下:
1)測試設(shè)備1通過串口向測試設(shè)備2發(fā)送一個串口數(shù)據(jù)幀1,同時記錄時間戳T1;
2)測試設(shè)備2收到數(shù)據(jù)幀1后,立即向測試設(shè)備1返回一個數(shù)據(jù)幀2;
3)測試設(shè)備1收到數(shù)據(jù)幀2后,記錄時間戳T2,計(jì)算出時間差ΔT=T2-T1;
4)重復(fù)上述步驟1)~ 3),記錄1 000次時間差數(shù)據(jù);
5)打開測試設(shè)備1上殺毒軟件,執(zhí)行全盤掃描,重復(fù)上述步驟1)~4),記錄1 000次時間差數(shù)據(jù);
6)關(guān)閉測試設(shè)備1上殺毒軟件,打開測試設(shè)備2上殺毒軟件,執(zhí)行全盤掃描,重復(fù)上述步驟1)~4),記錄1 000次時間差數(shù)據(jù);
7)同時打開測試設(shè)備1和測試設(shè)備2上殺毒軟件,執(zhí)行全盤掃描,重復(fù)上述步驟1)~4),記錄1 000次時間差數(shù)據(jù)。
4次測試結(jié)果分別如圖5所示。
圖5 測試結(jié)果及對比
由測試結(jié)果分析,4次測試均值依次為12.2 μs,12.5 μs,12.1 μs,12.0 μs,相差不大。由圖5可見,4次結(jié)果均方差也分布在2~4之間,數(shù)據(jù)一致性較好,從而證明了本方法的有效性。
面向Windows平臺下的地面測試設(shè)備,本文提出了一種基于排他性線程獨(dú)占技術(shù)和高精度軟時鐘技術(shù)的實(shí)時信息處理方法,可以實(shí)時處理以太網(wǎng)、串口等有線或無線I/O信息,該方法開發(fā)難度低、周期短且不增加設(shè)備成本。首先簡要分析了Windows非實(shí)時性機(jī)理,進(jìn)而詳細(xì)闡述高精度軟時鐘技術(shù)和地面測試軟件的實(shí)時信息處理方法,最后對本方法的有效性試驗(yàn)驗(yàn)證分析,測試數(shù)據(jù)一致性較好。