要評價一個系統的性能,一般有不一樣的指標,相應的會有不一樣的測試方法和測試工具。既有比較成熟的商業測試軟件,也有許多優秀的開源工具來完成這個任務。本文簡要介紹如何使用lmbench來完成系統綜合性能測試。linux
Lmbench用C語言編寫的,是一套具備較好可移植性的,簡易的,符合ANSI/C標準爲UNIX/POSIX而制定的微型測評工具。通常來講,它衡量兩個關鍵特徵:反應時間和帶寬。Lmbench旨在使系統開發者深刻了解系統關鍵操做的基礎成本。緩存
Lmbench是個多平臺軟件,所以可以對同級別的系統進行比較測試,反映不一樣系統的優劣,經過選擇不一樣的庫函數咱們就可以比較庫函數的性能;更爲重要的是,做爲一個開源軟件,lmbench提供一個測試框架,假如測試者對測試項目有更高的測試須要,可以經過少許的修改源代碼達到目的(好比如今只能評測進程建立、終止的性能和進程轉換的開銷,經過修改部分代碼便可實現線程級別的性能測試)。性能優化
lmbench是一個用於評價系統綜合性能的軟件,主要測試內容包括:網絡
*存儲器延遲計算結果框架
—存儲器延遲測試展現了全部系統(數據)的緩存延遲,包括L1/L2 cache以及主內存函數
*帶寬測評工具工具
—讀取緩存文件性能
—拷貝內存測試
—讀內存優化
—寫內存
—管道
—TCP
*反應時間測評工具
—上下文切換
—網絡: 鏈接的創建,管道,TCP,UDP和RPC hot potato
—文件系統的創建和刪除
—進程建立
—信號處理
—上層的系統調用
—內存讀入反應時間
* 其餘
—處理器時鐘比率計算
Lmbench的測試內容有不少,實在是benchmarking領域的「瑞士軍刀」啊。
Lmbench的成功應用案例包括:
Sun公司和SGI公司已經使用這種測評工具以尋找和補救存在於性能上的問題。
Intel公司在開發P6的過程當中,使用了它們。
Linux在Linux的性能優化中使用了它們。
1. 下載:
Lmbench當前的最新版本爲3.0。
lmbench的主站:
http://www.bitmover.com/lmbench/
lmbench 3版本的下載連接:
http://www.bitmover.com/lmbench/lmbench3.tar.gz
2. 編譯:
下載解壓後運行make build後會出現如下錯誤:
make[2]: *** No rule to make target `../SCCS/s.ChangeSet', needed by `bk.ver'. Stop.
make[2]: Leaving directory `/home/wave/xilinx/lmbench3/src'
make[1]: *** [lmbench] Error 2
make[1]: Leaving directory `/home/wave/xilinx/lmbench3/src'
make: *** [build] Error 2
問題來源:
SCCS是Sun的版本管理工具。lmbench這個項目是Sun資助的,並且做者Larry McVoy也曾經是Sun的員工,就用了這玩藝。
解決辦法1:
修改src/Makefile,將231行的bk.ver去掉就能夠了。編譯完成後在bin下有benchmarking須要的的binary。
解決辦法2:
在lmbench3/SCCS目錄下建立一個工程要的文件s.ChangeSet,騙過make。
交叉編譯:
本人在Xilinx ZC706開發板上嘗試用PetaLinux 2013.04附帶的交叉編譯工具鏈進行了編譯,能夠在lmbench3目錄下使用如下命令完成編譯:
make OS=armv7l-linux-gnu CC=arm-xilinx-linux-gnueabi-gcc AR=arm-xilinx-linux-gnueabi-ar build
若是使用其餘pre-built的交叉編譯工具,須要修改CC和AR的內容。編譯完成後,會在lmbench3\bin目錄下生成OS指定的目錄,可執行文件放在這個目錄下。這個OS名稱適用於ZC706開發板,在其餘嵌入式開發板上可能會不一樣。一個簡單的工程上取得合適名字的辦法:若是不是這個名字,在下一步配置完成後會提示沒法保存配置文件到某個位置,看系統提示修改就行了。
注意:使用PetaLinux 2013.04交叉編譯工具鏈以前,要先’source settings.sh’初始化環境變量。
3. 配置:
把Host上編譯好的lmbench轉移到嵌入式Linux中有不少種辦法,本人採用如下辦法:
在Host上把lmbench3目錄打成一個tar ball,而後拷貝到SD卡中,嵌入式Linux從SD卡啓動。
Linux啓動後,將SD卡mount到文件系統中:
mount /dev/mmcblk0p1 /mnt
在嵌入式Linux中建立臨時文件系統,這裏假定開發者是用root賬號登陸到Linux的:
mkdir -p /home/root/ramfs
mount -t ramfs none /home/root/ramfs -o maxsize=32768
Note:缺省狀況下,Ramfs被限制最多可以使用內存大小的一半。能夠經過maxsize(以kbyte爲單位)選項來改變。
用如下命令啓動配置過程:
cd /home/root/ramfs
tar xvf /mnt/lmbench3.tar
export PATH=$PATH:/home/root/ramfs/lmbench3/bin/armv7l-linux-gnu
cd lmbench3/scripts
./config-run
本人使用的配置爲:
MULTIPLE COPIES [default 1]: 1
Job placement selection [default 1]: 1 > Allow scheduler to place jobs
MB [default 84]: 8
SUBSET (ALL|HARWARE|OS|DEVELOPMENT) [default all]: all
FASTMEM [default no]: yes
SLOWFS [default no]:
DISKS [default none]
REMOTE [default none]
Processor mhz [default 498 MHz, 2.0080 nanosec clock] 733
FSDIR [default /tmp]
Status output file [default /dev/tty]
Mail results [default yes] no
關於測試項的解釋:
1. 在多核CPU上並行多少個lmbench。做者說這個目前仍是實驗性質的,結果可能不正確並有隨機性。更重要的是,整個benchmark的速度會變得很是慢(100倍)。既然這樣,固然用缺省的數值1了。
2. 測試任務的分配方式。按回車選擇缺省的方案1。
3. 有些測試須要一段內存。內存至少是cache size的4倍,最大不超過物理內存的80%。內存越大,測試的結果越準確,不過須要的時間也越長。
4. 選擇測試項目。分別是所有測試、硬件測試、OS測試和操做系統開發階段的測試。缺省選擇爲所有測試。
5. 內存延遲測試。測試須要的時間可能比較長。在cache line size超過128字節並但願肯定cache line size的時候比較有用。
6. 測試文件系統的延遲。在一些老的文件系統(UFS, FFS等)上會比較慢,在Linux ext2fs和Sun tmpfs上會比較快。能夠用來測試ramdisk的性能,間接測試RAM的性能。
7. 測試磁盤的性能。須要提供磁盤的位置,例如:/dev/sda。同時須要提供一行磁盤的文字描述。
8. 網絡測試。須要有另一臺中間不通過網關的機器,須要rsh訪問權限。
9. 軟件會自動分析CPU的工做頻率。若是軟件沒法檢測,須要提供CPU的工做頻率。
10. 須要一個位置保存臨時文件。要求不能是內存駐留文件系統。
11. lmbench的輸出設備。缺省爲/dev/tty,在大多數場合都適用。
12. 是否將結果上傳給做者。
4. 運行
首先要確認Embedded Linux已經配置了合適的hostname,這個hostname將做爲測試結果raw文件的文件名。
用如下命令開始性能測試:
./results
在本人的計算機上,大約運行了9分鐘後結束。生成的結果在lmbench3/results/$OS目錄裏面。
若是Embedded Linux root fs裏面有perl,能夠直接在開發板上看測試結果的summary。若是沒有也不打緊,能夠把生成的測試結果raw文件拷貝到host上,在host上生成summary。
./getsummary ./zynq.0
Summary是對測試結果的高度精簡。若是感興趣,開發者能夠用Text Editor打開測試結果raw文件,找到更多更細緻的有用信息。
==END==
http://xilinx.eetop.cn/?action-viewnews-itemid-1569