javascript:tagshow(event, 'Linux');" href="javascript:;" target=_self>Linux 標準測試的設計過程
自動軟件測試讓您可以在一段時間內運行相同的測試,從而確保您所比較的內容具備真正的可比性。在本文中,Linux Test Project 團隊的成員們分享了他們對 Linux® 內核進行壓力所使用的測試的方法、原理以及腳本和工具。
在對 Linux 內核版本穩定性的測試中,需要明確地聲明并證明為什么版本是穩定的或者是不穩定的。然而還沒有被證明和證實當前現有的系統范圍內的壓力測試可以測試 Linux 內核整體上的穩定性。本文給出了一個創建系統范圍內 Linux 壓力測試并證明其結果正確性的方法。不同的 Linux 開發者、用戶和發行版本會使用他們自己的方法來測試內核的穩定性。不過,關于他們決定運行哪些測試、覆蓋的代碼、達到的壓力級別等的基礎信息都沒有發布,這就大大降低了結果的價值。
使用實驗室的機器以及來自 Linux Test Project 測試套件的測試,我們基于系統資源的利用率統計開發了一個測試的組合,為系統提供足夠的壓力。我們對這個組合測試進行了分析,以確定 Linux 內核的哪些部分在測試執行中得到了使用。然后,我們修改了組合測試,在保持期望的高強度系統壓力的同時提高代碼覆蓋率的百分比。最終得到的壓力測試涵蓋了 Linux 內核的足夠多部分,有助于穩定性聲明,并且有系統使用情況和內核代碼覆蓋情況的數據來支持它。
這一組合測試方法的四個步驟是:測試選擇、系統資源利用率評價、內核代碼覆蓋分析以及最終的壓力測試評價。
選擇測試
測試選擇包括選擇達成兩方面目的的測試:
- 測試應該可以得到 CPU(s)、內存、I/O 和網絡等主要內核區域的高水平的資源利用率。
- 測試應該充分地覆蓋內核代碼,以幫助支持自其結果中生成的穩定性聲明。
只要有可能,都要使用自動化的或者易于修改的測試,以支持自動操作。自動操作可以使得測試更快而且可以重復進行,并幫助降低人為錯誤的風險。選擇合適的測試時需要考慮的另一個方面是,使用可以自由發布結果的應用程序。最好是選擇堅決擁護開放源代碼方法 和/或 GPL 的測試和測試套件,以助于確保發布過程的簡便。
評價系統資源利用率
所選擇的測試的組合必須給系統的資源帶來足夠的壓力。Linux 內核的四個主要方面可以影響系統的響應和執行時間:
- CPU:用于在機器的 CPU(s)上處理數據的時間。
- Memory:用于自真實存儲器中讀寫數據的時間。
- I/O:用于自磁盤存儲器讀寫數據的時間。
- Networking:用于自網絡讀寫數據的時間。
測試設計者應該使用下面這兩個著名的且廣為應用的開放源代碼 Linux 資源監控工具來評價資源利用率水平。(請參閱本文稍后的 參考資料 以獲得下載這些工具的鏈接。)
- top:由 Albert D. Cahalan 維護著的一個開放源代碼工具,包含于大部分 Linux 發行版本中,可用于當前的 2.4 和 2.6 內核。
- sar:另一個開放源代碼工具;它由 Sebastien Godard 維護。這個工具也包含于大部分 Linux 發行版本中,可用于當前的 2.4 和 2.6 內核。
方法中的系統資源利用率評價階段通常需要多次嘗試才能得到合適的測試組合,并得到期望水平的利用率。當確定測試組合時,過度利用總是一個至關重要的問題。例如,如果選擇的組合過于受 I/O 所限,可能會導致 CPU 的測試結果不好,反之亦然。方法的這一部分主要是大量的試驗和出錯,直到所有資源達到期望水平。
top 工具可用于迅速確定每個測試影響哪個資源(CPU、內存或者 I/O),并實時地顯示出它們使用了多少資源。 sar 工具用于收集一段時間內的網絡利用率統計數據,并將所有利用率數據的快照記錄到一個文件。
當選定一個組合后,測試必須長時間運行以準確評價資源的利用率。測試運行的時間長短取決于每個測試的長度。假如多個測試同時運行,則時間必須足夠長以使得這些測試中最長的那個可以完成。在這個評價過程中,sar 工具也應該在運行。在評價運行的結論中,您應該收集并評價所有四種資源的利用率水平。
下面的例子顯示了 sar 輸出的 CPU、內存和網絡利用率:
清單 1. sar 的輸出示例
|
分析內核代碼覆蓋率
獲得足夠的內核覆蓋率是系統壓力測試的另一個職責。盡管所選的測試組合充分地利用了四種主要資源,它也有可能只是執行了內核的一小部分。因而,您應該對覆蓋率進行分析以確保組合可以成為一個系統壓力測試,而不是一個系統負載生成器。當前,有兩個開放源代碼工具可以幫助進行 Linux 內核的代碼覆蓋率分析:
- gcov:一個由 Linux Test Project 維護的開放源代碼工具。這個工具分析內核代碼的覆蓋率,并報告哪些行、函數和分支被覆蓋以及它們被訪問了多少次。
- lcov:另一個由 IBM 開發,由 Linux Test Project 維護的開放源代碼工具。這個工具由一組構建于基于文本的 gcov 輸出之上的 Perl 腳本構成,以實現基于 HTML 的輸出。輸出包括覆蓋率百分比、圖表以及概述頁,可以快速瀏覽覆蓋率數據。您可以自 Linux Test Project(LTP)主頁找到這兩個工具(參閱 參考資料以獲得鏈接)。
gcov 模塊加載以后,所有運行于系統壓力測試組合中的測試都必須執行。盡管原來的系統壓力測試可以同時執行,也應該同時執行,但是這次運行應該是循環進行的。每個測試都應該運行一次直到結束,一個接一個地運行,不能重復運行任何測試。單個地、循環地運行,是為了減少在同時運行多個系統壓力測試時,內核嘗試去平衡它們的負載而導致的不可預知的和無目的的內核代碼執行。您應該在最后一個測試運行結束后再進行 gcov 分析。由于最終是要格式化數據以進行分析,所以運行 lcov 工具并缷載 gcov 模塊。
lcov 工具會生成一棵完整的 HTML 樹,其中包含有內核中代碼的每一行以及關于每一行執行了多少次的數據(如果有的話)。這個工具會量化覆蓋率數據并生成關于內核中每一部分和文件覆蓋率的百分比數字。下面的例子展示了一個示例性的代碼覆蓋率輸出:
lcov 維護者定義了“足夠的覆蓋”(綠色的),因而這個 lcov 示例僅僅是一種評價。不過,所包括的原始數據讓任何瀏覽者都可以做出他或她自己的判斷。在瀏覽了覆蓋率分析后,測試創建者現在可以修改測試的組合,以改變 和/或 增加所覆蓋的代碼的數量。
評價最終壓力測試
之所以要執行方法中的這最后一步,是為了對系統壓力測試進行核實。在一個被認為是穩定的內核上執行壓力測試;通常,發行版本中的內核可以滿足這一要求,但不總是如此。要長時間地執行壓力測試(推薦至少 24 個小時),同時運行 sar 工具,原因有以下兩點:
- 長時間運行有助于發現組合中的所有問題,否則,在短時間的“取樣測試(sniff test)”中這些問題可能會被忽略。
- sar 生成的數據構成以后測試運行中進行比較的基線。
長時間運行結束后,您現在可以基于收集的所有數據來決定這個測試組合是否是系統壓力測試的合適候選者。
Linux Test Project 在設計 Linux 內核壓力測試腳本 ltpstress.sh 時使用了這一設計方法。這個應用程序組合了來自 LTP 的測試套件不同方面的多個測試以及內存和網絡傳輸負載生成器。在執行之前,測試會根據系統中存在多少物理和虛擬內存來調整其總的內存使用情況。這個測試腳本可以自 LTP 測試套件獲得(見 參考資料)。為了確保結果的準確性,這個腳本創建于受控的實驗室條件下。
IBM Linux Technology Center Test 部門使用這個壓力測試以及其他工具和測試作為幫助確認 Linux 內核發行版本穩定性的一個相對快速和簡便的途徑。為幫助確保得到足夠的覆蓋率,測試既在實驗室條件下也在模擬的用戶情形下進行。
- 您可以參閱本文在 developerWorks 全球站點上的 英文原文.
- 在 Linux Test Project 主頁 下載壓力測試 shell 腳本以及其他一些實用的測試。
- IBM Linux Technology Center 的使命是直接與 Linux 開發社區合作以共同促進 Linux 的成功。
- OSDL 的 Linux Kernel Scalable Test Platform(STP) 提供了一個框架,開發者可以通過它使用一個在線的性能和可擴展性套件來測試內核補丁。
- LTP 壓力測試使用的工具包括
top
( procps 程序包的一部分)和sar
( systat 的一部分)。
- 此外,LTP 壓力測試還充分利用了 GNU 測試覆蓋率的程序 gcov 以及它的基于 Perl 的將 gcov 結果轉化為 HTML 的工具(HTMLizer) lcov。
- 內核比較:從 2.4 到 2.6 內核開發中的改進 ( developerWorks,2004 年 2 月)介紹了使得 2.6 比以前的任何內核更好的工具、測試和技術。
- 內核比較:2.4 和 2.6 上的 Web 服務( developerWorks,2004 年 2 月)描述了 IBM Linux Technology Center 的 Web 服務測試工作的成果。
- 在 改善 Linux 內核性能和可伸縮性( developerWorks,2003 年 1 月)中, Linux Technology Center Linux Kernel Performance 團隊討論了如何量化 Linux 性能以比較一段時間內的測試結果。
- 測試 Linux 的可靠性( developerWorks,2003 年 12 月)為 IBM Linux Technology Center 所做的關于 Linux 內核和其他核心 OS 組件的測試結果與分析提供了文件資料。
- bug/" xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Linux 內核調試器內幕( developerWorks,2003 年 6 月)向您展示了如何追蹤內核的執行并檢查它的內存和數據結構。
- 在 developerWorks Linux 專區 可以找到更多為 Linux 開發者準備的參考資料。
- 購買 Developer Bookstore Linux 區 打折出售的 Linux 書籍。
- 通過 developerWorks Subscription 使用最新的 IBM 工具和中間件來開發和測試您的 Linux 應用程序:您可以自 WebSphere®、DB2®、 Lotus®、Rational®和 Tivoli® 獲取 IBM 軟件,以及一個可以在 12 個月內使用這些軟件的許可,所有的花費都比您想像的要低。
- 自 developerWorks 的 為您的 Linux 應用開發加油提速 專區下載可以運行于 Linux 之上的經過挑選的 developerWorks Subscription 產品免費測試版本,包括 WebSphere Studio Site Developer、WebSphere SDK for Web services、WebSphere Application Server、DB2 Universal Database Personal Developers Edition、Tivoli Access Manager 和 Lotus Domino Server。要更快速地開始上手,請參閱針對各個產品的 how-to 文章和技術支持。
關于作者 Robbie Williamson 是 IBM Linux Technology Center 的專職軟件工程師。他于 2000 年畢業于得克薩斯州立大學,獲計算機科學學士學位。在他的職業生涯中,他當過技術支持人員、驗證工程師,以及各種 UNIX 實現的開發人員。Robbie 當前是 Linux Test Project 的維護者之一,可以通過 robbiew@us.ibm.com 與他聯系。 |
文章來源于領測軟件測試網 http://www.kjueaiud.com/