lmbench的使用方法 與CPU上下文切換的次數和時間(context switch)
要評價一個系統的效能,通常有不同的指標,相應的會有不同的測試方法和測試工具,一般來說為了確保測試結果的公平和權威性,會選用比較成熟的商業測試軟體。但在特定情形下,只是想要簡單比較不同系統或比較一些函式庫效能時,也能夠從開源世界裡選用一些優秀的工具來完成這個任務,本文就通過lmbench 簡要介紹系統綜合性能測試。
二、測試軟體 Lmbench是一套簡易,可移植的,符合ANSI/C標準為UNIX/POSIX而制定的微型測評工具。一般來說,它衡量兩個關鍵特徵:反應時間和頻寬。Lmbench旨在使系統開發者深入瞭解關鍵操作的基礎成本。
軟體說明: lmbench是個用於評價系統綜合性能的多平臺開源benchmark,能夠測試包括文件讀寫、記憶體操作、程序建立銷燬開銷、網路等效能,測試方法
Lmbench是個多平臺軟體,因此能夠對同級別的系統進行比較測試,反映不同系統的優劣勢,通過選擇不同的庫函式我們就能夠比較庫函式的效能;更為重要的是,作為一個開源軟體,lmbench提供一個測試框架,假如測試者對測試專案有更高的測試需要,能夠通過少量的修改原始碼達到目的(比如現在只能評測程序建立、終止的效能和程序轉換的開銷,通過修改部分程式碼即可實現執行緒級別的效能測試)。
下載:
www.bitmover.com/lmbench,最新版本3.0-a9
LMbench的主要功能: *頻寬測評工具 —讀取快取檔案 —拷貝記憶體 —讀記憶體 —寫記憶體 —管道 —TCP
三、測試 在此次測試中我分兩種測試,一個是在我的pc機上測試的,一個是在SEP4020的arm720t平臺上測試的: (1) 在pc機上的測試
測試平臺:HP compoq,fedora 7 Linux 2.6.21
1、 確認安裝了C編譯器,假如沒有需要先安裝
2、 拷貝lmbench原始碼文件lmbench-3.0-a9.tgz到fedora的/root/test目錄下,解壓到當前目錄即可
3、 cd lmbench-3.0-a9,在命令列鍵入make results即可開始編譯測試
4、 假如編譯沒有錯誤,會出現一些選擇提示以對測試進行一個配置並生成配置指令碼,後續的測試將使用該配置指令碼,在以後測試中也能夠直接使用同樣的配置多次測試。配置提示除了測試的記憶體範圍(如“MB [default 371]”時,對記憶體較大的應該避免選擇太大值,否則測試時間會很長)和是否Mail results外,基本上都能夠選擇預設值。
5、 Lmbench根據配置文件執行任何測試項,在results目錄下根據系統型別、系統名和作業系統型別等生成一個子目錄,測試結果文件(system name+序號)存放於該目錄下。
6、 測試完畢執行make see可檢視到測試結果報告,則可以將測試資料/results/i686-pc-linux-gnu/目錄下的檔案匯出為測試報告/results/summary.out檔案,我們檢視summary.out檔案就可以看測試結果了。 (2) 在SEP4020上的測試
測試平臺:SEP4020 evb1.5, Linux 2.6.16
1、 確認宿主機上安裝了交叉編譯編譯器arm-linux-gcc,假如沒有需要先安裝
2、 拷貝lmbench原始碼文件lmbench-3.0-a9.tgz到fedora的/root/test目錄下,解壓到當前目錄即可
3、 cd lmbench-3.0-a9,在命令列鍵入make CC=arm-linu-gcc OS=arm-linux 即可開始編譯測試用例,編譯完成後,會在/root/test/lmbench-3.0-a9/bin下出現一個arm-linux目錄,在這個目錄下就是測試用例的目標檔案。由於我們的目標平臺不支援make命令,所以我們必須另外寫一個執行指令碼,腳步名為run_all.sh,放在scripts下面,內容是: #!/bin/sh echo run the lmbench on sep4020 arm-linux env OS=arm-linux ./config-run env OS=arm-linux ./results
4、 然後將整個lmbench-3.0-a9目錄拷貝到目標機的nfs根目錄下面,然後進入目標機的串列埠終端,在/lmbench-3.0-a9/scripts下面輸入./run_all.sh 假如交叉編譯沒有錯誤,會出現一些選擇提示以對測試進行一個配置並生成配置指令碼,後續的測試將使用該配置指令碼,在以後測試中也能夠直接使用同樣的配置多次測試。配置提示除了測試的記憶體範圍(如“MB [default 19]”時,對記憶體較大的應該避免選擇太大值,否則測試時間會很長)和是否Mail results外,基本上都能夠選擇預設值。
5、 Lmbench根據配置文件執行任何測試項,在results目錄下根據系統型別、系統名和作業系統型別等生成一個子目錄,測試結果文件(system name+序號)存放於該目錄下。
6、 測試完畢執行,在虛擬機器fedora7中進入/nfs/lmbench-3.0-a9 鍵入make see命令可生成測試結果報告,它可以將測試資料/results/i686-pc-linux-gnu/目錄下的檔案匯出為測試報告/results/summary.out檔案,我們檢視summary.out檔案就可以看測試結果了。 四、關於測試結果及說明
make[1]: Entering directory `/nfs/lmbench-3.0-a9/results'
L M B E N C H 3 . 0 S U M M A R Y ------------------------------------ (Alpha software, do not distribute)
Basic system parameters ------------------------------------------------------------------------------ Host OS Description Mhz tlb cache mem scal pages line par load bytes --------- ------------- ----------------------- ---- ----- ----- ------ ---- 192.168.0 Linux 2.6.16 arm-linux 85 60 8 1.0000 1 192.168.0 Linux 2.6.27 arm-linux 86 63 16 1.0000 1 192.168.0 Linux 2.6.16 arm-linux 86 63 16 1.0000 1 192.168.0 Linux 2.6.16 arm-linux 86 63 16 1.0000 1 192.168.0 Linux 2.6.16 arm-linux 86 63 16 1.0000 1 localhost Linux 2.6.21- i686-pc-linux-gnu 1817 8 128 1.3300 1 localhost Linux 2.6.21- i686-pc-linux-gnu 1864 8 128 1.2900 1
Processor, Processes - times in microseconds - smaller is better ------------------------------------------------------------------------------ Host OS Mhz null null open slct sig sig fork exec sh call I/O stat clos TCP inst hndl proc proc proc --------- ------------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 192.168.0 Linux 2.6.16 85 2.04 8.44 187. 2064 21.0 81.2 9655 42.K 63.K 192.168.0 Linux 2.6.27 86 2.69 8.44 266. 5338 20.7 94.7 10.K 44.K 73.K 192.168.0 Linux 2.6.16 86 2.03 8.34 185. 5100 20.7 85.9 9468 63.K 121K 192.168.0 Linux 2.6.16 86 2.03 8.72 185. 19.K 20.7 84.9 9556 53.K 72.K 192.168.0 Linux 2.6.16 86 2.04 8.33 185. 5321 20.7 80.5 9395 42.K 101K localhost Linux 2.6.21- 1817 1.11 1.26 3.08 5.17 10.2 1.70 2.85 674. 1922 5177 localhost Linux 2.6.21- 1864 1.09 1.26 2.98 5.05 8.94 1.48 3.27 1083 2086 6119
Basic integer operations - times in nanoseconds - smaller is better ------------------------------------------------------------------- Host OS intgr intgr intgr intgr intgr bit add mul div mod --------- ------------- ------ ------ ------ ------ ------ 192.168.0 Linux 2.6.16 11.6 8.6900 52.1 1489.3 255.9 192.168.0 Linux 2.6.27 11.5 8.5800 52.2 1469.2 252.6 192.168.0 Linux 2.6.16 11.5 8.5400 52.2 1472.0 252.9 192.168.0 Linux 2.6.16 11.5 8.6200 52.0 1472.8 251.9 192.168.0 Linux 2.6.16 11.5 8.6400 52.2 1472.5 254.5 localhost Linux 2.6.21- 0.5600 0.2800 0.2000 20.6 10.9 localhost Linux 2.6.21- 0.6100 0.2700 0.1700 20.0 9.8600
Basic uint64 operations - times in nanoseconds - smaller is better ------------------------------------------------------------------ Host OS int64 int64 int64 int64 int64 bit add mul div mod --------- ------------- ------ ------ ------ ------ ------ 192.168.0 Linux 2.6.16 23. 691.6 4295.6 3895.0 192.168.0 Linux 2.6.27 23. 685.4 4192.8 4074.3 192.168.0 Linux 2.6.16 23. 683.0 4199.0 4082.1 192.168.0 Linux 2.6.16 23. 680.7 4202.6 4082.9 192.168.0 Linux 2.6.16 23. 686.9 4235.7 4080.3 localhost Linux 2.6.21- 0.690 0.6200 34.5 41.4 localhost Linux 2.6.21- 0.660 0.6100 36.8 40.2
Basic float operations - times in nanoseconds - smaller is better ----------------------------------------------------------------- Host OS float float float float add mul div bogo --------- ------------- ------ ------ ------ ------ 192.168.0 Linux 2.6.16 6902.1 7781.9 12.1K 42.2K 192.168.0 Linux 2.6.27 6911.0 6568.4 11.6K 43.0K 192.168.0 Linux 2.6.16 6757.4 7578.5 11.9K 43.5K 192.168.0 Linux 2.6.16 6763.1 7611.3 11.7K 43.5K 192.168.0 Linux 2.6.16 6759.3 7640.4 11.9K 43.5K localhost Linux 2.6.21- 1.6600 2.7900 21.7 20.6 localhost Linux 2.6.21- 1.6300 2.7200 20.9 20.1
Basic double operations - times in nanoseconds - smaller is better ------------------------------------------------------------------ Host OS double double double double add mul div bogo --------- ------------- ------ ------ ------ ------ 192.168.0 Linux 2.6.16 9955.5 10.6K 22.8K 79.8K 192.168.0 Linux 2.6.27 9157.0 9909.4 20.6K 79.4K 192.168.0 Linux 2.6.16 9793.3 10.3K 22.4K 79.8K 192.168.0 Linux 2.6.16 9703.9 10.4K 22.2K 79.9K 192.168.0 Linux 2.6.16 9746.9 10.3K 22.3K 79.7K localhost Linux 2.6.21- 1.6900 2.7900 21.2 20.6 localhost Linux 2.6.21- 1.6300 2.8800 21.0 20.2
Context switching - times in microseconds - smaller is better ------------------------------------------------------------------------- Host OS 2p/0K 2p/16K 2p/64K 8p/16K 8p/64K 16p/16K 16p/64K ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw ctxsw --------- ------------- ------ ------ ------ ------ ------ ------- ------- 192.168.0 Linux 2.6.16 164.8 120.0 311.9 165.3 162.5 165.9 151.1 192.168.0 Linux 2.6.27 247.5 196.1 198.4 238.0 254.9 262.9 291.2 192.168.0 Linux 2.6.16 164.4 118.5 115.2 161.1 156.4 164.4 164.3 192.168.0 Linux 2.6.16 167.2 116.6 119.6 166.9 161.9 171.3 158.1 192.168.0 Linux 2.6.16 172.5 117.4 114.3 161.3 147.6 163.8 127.5 localhost Linux 2.6.21- 11.0 11.6 11.7 15.3 19.2 16.8 25.1 localhost Linux 2.6.21- 10.2 11.4 11.3 14.3 20.9 17.4 26.0
*Local* Communication latencies in microseconds - smaller is better --------------------------------------------------------------------- Host OS 2p/0K Pipe AF UDP RPC/ TCP RPC/ TCP ctxsw UNIX UDP TCP conn --------- ------------- ----- ----- ---- ----- ----- ----- ----- ---- 192.168.0 Linux 2.6.16 164.8 482.3 925. 192.168.0 Linux 2.6.27 247.5 770.7 1069 192.168.0 Linux 2.6.16 164.4 477.4 917. 192.168.0 Linux 2.6.16 167.2 472.9 926. 192.168.0 Linux 2.6.16 172.5 474.9 913. localhost Linux 2.6.21- 11.0 28.3 50.8 45.9 55.2 48.2 59.8 126. localhost Linux 2.6.21- 10.2 32.1 55.7 36.7 49.2 40.2 53.1 113.
*Remote* Communication latencies in microseconds - smaller is better --------------------------------------------------------------------- Host OS UDP RPC/ TCP RPC/ TCP UDP TCP conn --------- ------------- ----- ----- ----- ----- ---- 192.168.0 Linux 2.6.16 192.168.0 Linux 2.6.27 192.168.0 Linux 2.6.16 192.168.0 Linux 2.6.16 192.168.0 Linux 2.6.16 localhost Linux 2.6.21- localhost Linux 2.6.21-
File & VM system latencies in microseconds - smaller is better ------------------------------------------------------------------------------- Host OS 0K File 10K File Mmap Prot Page 100fd Create Delete Create Delete Latency Fault Fault selct --------- ------------- ------ ------ ------ ------ ------- ----- ------- ----- 192.168.0 Linux 2.6.16 6410.3 6135.0 37.0K 6896.6 5112.0 3.124 36.8 280.8 192.168.0 Linux 2.6.27 18.9K 71.4K 55.6K 28.6K 16.2K 15.9 54.2 194.3 192.168.0 Linux 2.6.16 22.7K 15.4K 1000.K 47.6K 4926.0 5.213 37.1 284.2 192.168.0 Linux 2.6.16 31.2K 29.4K 41.7K 50.0K 4907.0 1.087 36.0 277.1 192.168.0 Linux 2.6.16 33.3K 25.0K 58.8K 9434.0 5108.0 9.428 37.1 285.6 localhost Linux 2.6.21- 112.0 12.4 88.5 130.8 7413.0 2.360 5.98870 4.635 localhost Linux 2.6.21- 36.1 19.0 181.2 138.4 9006.0 2.134 482.1 4.148
*Local* Communication bandwidths in MB/s - bigger is better ----------------------------------------------------------------------------- Host OS Pipe AF TCP File Mmap Bcopy Bcopy Mem Mem UNIX reread reread (libc) (hand) read write --------- ------------- ---- ---- ---- ------ ------ ------ ------ ---- ----- 192.168.0 Linux 2.6.16 10.2 11.2 13.1 32.8 19.1 17.8 32.8 72.9 192.168.0 Linux 2.6.27 8.96 11.4 12.9 32.6 19.1 17.7 32.7 71.2 192.168.0 Linux 2.6.16 10.2 11.2 13.0 32.8 19.0 17.8 32.7 71.2 192.168.0 Linux 2.6.16 10.2 11.2 12.9 32.9 19.0 17.8 32.9 71.6 192.168.0 Linux 2.6.16 10.2 11.2 12.9 32.9 19.0 17.8 32.7 71.6 localhost Linux 2.6.21- 1153 436. 640. 1742.8 3463.7 1239.0 1116.5 3502 1589. localhost Linux 2.6.21- 1194 451. 744. 1742.3 3443.5 1217.8 1159.0 3357 1555.
Memory latencies in nanoseconds - smaller is better (WARNING - may not be correct, check graphs) ------------------------------------------------------------------------------ Host OS Mhz L1 $ L2 $ Main mem Rand mem Guesses --------- ------------- --- ---- ---- -------- -------- ------- 192.168.0 Linux 2.6.16 85 33.6 293.4 296.6 856.8 No L2 cache? 192.168.0 Linux 2.6.27 86 35.2 293.8 309.8 863.1 No L2 cache? 192.168.0 Linux 2.6.16 86 35.4 293.7 310.3 861.4 No L2 cache? 192.168.0 Linux 2.6.16 86 35.4 293.7 309.9 863.6 No L2 cache? 192.168.0 Linux 2.6.16 86 35.4 293.6 308.2 860.2 No L2 cache? localhost Linux 2.6.21- 1817 1.6620 7.9160 98.6 191.7 localhost Linux 2.6.21- 1864 1.7240 7.7130 104.3 205.4 make[1]: Leaving directory `/nfs/lmbench-3.0-a9/results'
主要技術引數說明:
分類
其中host為localhost 說明是我用的虛擬機器,而192.168.0則說明是用4020進行的測試
技術引數
引數說明
(1)Basic system parameters(系統基本引數)
Tlb pages:TLB(Translation Lookaside Buffer)的頁面數
Cache line bytes :(cache的行位元組數)
Mem par
memory hierarchy parallelism
Scal load:並行的lmbench數
(2)Processor, Processes(處理器、程序操作時間)
Null call:簡單系統呼叫(取程序號)
Null I/O:簡單IO操作(空讀寫的平均)
Stat:取文件狀態的操作
Open clos:開啟然後立即關閉關閉文件操作
Slct tcp
Select:配置
Sig inst:配置訊號
Sig hndl:捕獲處理訊號
Fork proc :Fork程序後直接退出
Exec proc:Fork後執行execve呼叫再退出
Sh proc:Fork後執行shell再退出
(3)Basic integer/float/double operations
略
(4)Context switching 上下文切換時間
2p/16K: 表示2個並行處理16K大小的資料
(5)*Local* Communication latencies(本地通訊延時,通過不同通訊方式傳送後自己立即讀)
Pipe:管道通訊
AF UNIX
Unix協議
UDP
UDP
RPC/UDP
TCP
RPC/TCP
TCP conn
TCP建立connect並關閉描述字
(6)File & VM system latencies(文件、記憶體延時)
File Create & Delete:建立並刪除文件
MMap Latency:記憶體對映
Prot Fault
Protect fault
Page Fault:缺頁
100fd selct:對100個文件描述符配置select的時間
(7)*Local* Communication bandwidths(本地通訊頻寬)
Pipe:管道操作
AF UNIX
Unix協議
TCP
TCP通訊
File reread:文件重複讀
MMap reread:記憶體對映重複讀
Bcopy(libc):記憶體拷貝
Bcopy(hand):記憶體拷貝
Mem read:記憶體讀
Mem write:記憶體寫
(8)Memory latencies(記憶體操作延時)
L1:快取1
L2:快取2
Main Mem:連續記憶體
Rand Mem:記憶體隨機訪問延時
Guesses
假如L1和L2近似,會顯示“No L1 cache?”
假如L2和Main Mem近似,會顯示“No L2 cache?”
什麼是CPU上下文切換?
現在linux是大多基於搶佔式,CPU給每個任務一定的服務時間,當時間片輪轉的時候,需要把當前狀態儲存下來,同時載入下一個任務,這個過程叫做上下文切換。時間片輪轉的方式,使得多個任務利用一個CPU執行成為可能,但是儲存現場和載入現場,也帶來了效能消耗。 那執行緒上下文切換的次數和時間以及效能消耗如何看呢?
如何獲得上下文切換的次數?
vmstat直接執行即可,在最後幾列,有CPU的context switch次數。 這個是系統層面的,加入想看特定程序的情況,可以使用pidstat。
1 2 3 4 5 6 7 |
$
vmstat 1 100
procs
-----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r
b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 88 233484 288756 1784744 0 0 0 23 0 0 4 1 94 0 0
4 0 88 233236 288756 1784752 0 0 0 0 6202 7880 4 1 96 0 0
2 0 88 233360 288756 1784800 0 0 0 112 6277 7612 4 1 95 0 0
0 0 88 232864 288756 1784804 0
|