楊攀飛 于子桐 牟特
(基礎軟硬件性能與可靠性測評工業和信息化部重點實驗室工業和信息化部電子第五研究所 廣東省廣州市 510610)
在信息技術應用創新的大背景下,對自主、安全、穩定提出更高要求,操作系統是計算機軟件和應用正常運行的必備基礎條件,其穩定性與上下游軟硬件可靠性正相關。操作系統穩定性是指在有異常輸入或壓力條件下,系統能夠繼續正確運行的程度,即當其上運行的應用、硬件層或設備驅動器錯誤時,操作系統拒絕或反應能力的指標。當前國產操作系統大多沿用Linux技術體系及成果,Linux作為宏內核的典型代表,除最基本的進程管理、線程管理、內存管理外,文件系統、驅動、網絡協議等均在內核模塊,優點是效率高,缺點是穩定性差,通過國產操作系統穩定性測試技術研究進而提升其穩定性是信息技術應用創新的重要工作。
國產操作系統基于Linux 操作系統二次開發,通常采用同一個版本針對龍芯、飛騰等不同技術路線CPU特點和需求進行延伸定制,大部分模塊功能穩定、重用性高,因此測試過程中易集中出現問題,導致多次回歸。
目前針對國產操作系統穩定性測試主要使用開源Linux 操作系統測試工具,此類工具測試目標較為單一、缺乏集成測試功能,沒有穩定的開發團隊維護升級,運行環境需求也各不相同,針對不同版本的操作系統和腳本語言,無良好的操作界面,使用感不友好。
因此,通過自主開發、綜合應用、引入完善開源軟件測試工具,制定有效可行的測試計劃、執行準確完整的測試用例,構建全過程管理的統一高效的自動化測試平臺非常有必要,用以保證國產操作系統研發、使用和維護時的質量穩定性,滿足建立完整的國產操作系統生態鏈的需要。
根據國產操作系統特點,結合用戶需求開發測試用例庫,涵蓋操作系統的不同模塊,比如CPU、GPU、內存、I/O、網絡等,并提供自動化和半自動化的測試接口,從而對國產操作系統進行自動化的穩定性測試及評價。
操作系統穩定性測試工具采用MVC設計模式,模型,視圖,控制器分離,可分為控制端、執行測試和文件系統三個部分。測試工具運行在控制端,包含測試配置模塊、數據處理模塊、和總控模塊三個部分。操作系統穩定性設計流程圖如圖1所示。
測試參數配置模塊主要提供對單獨模塊測試參數的配置,可通過修改測試參數配置實現自定義測試。配置項與測試工具相關,比如內存測試提供的配置項有數組大小,測試次數,編譯優化,多線程等,也可根據需要自由配置最為合適的參數組合。
數據處理模塊主要負責收集測試中生成的測試數據,實時更新測試進度信息,并對測試數據做進一步分析處理,計算測試數據的均值,最大值,變異系數等,通過熵值法得到該測試下各項性能指標的權重,綜合計算最終穩定性,并根據穩定性區間等級確定該測試的穩定性等級。
總控模塊負責啟動整個系統,控制整個測試過程。測試前,讀入系統參數更新界面中的相關信息,并根據測試參數配置編譯并啟動測試腳本;測試中,對測試進度進行監控,得到實時信息;測試結束后,對測試過程產生的數據做進一步分析,得到測試模塊的穩定性。
國產操作系統穩定性測試系統主要采用Java語言實現,具備平臺可移植性;各測試腳本具有配置界面,便于在不同的條件下對國產操作系統穩定性進行測試;各指標的穩定性通過變異系數計算求得,該系數廣泛應用于諸多領域中,本系統將該系數移植到國產操作系統的穩定性評估中,具有一定的含義;為了綜合不同的指標,采用熵值法對不同指標分配權重,更加客觀。
在功能實現方面,操作系統穩定性測試工具支持以下功能:
(1)測試參數配置,對于單獨模塊的測試,可通過修改測試參數配置實現自定義測試,配置項和具體使用到的測試工具相關。
(2)穩定性分析,通過調用第三方內存測試工具,得到一系列的測試數據用于穩定性分析,當有多個指標時,采用熵值法進行綜合評估。
(3)記錄歷史測試結果,當測試完成時,會將本次測試的一些重要信息記錄在文件中,可用于對比分析。
(4)選擇測試模塊,綜合測試模塊中包含各個模塊的測試,用戶可根據需要選擇不同的測試組合進行綜合測試。
(5)上傳文件,選擇上傳待分析的測試數據,一般為文本文件。
(6)穩定性分析,首先會對上傳的文件做校驗,檢查其文件內容格式是否正確,再對文件內容做進一步分析,得到各指標值。
(7)支持測試結果的持久化保存及管理。
在界面及具體測試模塊實現方面,介紹如下:
2.3.1 系統主界面
系統主界面如圖2所示,通過選項卡進入不同模塊的測試界面。
2.3.2 CPU穩定性測試模塊
CPU穩定性測試選用的工具為sysbench,其對CPU的測試是在指定時間內,循環進行素數計算。編程公式:對正整數n,如果用2到根號n之間的所有整數去除,均無法整除,則n為素數。
CPU穩定性測試模塊界面如圖3所示,主要包括四個部分,分別是參數配置欄,輸出控制臺,顯示測試結果的結果集以及趨勢圖部分。
參數配置部分包括了sysbench工具幾個主要的測試參數,其含義分別如下:
(1)素數個數上限(cpu-max-prime):若設置為3,則表示2、3、5(這樣要計算1-5共5次);若設置為10,則表示2、3、5、7、11、13、17、19、23、29(這樣要計算1-29共29次);默認值為10000。
(2)線程數(threads)若設置為1,則sysbench僅啟動1個線程進行素數的計算;若設置為2,則sysbench會啟動2個線程,同時分別進行素數的計算;默認值為1。
(3)運行時間(time,單位秒)若設置為5,則sysbench會在5秒內循環往復進行素數計算,從輸出結果可以看到在5秒內完成了幾次,比如配合--cpu-max-prime=3,則表示第一輪算得3個素數,如果時間還有剩就再進行一輪素數計算,直到時間耗盡。每完成一輪就叫一個event;默認值為10;相同時間,比較的是誰完成的event多。
(4)event上限(events)若設置為100,則表示當完成100次event后,即使時間還有剩,也停止運行;默認值為0,則表示不限event次數;相同event次數,比較的是誰用時更少
(5)測試次數,該參數用來控制一共跑幾輪上述配置的測試,用于做穩定性分析。
2.3.3 GPU穩定性測試模塊
GPU測試模塊采用的測試工具為glmark2,默認在使用該工具時調用了如下幾個測試項:buあer,build, bump,clear,conditionals,desktop,function。
由于測試項已經采用默認的了,因此參數配置主要包括兩項,單項測試時長以及測試次數,主界面如圖4所示,單項測試時長是指每個測試項測試的時間,因此不考慮初始化等其他因素,一次完成的測試為單項測試時長的七倍。
2.3.4 內存穩定性測試模塊
內存穩定性測試界面如圖5所示,大致可分為3個部分,分別為上部的參數配置部分,中間的測試結果顯示部分,底部為測試管理部分。下面分別對這三部分進行簡述。
測試人員可根據需要對測試參數進行自定義修改,各參數含義如下:
數組大?。簝却鏈y試過程中,使用的數組大小,數組占用內存應至少為CPU最高級緩存大小的4倍。
測試次數:內存測試執行的次數。
O3編譯優化:編譯測試腳本時是否啟用O3優化,優化級別分為O0、O1、O2、O3、Os,O0不做任何優化,是默認的編譯選項;O1提供基礎級別的優化,會消耗較少的編譯時間,它主要對代碼的分支,常量以及表達式等進行優化;O2提供更加高級的代碼優化,會嘗試更多的寄存器級的優化以及指令級的優化,它會在編譯期間占用更多的內存和編譯時間;O3則在O2的基礎上進行更多的優化,例如使用偽寄存器網絡,普通函數的內聯,以及針對循環的更多優化,提供最高級別的代碼優化,線上發布時一定要用O3;Os相當于O2.5,是使用了所有-O2的優化選項,但又不縮減代碼尺寸的方法。
多核測試:是否啟用多核執行測試。就是利用CPU兩個或多個計算引擎(內核)進行測試,核心數就代表“勞動力”,多核測試可以更好地處理多進程、多線程的任務。

圖2:操作系統穩定性測試系統主界面

圖3:操作系統穩定性測試系統CPU測試界面

圖4:操作系統穩定性測試系統GPU測試界面
2.3.5 I/O穩定性測試模塊
I/O測試采用的測試工具為iozone,是一個文件系統的benchmark工具,可以測試多種模式下文件系統的讀寫性能。測試時,設置的測試文件大小一定要大于系統內存(最佳為內存的兩倍大小),否則linux會將讀寫內容進行緩存,導致數值不真實。
iozone常用的配置參數如下:
(1)-a全面測試,自動增加塊大小進行多次測試。

圖5:操作系統穩定性測試系統內存測試界面

圖6:操作系統穩定性測試系統I/O測試界面

圖7:操作系統穩定性測試系統其他測試界面
(2)-i N用來選擇測試項,比如Read /Write /Random。比較常用的是0 1 2,可以指定成-i 0 -i 1 -i2,各數字對應的測試模式如表1所示。
(3)-r block size 指定一次寫入/讀出的塊大小。
(4)-s file size 指定測試文件的大小。
(5)-f filename 指定測試文件的名字,完成后會自動刪除(這個文件必須指定在待測硬盤中)。
(6)-F file1 file2...指定多線程下測試的文件名。
參數配置界面如圖6所示,可提供2個常用預設測試選項,除此之外可以通過自定義,手動在文本框中輸入測試命令;測試文件這一欄為測試文件所在的路徑,比如默認測試路徑為/tmp,在測試過程中就會在該路徑下創建一個testfile用于測試,測試完畢后,會自動刪除;測試次數即指定運行多少次上述配置的測試,用于對穩定性進行評估。

圖8:操作系統穩定性測試系統綜合評估界面

表1:測試模式
2.3.6 其他測試模塊
其他測試主要用于分析數據的穩定性。主界面如圖7所示。數據需按格式要求,比如第一行表示橫縱坐標軸,第二行對應下面各列數據的含義。當提供的文件格式不正確時系統會報錯,當提供文件格式正確時則會處理該文件中的數據。
2.3.7 綜合評估模塊
綜合評估模塊即對前述四個模塊分別進行默認配置的測試,最終將所有測試結果進行綜合,通過熵值確定各個指標的權重并評價,得到最終的綜合穩定度以及穩定等級。其主界面如圖8所示。
在完成測試系統代碼的編寫及調試后,并在配置了龍芯、飛騰、申威、鯤鵬、兆芯等主流硬件平臺及麒麟操作系統、UOS操作系統等國產主流操作系統的計算機中測試,對測試中出現的問題進行修改和優化,使測試系統能夠穩定運行并提供可靠的測試結果。如下內容為對運行的效果進行描述和分析。
以測試GPU為例,描述測試運行過程如下:
(1)安裝初始化:根據測試系統不同測試模塊所依賴的環境安裝相關依賴包,然后安裝測試系統安裝包,測試系統已集成為一個jar包,前期運行環境及安裝部署完成之后,進入.jar文件或.sh文件路徑下,通過終端使用命令java –jar StTestTool.jar或./StTestTool.sh即可運行。
(2)測試配置:可配置測試時使用的測試配置,也可使用默認的測試配置。

圖9:GPU測試結果圖
(3)執行測試:圖9為一次測試示例,在結果集中顯示了每次測試完成后得到的各個測試項的測試結果,該數值為FPS,是指畫面每秒傳輸幀數,通俗來講就是指動畫或視頻的畫面數。FPS是測量用于保存、顯示動態視頻的信息數量。每秒鐘幀數越多,所顯示的動作就會越流暢。右側變化圖是各個測試項的每次測試結果,對測試結果進行直觀顯示。最終的測試結果即穩定性顯示在最下方,有穩定性數值及其對應的穩定性等級。
針對國產操作系統設計并現了一套綜合測試系統,可對適配不同廠商的操作系統,具備良好的通用性,界面操作簡便,極大地提高了測試效率,無需測試人員編寫測試腳本,降低了測試難度,彌補了對國產操作系統進行綜合測試區域的空白,為對國產操作系統進一步測試研究打下了基礎。