韓建亞,吳智博,劉卓鉞,董 劍,劉宏偉
(哈爾濱工業大學 計算機科學與技術系,黑龍江 哈爾濱150001)
系統健壯性是衡量系統在異常輸入或壓力環境下保持正常工作能力的一種度量,也就是說系統健壯性評測可以看作是操作系統抵御外界錯誤的能力,包括上層應用程序引發的錯誤和底層硬件層引發的錯誤或者是從驅動設備帶來的錯誤[1]。近年來,關于健壯性評測的方法有很多,例如典型的卡內基梅隆大學的研究項目Ballisa是通過向系統調用輸入異常參數[2]來檢測進程中止或系統崩潰現象來測試系統健壯性,之后的研究又將這種方法擴展到Windows 2000,WindowsNT4and XP系統中[3]。關于用戶使用剖面分析[4]的研究也越來越多,典型的有驅動程序使用剖面分析的研究[5],這種剖面技術雖然難于分析,但是一旦很好的得到使用剖面結果,包含具體函數發生頻率,發生持續時間比重等結果,就可以更好的測試熱點代碼,能夠顯著的降低測試時間和提高測試效率。這種使用剖面分析的方法也將會逐漸的應用到商業測試,網絡故障診斷等領域中[6]。
所以在健壯性測試中,本文采用在傳統的健壯性評測方法之前引入用戶使用剖面分析過程,并從多個層次考慮系統健壯性問題,首先通過用戶使用剖面分析得到相應應用程序運行過程中系統調用接口和內核函數接口的使用情況,然后根據使用剖面分析結果找到熱點函數,針對這些使用頻率包括使用時間比率比較高的函數,以故障注入[7]的方式進行健壯性評測,最后根據使用剖面分析結果和健壯性評測結果進行整體的健壯性分析。
目標機操作系統可以分為4個層次,即4個子系統,分別是用戶進程、系統調用接口、內核、硬件控制器。目標系統結構圖如圖1所示。

圖1 目標機系統結構
本文從系統調用接口層和內核層兩個層次來考慮系統健壯性問題。
健壯性評測結構主要分為3個步驟:①用戶使用剖面分析。主要包括系統調用剖面分析和內核函數剖面分析,給出函數使用情況。②故障注入。根據用戶使用剖面分析結果對目標函數進行故障注入,包括系統調用的故障注入和內核函數的故障注入,通過故障注入獲得函數接口失效率。③結果分析。結合用戶使用剖面分析與故障注入結果進行健壯性分析。
由于進行故障注入過程中,會出現系統重啟和系統死機等現象[8],所以在進行健壯性評測過程中使用雙臺機器,通過局域網相連,來監控目標機狀態。測試架構主要包括主控端和目標機端,其中主控端主要包括結果回收,結果分析,數據處理和心跳檢測[9]模塊,目標機端實現評測主要功能,主要包括使用剖面分析,故障注入,結果分析3部分。圖2為實驗測試平臺整體架構圖。

圖2 測試平臺系統結構
2.1.1 運行環境下使用剖面分析方法
由于Linux系統層次實現方式不同,這里將使用剖面分析分為系統調用分析和內核函數分析。
其中都是在應用負載運行過程中進行。通過修改strace工具和kernprof工具分別統計系統調用和內核函數的使用時間比重和調用次數比重,根據統計結果結合用戶要求選擇綜合使用頻率比較高的函數進行故障注入。整體上包括用戶輸入應用負載名稱,注明統計條件,最后分別得到系統調用和內核函數列表,包括應用負載運行過程中函數被調用次數[10],函數發生比率,調用時間,調用時間比例等結果。圖3為使用剖面分析流程圖。

圖3 用戶使用剖面分析流程
2.1.2 使用剖面分析度量方法
參照C.Sarbu中關于使用剖面分析在驅動程序的應用[11],本文針對系統調用和內核函數使用特點,定義以下使用剖面分析度量方法。分別針對系統調用和內核函數,設計基于函數接口發生次數的度量方法,基于持續時間的度量方法和兩者結合的綜合度量方法:
(1)基于發生次數的度量方法:系統調用發生比重(NKOWi)和內核函數發生比重 (KOWi)分別表示應用程序運行過程中調用的第i個系統調用及內核函數發生次數占總共調用的系統調用和內核函數的比重。計算方式如下

式中:NKOCi、KOCi——第i個系統調用、內核函數在應用程序運行過程中的調用次數。
(2)基于持續時間的度量方法:系統調用持續時間比重 (NKDWi)和內核函數持續時間比重 (KDWi)分別表示應用程序運行過程中調用的第i個系統調用及內核函數調用時間占應用程序運行總時間的比重。
(3)綜合度量方法:為了更準確的度量系統用戶使用剖面,結合兩種度量方法,本文針對系統調用和內核函數分別給出進行用戶使用剖面分析的綜合度量方法,計算方法如下,其中 (λ∈R,0≤λ≤1)

對系統調用層和內核函數層的健壯性測試是通過對單一的調用接口進行異常參數形式的故障注入實現的,參數生成是基于Ballista異常參數思想[12]生成故障用例,圖4為故障注入流程圖。

圖4 故障注入流程
整體故障注入過程如下,具體的系統調用和內核函數由于系統層次不同,實現的方式也不同:①對故障參數用例進行初始化;②根據異常參數調用被測函數,并記錄系統反映;③釋放構造參數用例所申請的資源。
按照前邊的介紹,通過用戶使用剖面分析得到故障注入目標后,對目標函數進行故障注入,最后通過以下方法將故障注入后的接口失效率[13]同接口使用情況結合起來。由此得到目標系統在運行相應應用程序過程中的健壯性。計算方法如下,其中NKR,KR分別為系統調用和內核函數健壯性向量NKRi,KRi分別表示第i個函數的健壯性。NKCC,NKCR,NKCall分別表示系統調用測試災難性失效,重啟和測試的總次數,同理對于內核函數。于是內核函數和系統調用的健壯性分別為Rker,Rnker


3.1.1 系統調用使用剖面分析
圖5給出top應用在運行過程中系統調用的整體使用剖面分析結果,橫坐標表示使用系統調用的個數n,其中系統調用的使用次數從左到右依次增加。縱坐標分別表示取前n個系統調用的發生頻率之和,持續時間比率之和及λ=0.5,λ=0.75時的綜合使用頻率之和。由圖可以看出top應用在運行過程中總共使用了28個函數,遠遠小于系統的總系統調用個數,由此可見操作系統對系統調用的使用是不均勻分布的。

圖5 系統調用使用剖面整體結果
相對于圖5,圖6給出了在這28個被調用的系統調用中前7個函數的發生次數比率,持續時間比率,加權后的綜合使用比率及前i個函數的綜合使用比率之和,其中綜合比率中λ取值0.5。從圖中可以看出前7個函數使用比率之和就達到了95%以上,可以看出在運行狀態下,僅這28個系統調用的使用就是不均勻的。

圖6 系統調用使用剖面具體分析
為了分析方便,這里定義測試覆蓋率C以及測試縮減比率T[14],其中C代表所選擇的前i個函數發生次數之和占總測試數目的比例,T代表這i個函數占總函數個數的比例。
覆蓋率和測試縮減比率關系如表1所示。可以看出在覆蓋率要求95%的情況下,測試縮減比率分別為79%,71%和75%,綜合考慮測試覆蓋率和測試縮減率,本文選用覆蓋率達到95%的函數列表作為系統調用故障注入對象。

表1 系統調用測試覆蓋率與測試縮減率對比
假設對每個系統調用的測試消耗是一樣的,實驗結果表明由于在具體應用中函數使用頻率的顯著分布不均勻,所以根據剖面分析結果進行測試的函數比例顯著降低,而且這種分析方法覆蓋率達到95%以上,所以可以證明這種用戶使用剖面分析方法極大的減少了測試數量同時有效的提高了測試效率。
3.1.2 內核函數使用剖面分析結果
類似系統調用使用剖面分析方法,圖7給出了top應用運行過程中內核函數的整體使用剖面分析結果,應用運行過程中共使用內核函數1000多個,但是僅前115個函數就使得測試覆蓋率C達到將近90%,有此得到測試縮減率T達到將近90%。表2給出了內核函數使用剖面分析中覆蓋率C和測試縮減率T的關系。

圖7 內核函數使用剖面整體分析

表2 kernel內核測試覆蓋率與測試縮減率對比
由此可見用戶使用剖面分析對內核函數測試的影響更顯著,所以對內核函數進行使用剖面分析極大減少了測試數量,對健壯性評測的意義關鍵。
3.1.3 使用剖面分析對比結果
圖8給出了剖面分析的一些對比結果,分別為測試覆蓋率C為95%,99%情況下的系統調用和內核函數總函數個數同測試函數個數的比例對比圖,其中最后給出了top應用運行過程中,使用的內核函數和系統調用個數的比例對比圖。

圖8 使用剖面分析對比結果
從圖8可以看出,對于系統調用和內核函數來說,當覆蓋率達到95%時,函數測試個數占總函數個數的比例是非常小的,同時內核函數和系統調用使用個數比例相差非常大,由此可以看出,本文從系統調用層和內核函數兩個層次整體考慮健壯性是非常有意義的,因為應用程序有可能只使用了很少的系統調用,卻調用了大量的底層內核函數來和硬件打交道,這種多層次的健壯性評測方法很好的解決了這種問題,很大的提高了單層次健壯性評測的準確性。
通過運行3種類型的工作負載,包括計算密集型工作負載,圖像密集型負載和網絡密集型負載[15],將得到的使用剖面分析結果和函數接口失效率結果按照式 (7),式(8)結合起來,得到系統在某種工作負載下的具體健壯性結果對比圖如圖9所示。

圖9 健壯性對比結果
圖9中分別列出在3種工作負載下,結和用戶使用剖面分析的健壯性結果同單一接口測試得到的系統平均健壯性結果的對比圖。
從圖9中可以看出,本文提出的健壯性測試方法得到的健壯性結果整體上高于單一接口測試方法得到的平均健壯性結果,這主要是因為高使用頻率的函數的失效比例要低于其它函數。由此可以說明系統對經常使用的函數的設計更加健壯。同時可以看出,內核函數的失效率要高于系統調用的失效率。這是因為對內核函數的故障注入能夠引發內核態的故障,其故障的嚴重性有時要大于用戶態能夠引發的故障。
本文提出的基于使用剖面分析的多層次的系統健壯性評測方法,在傳統的健壯性評測之前加入用戶使用剖面分析,通過使用剖面分析可以有效的減少測試數量,同時這種方法也可以找到熱點函數,可以針對特定的應用,提高使用頻率較高的函數的健壯性。目前該方法只分析了單個操作系統的健壯性評測結果,但是系統通用于不同的應用負載,今后可以運行多個應用負載,特別是針對專門用途的工作負載,并且可以將系統擴展到不同類型的操作系統中。
[1]Kanoun K,Spainhower L.Dependability benchmarking for computer systems[M].Wiley:IEEE Computer Society Press,2008.
[2]BIAN Wei,ZUO Decheng,QI Xin,et al.System robustness testing based on SWIFI [J].Journal of Harbin Institute of Technology,2009,41 (2):1-7 (in Chinese). [邊維,左德承,祁鑫,等.基于軟件實現的故障注入的系統健壯性測試研究 [J].哈爾濱工業大學學報,2009,41 (2):1-7.]
[3]JU Xiaoen,ZOU Hengming.Platform-based software reliability forecast and selection [D].Shanghai:Shanghai Jiaotong University,2009(in Chinese).[鞠曉恩,鄒恒明.基于平臺的軟件可靠性預測與選擇 [D].上海:上海交通大學,2009.]
[4]ZENG Fanping,LI Juan,LI Ling,et al.A fault injection approach based on operational profile [C].5th International Conference on Wireless Communications Networking and Mobile Computing,2009.
[5]Johansson A,Suri N.Error propagation in operating systems[C].Proceedings of the International Conference on Dependable Systems and Networks,2005:86-95.
[6]Kumar K S,Misra R B.Software operational profile based test case allocation using fuzzy logic [J].International Journal of Automation and Computing,2007,4 (4):388-395.
[7]YU Bin,LIU Hongwei,CUI Gang,et al.Research and design in high-available dual fault-tolerance server [J]. Computer Engineering and Design,2006,27 (9):1524-1525 (in Chinese).[于斌,劉宏偉,崔剛,等.高可用雙機容錯服務器的研究與設計 [J].計算機工程與設計,2006,27 (9):1524-1525.]
[8]Mitra S,Seifert N.Robust system design with built-in softerror resilience[J].IEEE Computer,2005,38 (2):43-52.
[9]QIAN Yong,WU Jian.Framework of high availability cluster system [J].Ordnance Industry Automation,2008,27 (5):64-66.
[10]JU Xiaoen,ZOU Hengming.Operating system robustness forecast and selection [C].19th International Symposium on Software Reliability Engineering,2008:107-116.
[11]SARBU C,Johansson A,SURI N.Profiling the operational behavior of OS device drivers [C].19th International Symposium on Software Reliability Engineering,2008.
[12]Moraes R.Injection of faults at component interfaces and inside the component code:are they equivalent [C].Proc of EDCC,2006:53-64.
[13]Johansson A,Suri N,Murphy B.On the selection of error model(s)for OS robustness evaluation [C].International Conference on Dependable Systems and Networks,2007:502-511.
[14]Sarbu C,Johansson A,Fraikin F,et al.Improving robust
ness testing of COTS OS extensions [G].LNCS 4328:In
ternational Service Availability Symposium,2006:120-139.
[15]Kanoun K,Crouzet Y,Kalakech A,et al.Benchmarking the dependability of windows and Linux using PostMarkTM workloads [C].International Symposium on Software Reliability Engineering,2005:11-20.