王余偉,曹 東,施書(shū)成
(1.南京航空航天大學(xué)自動(dòng)化學(xué)院,江蘇 南京 211106;2.南京航空航天大學(xué)飛行控制研究所,江蘇 南京 211106)
系統(tǒng)的CPU使用率是實(shí)時(shí)系統(tǒng)運(yùn)行正常與否的重要指標(biāo),可以表征系統(tǒng)的時(shí)間特性和任務(wù)狀態(tài)。在嵌入式系統(tǒng)中,CPU使用異常是經(jīng)常出現(xiàn)的情況,CPU使用率的異常會(huì)使某個(gè)任務(wù)或者多個(gè)任務(wù)運(yùn)行異常,導(dǎo)致系統(tǒng)癱瘓[1]。所以,在設(shè)計(jì)軟件時(shí)要把CPU使用率監(jiān)測(cè)任務(wù)的等級(jí)放在最高,在監(jiān)測(cè)到異常時(shí),必須及時(shí)進(jìn)行處置,消除系統(tǒng)故障或抵消故障帶來(lái)的影響,提高系統(tǒng)對(duì)于時(shí)間相關(guān)的故障容錯(cuò)能力,保證系統(tǒng)正常運(yùn)行[2]。
系統(tǒng)在一段時(shí)間內(nèi),一個(gè)任務(wù)的CPU使用率是指系統(tǒng)運(yùn)行該任務(wù)所花費(fèi)時(shí)間長(zhǎng)度與該段時(shí)間長(zhǎng)度的比值,計(jì)算方法如式(1)所示。
Pcpu=(ttask/ttotal)×100%
(1)
其中,ttotal是統(tǒng)計(jì)CPU使用率時(shí)間段的時(shí)間長(zhǎng)度,ttask是在該段時(shí)間內(nèi),該任務(wù)運(yùn)行所耗費(fèi)的CPU時(shí)間。
在設(shè)計(jì)嵌入式實(shí)時(shí)軟件中,CPU使用率監(jiān)測(cè)周期選取得是否合理是監(jiān)測(cè)系統(tǒng)的關(guān)鍵,如果CPU使用率監(jiān)測(cè)周期選取過(guò)短,則會(huì)對(duì)系統(tǒng)資源造成浪費(fèi);如果CPU使用率監(jiān)測(cè)周期選取過(guò)長(zhǎng),則可能無(wú)法獲取準(zhǔn)確的數(shù)據(jù)。如圖1所示,CPU空閑狀態(tài)以白色的部分表示,CPU正在使用狀態(tài)以黑色的部分表示。假設(shè)CPU的監(jiān)測(cè)周期為0.5 s,在前一個(gè)0.5 s內(nèi),CPU空閑狀態(tài)僅為10%,而CPU的使用率則達(dá)到了90%;在后一個(gè)0.5 s內(nèi),CPU空閑狀態(tài)達(dá)到70%,而CPU的使用率僅為30%。兩個(gè)同等的時(shí)間段內(nèi)CPU的使用情況相差比較大。若以1 s為系統(tǒng)CPU的監(jiān)測(cè)周期,那么CPU的使用率為60%,這樣就無(wú)法監(jiān)測(cè)出CPU使用異常的情況。所以,為了得到可靠的CPU利用率,系統(tǒng)中正在被監(jiān)測(cè)任務(wù)的頻率應(yīng)大于或等于系統(tǒng)中其它任務(wù)運(yùn)行頻率的最大值[2],如式(2)所示。
fmonitor≥max(f1,f2,…,fi,…,fn),i∈[1,n]
(2)
其中,n為系統(tǒng)中任務(wù)的個(gè)數(shù),fi為系統(tǒng)中各個(gè)任務(wù)的運(yùn)行頻率。
Figure 1 Impact of CPU utilization ratio monitoring cycles圖1 CPU使用率監(jiān)測(cè)周期的影響
μC/OS-II和VxWorks操作系統(tǒng)是比較常用的嵌入式實(shí)時(shí)操作系統(tǒng),用戶可根據(jù)兩種操作系統(tǒng)提供的計(jì)算CPU使用率的步驟和方法來(lái)實(shí)現(xiàn)系統(tǒng)CPU使用率的監(jiān)測(cè)。本文重點(diǎn)介紹在μC/OS-II操作系統(tǒng)中CPU使用率的計(jì)算原理和步驟。μC/OS-II操作系統(tǒng)被廣泛應(yīng)用于工業(yè)器械、醫(yī)療設(shè)備和網(wǎng)絡(luò)設(shè)備等領(lǐng)域。μC/OS-II操作系統(tǒng)有一個(gè)統(tǒng)計(jì)時(shí)間的任務(wù),叫做OSTaskStat()。如果將系統(tǒng)配置常數(shù)OS_TASK_STAT_EN設(shè)為1,這個(gè)任務(wù)就會(huì)被建立。一旦得到允許,OSTaskStat()運(yùn)行1次/秒,計(jì)算當(dāng)前的CPU使用率。具體流程如下:首先,系統(tǒng)中TaskStart()調(diào)用統(tǒng)計(jì)初始化函數(shù)OSStatInit()。統(tǒng)計(jì)初始化函數(shù)OSStatInit()測(cè)定在沒(méi)有其他應(yīng)用任務(wù)運(yùn)行時(shí),空閑計(jì)數(shù)器osidlectr的計(jì)算速率。其次,系統(tǒng)統(tǒng)計(jì)初始化函數(shù)OSStatInit()調(diào)用時(shí)間延時(shí)函數(shù)OSTimeDly(),將自身延時(shí)2個(gè)時(shí)鐘節(jié)拍,以停止自身的運(yùn)行。然后,系統(tǒng)執(zhí)行優(yōu)先級(jí)最高的統(tǒng)計(jì)任務(wù)OSTaskStat()。此時(shí)CPU處于空閑任務(wù)OSTaskIdle中而osidlectr不停地加1,1 s后,空閑計(jì)數(shù)器將1 s內(nèi)計(jì)數(shù)的值存入空閑計(jì)數(shù)器最大值osidlectrMax中。而2個(gè)時(shí)鐘節(jié)拍后,空閑計(jì)數(shù)器osidlectr被清0,同時(shí)OSTaskStat()開(kāi)始計(jì)算CPU的使用率。這個(gè)任務(wù)運(yùn)行的周期是1 s,精確度是1%。計(jì)算如式(3)所示:
Pcpu(%)=100-osidlectr/(osidlectrMax/100)
(3)
其中,osidlectr為系統(tǒng)2個(gè)時(shí)鐘節(jié)拍內(nèi)空閑計(jì)數(shù)器計(jì)數(shù)的值,osidlectrMax為系統(tǒng)保存的空閑計(jì)數(shù)器最大值[3]。
本文采用的CPU使用率異常故障診斷算法是基于殘差的閾值——改進(jìn)序貫概率比測(cè)試SPRT(Sequential Probability Ratio Test)聯(lián)合算法,該算法能夠有效地改進(jìn)閾值分析法中對(duì)小值緩變性故障診斷不夠靈敏的缺點(diǎn),也能有效地改進(jìn)序貫概率比測(cè)試算法(SPRT)中不能實(shí)時(shí)判決階躍性故障和對(duì)故障診斷時(shí)間不能準(zhǔn)確判斷的缺點(diǎn)[4]。
閾值分析法是一種在規(guī)定的范圍內(nèi)設(shè)定殘差閾值的方法。閾值分析法能夠快速診斷出超出其閾值范圍的大值階躍性故障,對(duì)于超出其閾值范圍的小值階躍性故障則響應(yīng)緩慢。同時(shí),閾值分析法中合理地設(shè)定殘差閾值是檢測(cè)出故障的重要因素,通過(guò)系統(tǒng)給出的殘差值與設(shè)定的殘差閾值進(jìn)行比較,若殘差閾值設(shè)定過(guò)大,系統(tǒng)故障發(fā)生時(shí),若閾系統(tǒng)給出的殘差值小于設(shè)定殘差閾值,會(huì)造成系統(tǒng)故障診斷不夠?qū)崟r(shí)或發(fā)生漏檢;若殘差閾值設(shè)定過(guò)小,系統(tǒng)故障發(fā)生時(shí),若閾系統(tǒng)給出的殘差值大于設(shè)定殘差閾值,會(huì)讓系統(tǒng)發(fā)生錯(cuò)誤的判斷,造成虛警。
改進(jìn)SPRT算法是一種基于概率比假設(shè)檢驗(yàn),在給定虛警率和漏檢率的情況下,以最短的時(shí)間檢測(cè)出CPU使用率異常故障的方法。
假設(shè)由H0和H1分別表示系統(tǒng)運(yùn)行時(shí)的正常狀態(tài)和發(fā)生故障的狀態(tài),根據(jù)最大后驗(yàn)概率準(zhǔn)則可知:
1
(4)
式(4)可以轉(zhuǎn)換為:
1
(5)
其中,P(H0)和P(H1)分別為狀態(tài)H0和狀態(tài)H1的先驗(yàn)概率。系統(tǒng)運(yùn)行時(shí),采集殘差的N次值,得到采樣序列XN=[x1x2…xN],計(jì)算似然比LN(X):
(6)
從而計(jì)算可得對(duì)數(shù)似然比lnLN(X):
lnLN-1(X)+lnL(xN)
(7)
從公式中知,當(dāng)對(duì)數(shù)似然比lnLN(X)小于T(H1)時(shí),系統(tǒng)處于正常狀態(tài)。而當(dāng)系統(tǒng)處于故障狀態(tài)時(shí)對(duì)數(shù)似然比的值一直變大并且達(dá)到或者大于T(H1)。
假設(shè)給定虛警率α和漏檢率β,由Wald公式可得:
(8)
由式(8)可得:當(dāng)系統(tǒng)狀態(tài)正常時(shí),對(duì)數(shù)似然比逐漸在變小并變成負(fù)值,如果此時(shí)系統(tǒng)出現(xiàn)故障,對(duì)數(shù)似然比將逐漸變大,但對(duì)數(shù)似然比需要經(jīng)過(guò)幾步才能增加到判決門(mén)限。這種情況嚴(yán)重影響了故障檢測(cè)的實(shí)時(shí)性。在此基礎(chǔ)上引入補(bǔ)償環(huán)節(jié),在其起作用時(shí)可以消除系統(tǒng)運(yùn)行時(shí)帶來(lái)的延時(shí),同時(shí)在系統(tǒng)發(fā)生故障的情況下,系統(tǒng)能夠更加快速地檢測(cè)到故障[4]。
本文通過(guò)對(duì)比和分析閾值分析法和改進(jìn)SPRT算法的優(yōu)缺點(diǎn),設(shè)計(jì)出一種閾值-改進(jìn)SPRT聯(lián)合算法。該算法不僅結(jié)合了上述兩種算法各自的優(yōu)點(diǎn),而且通過(guò)決策手段克服了兩種算法各自的缺點(diǎn)。閾值-改進(jìn)SPRT聯(lián)合算法示意圖如圖2所示。
Figure 2 Schematic diagram for threshold-improved SPRT united algorithm圖2 閾值-改進(jìn)SPRT聯(lián)合算法示意圖
該算法將所得殘差的值分別輸入到閾值分析法和改進(jìn)SPRT算法,由兩種算法分別對(duì)輸入的殘差值進(jìn)行計(jì)算和比較,將閾值分析法和改進(jìn)SPRT算法分析的結(jié)果同時(shí)交給故障診斷機(jī)進(jìn)行分析和判決。當(dāng)對(duì)數(shù)似然比為負(fù)值時(shí),系統(tǒng)中傳感器給的殘差的值正在變小,可能出現(xiàn)大值階躍性故障,采用閾值分析法的結(jié)果更能夠檢測(cè)出故障結(jié)果。當(dāng)對(duì)數(shù)似然比為正增量時(shí),系統(tǒng)輸出的殘差可能出現(xiàn)小值緩變故障,則采用改進(jìn)SPRT算法檢測(cè)出結(jié)果[5]。
本文將任務(wù)運(yùn)行時(shí)占用的CPU使用率曲線的峰值點(diǎn)作為診斷算法中的殘差,通過(guò)設(shè)計(jì)的閾值-改進(jìn)SPRT聯(lián)合算法給出故障診斷結(jié)果。根據(jù)故障診斷結(jié)果判斷出任務(wù)的CPU使用率是否異常。
對(duì)于任何一個(gè)系統(tǒng),CPU使用率正常是系統(tǒng)正常運(yùn)行的重要因素。在嵌入式實(shí)時(shí)操作系統(tǒng)中,有很多種原因能夠造成系統(tǒng)的CPU使用率異常。從硬件層面來(lái)說(shuō),硬件運(yùn)行的性能和環(huán)境不同,可能造成CPU使用率不同。如果外部電源給硬件供電不足可能直接造成CPU停止工作。從軟件層面來(lái)說(shuō),系統(tǒng)中任務(wù)的異常調(diào)度或者任務(wù)進(jìn)入無(wú)限循環(huán)可能直接完全占用CPU,造成很?chē)?yán)重的后果[5]。
本文給出兩種處置CPU使用率異常的方式:?jiǎn)螜C(jī)CPU自檢測(cè)和雙機(jī)CPU互檢測(cè)。單機(jī)CPU自檢測(cè)處置CPU使用率異常主要是處理關(guān)于某個(gè)任務(wù)CPU使用率的異常,其處置方式有運(yùn)行備份任務(wù)和任務(wù)降低運(yùn)行頻率等。這兩種方式的處置類(lèi)型都是被動(dòng)容錯(cuò)。當(dāng)系統(tǒng)監(jiān)測(cè)到CPU使用率出現(xiàn)異常時(shí),系統(tǒng)只定位故障的具體位置,不分析故障的具體原因。對(duì)故障發(fā)生的部分進(jìn)行異常處置,為了保證系統(tǒng)正常運(yùn)行,盡量減少或者將故障控制在可控范圍之內(nèi)。
雙機(jī)CPU互檢測(cè)的處置方式是利用余度的思想以主從備份的方式實(shí)現(xiàn)兩個(gè)CPU之間的切換。主要思想是:兩個(gè)相同的硬件平臺(tái),假設(shè)雙機(jī)分別標(biāo)為CPU_A和CPU_B,并且假設(shè)CPU_A的優(yōu)先級(jí)高于CPU_B,系統(tǒng)運(yùn)行時(shí),CPU_A占據(jù)主控位置,同時(shí)CPU_B也在備份運(yùn)行,雙機(jī)之間利用Flexray總線進(jìn)行數(shù)據(jù)交叉?zhèn)鬏?。?dāng)CPU_A的CPU使用率異常且根據(jù)判決條件需要系統(tǒng)重啟才能重新恢復(fù)時(shí),系統(tǒng)通過(guò)Flexray總線將CPU_A的CPU異常信息傳給CPU_B,同時(shí)系統(tǒng)將主控權(quán)交給CPU_B。這種CPU異常處置方法是主動(dòng)糾錯(cuò)。當(dāng)系統(tǒng)監(jiān)測(cè)到CPU使用率出現(xiàn)異常時(shí),系統(tǒng)能夠主動(dòng)分析故障的嚴(yán)重程度,從而進(jìn)行判決。針對(duì)這一方式有兩種CPU使用率異常處置方式:異常任務(wù)重啟和系統(tǒng)重啟。當(dāng)系統(tǒng)中任務(wù)或者系統(tǒng)需要重新啟動(dòng)時(shí),為了避免給系統(tǒng)運(yùn)行帶來(lái)嚴(yán)重的后果,將CPU使用率異常的硬件作為備份,進(jìn)行故障恢復(fù),而CPU使用率正常的系統(tǒng)將繼續(xù)工作運(yùn)行。
上述四種處置方式能夠達(dá)到系統(tǒng)所需要的容錯(cuò)目的[6],如表1所示。
Table 1 CPU utilization ratio exception handling
運(yùn)行備份任務(wù)是單機(jī)處置CPU使用率異常的一種常用方法。由于每個(gè)任務(wù)運(yùn)行時(shí)占用系統(tǒng)不同的運(yùn)行資源,采用運(yùn)行備份的處置方式可以合理地分配CPU資源。系統(tǒng)中適合創(chuàng)建的備份任務(wù)有以下幾類(lèi):
(1)計(jì)算類(lèi)任務(wù)。計(jì)算類(lèi)任務(wù)是指需要進(jìn)行高精度運(yùn)算和計(jì)算量很大的任務(wù)。運(yùn)算精度越高,計(jì)算得到的結(jié)果越精確,此類(lèi)任務(wù)可用備份任務(wù)來(lái)代替原有的任務(wù)進(jìn)行計(jì)算。如飛行控制系統(tǒng)中計(jì)算傳感器信息的任務(wù)、計(jì)算導(dǎo)航信息的任務(wù)以及控制律解算的任務(wù)等。
(2)功能可精簡(jiǎn)類(lèi)任務(wù)。嵌入式系統(tǒng)中有很多任務(wù)是用來(lái)傳輸大量數(shù)據(jù)的,在時(shí)間一定的前提下,數(shù)據(jù)量越少,對(duì)系統(tǒng)的CPU使用率就越低。此類(lèi)任務(wù)可以對(duì)原有的數(shù)據(jù)或計(jì)算等信息進(jìn)行簡(jiǎn)化,并且在CPU使用率較高的情況下能夠切換到備用任務(wù),使CPU的峰值出現(xiàn)率減少,保證系統(tǒng)運(yùn)行正常[7]。如在飛行控制系統(tǒng)中傳感器的數(shù)據(jù)傳輸任務(wù)、遙控遙測(cè)數(shù)據(jù)接收和發(fā)送任務(wù)、執(zhí)行機(jī)構(gòu)的數(shù)據(jù)接收和發(fā)送任務(wù),以及故障注入的數(shù)據(jù)接收和發(fā)送任務(wù)等。
在嵌入式系統(tǒng)中,不僅任務(wù)的調(diào)度周期和任務(wù)的調(diào)度方式與CPU的使用率有關(guān),任務(wù)運(yùn)行的頻率也是占用CPU資源的一個(gè)重要因素。某些任務(wù)運(yùn)行的頻率越高,其運(yùn)行效果越好。若系統(tǒng)的CPU資源被這些任務(wù)占用得過(guò)多,適當(dāng)?shù)亟档皖l率,降低CPU資源使用率,有助于系統(tǒng)運(yùn)行。如以下幾類(lèi)任務(wù):
(1)監(jiān)測(cè)類(lèi)任務(wù)。在設(shè)計(jì)軟件時(shí),監(jiān)測(cè)類(lèi)任務(wù)的運(yùn)行頻率一般都很高,若系統(tǒng)出現(xiàn)故障,監(jiān)測(cè)得越快,越能及時(shí)發(fā)現(xiàn)故障,說(shuō)明系統(tǒng)運(yùn)行的效果越好。此類(lèi)任務(wù)對(duì)于系統(tǒng)的要求較高,占用CPU資源較多。如在飛行控制系統(tǒng)中,傳感器故障監(jiān)測(cè)任務(wù)、遙控遙測(cè)監(jiān)測(cè)任務(wù)以及執(zhí)行機(jī)構(gòu)監(jiān)測(cè)任務(wù)等。
(2)通信類(lèi)任務(wù)。通信類(lèi)任務(wù)一般是與外界的系統(tǒng)進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)量大,通信速度越快,系統(tǒng)運(yùn)行的效果越好。這類(lèi)任務(wù)更容易加大系統(tǒng)的負(fù)擔(dān),在設(shè)計(jì)軟件時(shí),在滿足系統(tǒng)正常功能的情況下,盡量降低頻率,從而降低CPU資源使用率[8]。如飛行控制系統(tǒng)中的遙控遙測(cè)通信、傳感器數(shù)據(jù)通信以及Flexray總線數(shù)據(jù)通信等。
異常任務(wù)重啟是指系統(tǒng)檢測(cè)到一個(gè)或者多個(gè)任務(wù)運(yùn)行異常,并且CPU的使用率嚴(yán)重超過(guò)了系統(tǒng)能夠承受的最大值。這時(shí)系統(tǒng)重新將任務(wù)初始化,直到所有任務(wù)恢復(fù)正常。其過(guò)程是:系統(tǒng)在任務(wù)重啟之前首先將系統(tǒng)的狀態(tài)保存到系統(tǒng)的內(nèi)存中,然后屏蔽非系統(tǒng)任務(wù),最后將系統(tǒng)的任務(wù)重新初始化,重新分配每個(gè)任務(wù)的堆棧情況,從而使系統(tǒng)任務(wù)恢復(fù)正常[9]。
上述計(jì)算類(lèi)任務(wù)、功能可精簡(jiǎn)類(lèi)任務(wù)、監(jiān)測(cè)類(lèi)任務(wù)以及通信類(lèi)任務(wù)都可以進(jìn)行任務(wù)異常重啟,進(jìn)而恢復(fù)CPU的使用率。
看門(mén)狗是實(shí)現(xiàn)系統(tǒng)重啟的手段之一,其作用也是防止程序“跑飛”。利用看門(mén)狗實(shí)現(xiàn)系統(tǒng)的重啟是比較便捷和有效的。當(dāng)系統(tǒng)的CPU使用率過(guò)高時(shí),在一定時(shí)間段內(nèi)若系統(tǒng)的CPU使用還未恢復(fù)正常情況,系統(tǒng)通過(guò)軟件設(shè)定不對(duì)看門(mén)狗定時(shí)進(jìn)行“喂狗”,系統(tǒng)將自動(dòng)重新啟動(dòng),系統(tǒng)重新給任務(wù)劃分堆棧,程序?qū)⒅匦逻\(yùn)行。系統(tǒng)重啟后,首先會(huì)調(diào)用系統(tǒng)重啟前保存狀態(tài)的任務(wù),將之前保存的關(guān)鍵狀態(tài)從系統(tǒng)的內(nèi)存中讀取出來(lái),保證系統(tǒng)能夠接著系統(tǒng)重啟前的狀態(tài)繼續(xù)運(yùn)行[10]。
Figure 3 Flow chart of CPU utilization radio exception handling 圖3 CPU使用率異常處理流程圖
CPU使用率異常處理流程如圖3所示。程序運(yùn)行開(kāi)始時(shí),主控為CPU_A,從控為CPU_B。根據(jù)造成單機(jī)CPU使用率異常的情況選取兩種不同的CPU處置方式。單機(jī)用運(yùn)行備份模式和任務(wù)降頻模式進(jìn)行處置,如若無(wú)法有效地降低CPU的使用率,系統(tǒng)將主控變?yōu)镃PU_B,同時(shí)將CPU_A進(jìn)行任務(wù)重啟或者系統(tǒng)重啟。當(dāng)CPU_A系統(tǒng)重啟后任務(wù)運(yùn)行恢復(fù)正常時(shí),主控將重新變?yōu)镃PU_A,從控變?yōu)镃PU_B。若系統(tǒng)重啟失敗,則主控CPU_B繼續(xù)運(yùn)行。
在實(shí)際工程運(yùn)用中,系統(tǒng)重啟或者任務(wù)重啟比其它降低系統(tǒng)CPU使用率方法的風(fēng)險(xiǎn)要大得多,一旦系統(tǒng)重啟失敗,可能會(huì)造成嚴(yán)重的后果。本文設(shè)計(jì)的CPU使用率處置方法加入了余度的思想,使系統(tǒng)運(yùn)行更加安全、可靠。
本文在某飛行控制系統(tǒng)環(huán)境中進(jìn)行仿真驗(yàn)證。飛行控制軟件是典型的嵌入式軟件,實(shí)時(shí)操作系統(tǒng)是μC/OS-II系統(tǒng)。仿真驗(yàn)證環(huán)境包含四個(gè)部分:飛行控制系統(tǒng)、仿真系統(tǒng)、遙控遙測(cè)系統(tǒng)和故障注入系統(tǒng)。飛行控制系統(tǒng)是由飛行控制計(jì)算機(jī)和機(jī)載飛行控制軟件組成;仿真控制系統(tǒng)是由仿真機(jī)和仿真軟件組成;遙控遙測(cè)系統(tǒng)是由遙控遙測(cè)計(jì)算機(jī)和相應(yīng)的遙控遙測(cè)軟件組成;故障注入系統(tǒng)是由故障注入界面和相應(yīng)的故障注入軟件組成。其中飛行控制計(jì)算機(jī)是基于MPC5674開(kāi)發(fā)的嵌入式計(jì)算機(jī);飛行控制軟件是基于μC/OS-II操作系統(tǒng)開(kāi)發(fā)的軟件[2]。飛行控制軟件是主要的驗(yàn)證對(duì)象,周期調(diào)度的任務(wù)有20個(gè)(最大可建立63個(gè)任務(wù)),最小調(diào)用的周期任務(wù)是10 ms。CPU監(jiān)測(cè)任務(wù)作為最高級(jí)優(yōu)先級(jí),選取監(jiān)測(cè)周期為20 ms。由于本文的篇幅有限,仿真僅給出部分驗(yàn)證曲線。仿真系統(tǒng)、遙控遙測(cè)系統(tǒng)和故障注入系統(tǒng)作為輔助手段,為驗(yàn)證的信息提供相應(yīng)的數(shù)據(jù),對(duì)應(yīng)的軟件均為VC6.0環(huán)境下開(kāi)發(fā)的WinForm軟件。
減少CPU使用率曲線中的峰值和繁忙點(diǎn)是單機(jī)CPU任務(wù)備份和任務(wù)降頻運(yùn)行的關(guān)鍵。以傳感器數(shù)據(jù)發(fā)送任務(wù)為樣例任務(wù),通過(guò)對(duì)數(shù)據(jù)發(fā)送頻率的降低和減少數(shù)據(jù)幀中不需要的數(shù)據(jù)作為備份模塊功能進(jìn)行仿真驗(yàn)證。同時(shí),為了更具一般性,軟件測(cè)試中僅有基本任務(wù)和傳感器發(fā)送數(shù)據(jù)任務(wù)。得到的CPU使用率曲線如圖4所示。圖4中,縱軸為CPU使用率百分比,橫軸為時(shí)間,單位為ms。
Figure 4 Exception handling of CPU utilization ratio—backup tasks and task frequency down圖4 CPU使用率異常處置—備份任務(wù)和任務(wù)降頻
圖4所示,實(shí)線表示傳感器發(fā)送的數(shù)據(jù)幀是每幀39 B,虛線表示將傳感器的數(shù)據(jù)幀降為每幀20 B。通過(guò)閾值分析法可知,數(shù)據(jù)幀長(zhǎng)的CPU使用率的峰值超過(guò)給定的閾值。根據(jù)圖2中的故障診斷機(jī)制診斷出系統(tǒng)故障的嚴(yán)重程度進(jìn)行故障處置[8]。
縱向進(jìn)行比較,在運(yùn)行備份任務(wù)時(shí),CPU使用率的峰值由約2.82%降低到約1.78%,由于系統(tǒng)調(diào)度任務(wù)時(shí)是將任務(wù)從睡眠態(tài)轉(zhuǎn)至運(yùn)行狀態(tài),會(huì)消耗系統(tǒng)的CPU資源,其消耗約為0.6%。在調(diào)用了備份任務(wù)后CPU的使用率峰值降低了1.04%,最多減少了約49%。從橫向比較,在降低任務(wù)運(yùn)行頻率后,系統(tǒng)峰值出現(xiàn)的次數(shù)減少了一倍。由仿真結(jié)果可知,系統(tǒng)的備份任務(wù)和降低任務(wù)運(yùn)行頻率能夠有效降低任務(wù)對(duì)CPU資源的占用率。備份模塊保留的功能越少,對(duì)降低CPU使用率的峰值效果越好。任務(wù)的頻率下降得越多,對(duì)降低CPU使用率的峰值效果越好。
以飛行控制軟件為例,飛行控制軟件需要多任務(wù)協(xié)調(diào)運(yùn)行。并且μC/OS-II實(shí)時(shí)操作系統(tǒng)是基于任務(wù)搶占優(yōu)先級(jí)的方式運(yùn)行的,任務(wù)進(jìn)入死循環(huán)是常見(jiàn)的錯(cuò)誤,該錯(cuò)誤明顯的標(biāo)志是CPU使用率較高。異常任務(wù)的重啟是有效處理這一問(wèn)題的方法之一。仿真過(guò)程中,通過(guò)故障注入軟件向飛行控制軟件中注入任務(wù)無(wú)限循環(huán)指令,當(dāng)飛行控制軟件響應(yīng)這一指令時(shí),CPU的使用率在t=400 ms時(shí)發(fā)生突變,此時(shí)飛行控制系統(tǒng)響應(yīng)故障處置邏輯將任務(wù)重新啟動(dòng),此時(shí)主CPU的主控權(quán)切換給從CPU。
從圖5中可知,針對(duì)系統(tǒng)的某一個(gè)任務(wù)進(jìn)行仿真驗(yàn)證,在時(shí)間t=400 ms時(shí)注入任務(wù)異常的故障指令,在時(shí)間t從400 ms 到1 200 ms,CPU使用率峰值超過(guò)20%的監(jiān)測(cè)點(diǎn)有15個(gè),根據(jù)CPU使用率的判決條件得出該任務(wù)運(yùn)行異常,嚴(yán)重占用了CPU資源,系統(tǒng)響應(yīng)故障處置,進(jìn)行任務(wù)重新啟動(dòng),從而使任務(wù)運(yùn)行恢復(fù)正常,這種方法能夠使系統(tǒng)恢復(fù)正常[11]。
Figure 5 Exception handling of CPU utilization ratio-exception task restart圖5 CPU使用率異常處置-異常任務(wù)重啟
系統(tǒng)重啟是指多個(gè)任務(wù)出現(xiàn)異常運(yùn)行情況,系統(tǒng)進(jìn)行重新啟動(dòng)。其故障注入的方法與單個(gè)任務(wù)異常重啟相同。仿真過(guò)程中,通過(guò)故障注入軟件向飛行控制軟件中注入任務(wù)無(wú)限循環(huán)指令,當(dāng)飛行控制軟件響應(yīng)這一指令時(shí),CPU的使用率在t=400 ms時(shí)發(fā)生突變,此時(shí)飛行控制系統(tǒng)響應(yīng)故障處置邏輯,將任務(wù)重新啟動(dòng),雙機(jī)主控CPU將會(huì)切換為從控CPU。
從圖6可知,針對(duì)系統(tǒng)的多個(gè)任務(wù)進(jìn)行仿真驗(yàn)證,在時(shí)間t=400 ms時(shí)注入任務(wù)異常的故障指令,在時(shí)間t從400 ms 到1 200 ms,CPU使用率峰值超過(guò)20%的監(jiān)測(cè)點(diǎn)有15個(gè),根據(jù)CPU使用率的判決條件得出系統(tǒng)運(yùn)行異常,嚴(yán)重占用了CPU資源,系統(tǒng)響應(yīng)故障處置,進(jìn)行系統(tǒng)重新啟動(dòng),從而使任務(wù)運(yùn)行恢復(fù)正常,這種方法能夠使系統(tǒng)恢復(fù)正常。
Figure 6 Exception handling of CPU utilization ratio-system restart圖6 CPU使用率異常處置-系統(tǒng)重啟
本文結(jié)合嵌入式系統(tǒng)CPU使用率的特點(diǎn),在能夠合理監(jiān)測(cè)系統(tǒng)運(yùn)行狀態(tài)的情況下,提出雙機(jī)切換處置系統(tǒng)CPU使用率異常的方法。這種方法在保證系統(tǒng)正常運(yùn)行的情況下,根據(jù)引發(fā)CPU異常的原因不同,能夠有效地降低CPU的使用率,提高系統(tǒng)的容錯(cuò)能力,對(duì)于保證嵌入式系統(tǒng)的正常運(yùn)行有著重要的作用[12]。