對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 工具也應該在運行。在評價運行的結論中,您應該收集並評價所有四種資源的利用率水平。

Linux文件rwx屬性的含義

Linux上的文件以.開頭的文件被系統視為隱藏文件,僅用ls命令是看不到他們的,而用ls -a除了顯示 壹般文件名外,連隱藏文件也會顯示出來。

  ls -l(這個參數是字母L的小寫,不是數字1)

  這個命令可以使用長格式顯示文件內容,如果需要察看更詳細的文件資料,就要用到ls -l這個指令。例如我在某個目錄下鍵入ls -l可能會顯示如下信息(壹共7個欄位):

  文件屬性   文件數 擁有者 所屬的group 文件大小 建檔日期     文件名

  drwx——   2           Guest        users         1024      Nov 21 21:05 Mail

  -rwx–x–x 1 root root 89080 Nov 7 22:41 tar*

  -rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname*

  lrwxrwxrwx 1 root root 4 Nov 24 19:30 zcat->gzip

  -rwxr-xr-x 1 root bin 308364 Nov 29 7:43 zsh*

  -rwsr-x— 1 root bin 9853 Aug 15 5:46 su*

  第壹個欄位,表示文件的屬性。Linux的文件基本上分為三個屬性:可讀(r),可寫(w),可執行(x)。但是這裏有十個格子可以添(具體程序實現時,實際上是十個bit位)。第壹個小格是特殊表示格,表示目錄或連結文件等等,d表示目錄,例如drwx——;l表示連結文件,如 lrwxrwxrwx;如果是以壹橫”-“表示,則表示這是文件。其余剩下的格子就以每3格為壹個單位。因為Linux是多用戶多任務系統,所以壹個文件可能同時被許多人使用,所以我們壹定要設好每個文件的權限,其文件的權限位置排列順序是(以-rwxr-xr-x為例):

  rwx(Owner)r-x(Group)r-x(Other)

  這個例子表示的權限是:使用者自己可讀,可寫,可執行;同壹組的用戶可讀,不可寫,可執行;其它用戶可讀,不可寫,可執行。另外,有壹些程序屬性的執行部分不是x,而是s,這表示執行這個程序的使用者,臨時可以有和擁有者壹樣權力的身份來執行該程序。壹般出現在系統管理之類的指令或程序,讓使用者執行時,擁有root身份。

  第二個欄位,表示文件個數。如果是文件的話,那這個數目自然是1了,如果是目錄的話,那它的數目就是該目錄中的文件個數了。

  第三個欄位,表示該文件或目錄的擁有者。若使用者目前處於自己的home,那這壹欄大概都是它的賬號名稱。

  第四個欄位,表示所屬的組(group)。每壹個使用者都可以擁有壹個以上的組,不過大部分的使用者應該都只屬於壹個組,只有當系統管理員希望給予某使用者特殊權限時,才可能會給他另壹個組。

  第五欄位,表示文件大小。文件大小用byte來表示,而空目錄壹般都是1024byte,妳當然可以用其它參數使文件顯示的單位不同,如使用ls -k就是用kb萊顯示壹個文件的大小單位,不過壹般我們還是以byte為主。

  第六個欄位,表示創建日期。以”月,日,時間”的格式表示,如Aug 15 5:46表示8月15日早上5:46分。

  第七個欄位,表示文件名。我們可以用ls -a顯示隱藏的文件名。

Ubuntu下JLink for linux的配置與使用

厭煩了不斷的切換系統來下載u-boot.bin到開發板中,我用的是Jlink,所以總想使他在Ubuntu Linux環境下也能使用,在瀏覽Jlink的官網時讓我發現了點線索,segger出了J-Link 的Linux測試版了,但是想讓Jlink跑起來並不容易,費了很多的精力後總算有點成果,下面是我安裝過程的壹點總結,和大家共同學習:

  1 :從www.segger.com 網上下載 jlink for linux beta 版本

  該版本為 Jlink 在linux下的壹個測試版本。

  http://www.segger.com/cms/jlink-software.html

  2:將其放在用戶目錄中解壓

  tar -zxvf JLink_Linux_090804_tar.gz

  3:修改文件夾名稱

  mv JLink_Linux_090804   Jlink

  4:修改壹些配置

  cd Jlink

  rm libjlinkarm.o libjlinkarm.o.0

  ln -s libjlinkarm.o.0.0 libjlinkarm.o.0

  ln -s libjlinkarm.o.0   libjlinkarm.o

  5:復制相關庫到用戶庫中

  mv libjlinkarm.o.0.0  /usr/lib/

  mv libjlinkarm.o.0    /usr/lib/

  mv libjlinkarm.o      /usr/lib/

  6:啟動Jlink for linux

  sudo ./start

  SEGGER J-Link Commander V4.20h (‘?’ for help)

  Compiled Oct 19 2010 14:02:03

  Updating firmware:  J-Link arm V8 compiled Sep 30 2010 13:08:47

  Replacing firmware: J-Link arm V8 compiled Dec  1 2009 11:42:48

  Waiting for new firmware to boot

  New firmware booted successfully

  DLL version V4.20h, compiled Oct 19 2010 14:01:59

  Firmware: J-Link arm V8 compiled Sep 30 2010 13:08:47

  Hardware: V8.00

  S/N: 2010XXXX

  Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull

  VTarget = 0.000V