1.簡介
LTP(Linux Test Project)是SGI、IBM、OSDL和Bull合作的項目,目的是為開源社區提供一個測試套件,用來驗證Linux系統可靠性、健壯性、和穩定性。LTP是Linux內核和相關特點測試的一整套工具集,它力求通過自動化的測試方法改進Linux內核。
2.源碼目錄結構介紹
LTP源代碼說明
INSTALL LTP安裝配置指導文檔
README 描述LTP包內容的文檔
CREDITS 記錄對LTP有很大貢獻的人
COPYING GNU Public License
ChangeLog 描述版本的變化
ltpmenu 規划執行LTP的圖形化界面接口
Makefile LTP頂層目錄的Makefile,負責編譯安裝pan、testcases和tools
runalltests.sh 可以順序運行全部測試例程並且報告結果的腳本
doc/* 工程文檔包含工具和庫函數使用手冊,描述各種測試
include/* 通用的頭文件目錄
lib/* 通用的庫函數目錄
testcases/* 包含所有運行在LTP下的測試程序和鏈接
testscripts/* 存放分組的測試腳本
runtest/* 為自動測試提供命令列表
pan/* 測試的驅動裝置。具備隨即和並行測試的能力
scratch/* 存放零碎測試的東西
tools/* 存放自動化測試腳本和輔助工具
二、LTP安裝
1.下載地址
http:/ltp.sourceforge.net/(以ltp-20110228版本說明。其他版本若有不同請參考官網)
2.編譯
從官方網站下載最新的LTP測試套件包,解壓后進入ltp源目錄。執行make、makeinsatll命令即可。注意:“make install” 可以使用非root用戶。但是在執行測試案例之前一定要使用root用戶執行“IDcheck.sh”命令。在編譯成功后會自動安裝到/opt/ltp目錄下。
[root@server20 ltp]# make
[root@server20 ltp]# make install
3.LTP 測試套件內容
(1)腳本
IDcheck.sh 檢查系統是否缺少執行LTP測試套件所需的用戶和用戶組,如果缺少則為LTP測試套件創建所需的用戶和用戶組。
runltplite.sh 這個腳本用來測試LTP安裝,也可用來對測試套件的子項目進行測試。詳情參閱腳本
runltp 這個腳本能夠測試LTP測試套件主要項目。其中包括:
- 硬盤 I/O 測試。
- 內存管理壓力測試。
- IPC 壓力測試。
- SCHED測試。
- 命令功能的驗證測試。
- 系統調用功能的驗證測試。
ver_linux 這個腳本是獲取硬件、軟件、環境信息。
runalltests.sh 測試內容同runltp。不同點在於runltp可以指定測試項進行組合測試,而runalltests.sh則會全部執行。
(2)目錄
bin 存放LTP測試的一些輔助腳本
results 測試結果默認存儲目錄
testcases 測試項集
output 測試日志默認存儲目錄
share 腳本使用說明目錄
runtest 測試驅動(用於鏈接testscripts內的測試腳本和testcases測試項目)
lib 通用的庫函數目錄
testscripts 列舉了所有的子系統測試腳本
adp_children.sh sysfs.sh
ltp-aiodio.sh ltpstress.sh
runpan.sh networkstress.sh
adp.sh 等等
(3)其他
Version 版本說明
(4)測試過程
從一個測試命令文件中讀取要測試的條目的要執行的命令行,然后等待該項測試的結束,並記錄詳細的測試輸出。默認狀態下pan會隨機的選擇一個命令行來運行,可以指定在同一時間要執行測試的次數。pan會記錄測試產生的詳細的格式復雜的輸出,但它不進行數據的整理和統計,數據整理統計的工作由scanner來完成,scanner是一個測試結果分析工具,它會理解pan的輸出格式,並輸出成一個表格的形式來總結那些測試passed或failed。
LTP測試套件通過執行測試腳本runalltests.sh(或runltp或runltplite.sh),或/testscripts內的測試腳本調用驅動程序pan執行/testcases內的測試項目。
三、LTP使用說明
1.概述
LTP有兩種測試方式。初始測試和自定義場景測試。自定義場景測試是指根據需求對擬定測試項目,自定義場景測試法使用的腳本是runltp(腳本使用方法下詳),在執行runltp腳本的時,可以指定參數添加你需要的測試的項目(在/testscripts內)。初始測試是對linux系統主要項目(不是全部)進行測試。包括:
- 硬盤 I/O 測試。
- 內存管理壓力測試。
- IPC 壓力測試。
- SCHED測試。
- 命令功能的驗證測試。
- 系統調用功能的驗證測試。
初始測試的測試腳本是runalltests.sh或runltp(runltp默認執行的內容與runalltests相同)。
2.runltp命令介紹
用法:./runltp [option] [command]
-a EMAIL_TO 發送所有的報告到指定的郵箱
-c NUM_PROCS 添加后台測試CPU的進程數,默認1
-C FAILCMDFILE 失敗案例存儲文件
-d IMPDIR 臨時存儲目錄,默認/tmp
-D NUM_PROCS,NUM_FILES,NUM_BYTES,CLEAN_FLA run LTP under additional background Load on Secondary Storage (Seperate by comma)
[NUM_PROCS = no. of processes creating Storage Load by spinning over write()]
[NUM_FILES = Write() to these many files (Defaults to 1 when value 0 or undefined)]
[NUM_BYTES = write these many bytes (defaults to 1GB, when value 0 or undefined)]
[CLEAN_FLAG = unlink file to which random data written, when value 1]
-e 輸出目前LTP版本的日期
-f CMDFILES 執行用戶自定義的測試案例,用“ ,”隔開(CMDFILES指runtest內的驅動程序)
-g HTMLFILE 添加html格式的輸出文件HTMLFILE
-h 幫助信息
-i NUM_PROCS 添加后台測試IO bus總線的進程數
-l LOGFILE 記錄測試日志的文件
-m NUM_PROCS,CHUNKS,BYTES,HANGUP_FLAG run LTP under additional background Load on Main memory (Seperate by comma)
[NUM_PROCS = no. of processes creating main Memory Load by spinning over malloc()]
[CHUNKS = malloc these many chunks (default is 1 when value 0 or undefined)]
[BYTES = malloc CHUNKS of BYTES bytes (default is 256MB when value 0 or undefined) ]
[HANGUP_FLAG = hang in a sleep loop after memory allocated, when value 1]
-N 添加所有的網絡測試
-n 添加后台測試網絡傳輸
-o OUTPUTFILE 直接打印測試輸出到OUTPUTFILE
-p 人為指定日志格式
-q 打印少的測試輸出到屏幕
-r LTPROOT
-s PATTERN 匹配PATTERN執行測試案例
-t DURATION 給定測試執行時間設置(s,m,h,d)
-T REPETITION 重復執行測試案例
-v 打印多的測試輸出到屏幕
-w CMDFILEADDR 使用wget下載用戶測試案例集合。
-x INSTALL 並行執行多個測試場景
3.壓力測試
在testscripts目錄中含有一個測試腳本ltpstress.sh,它可以對linux系統進行
-內存管理壓力測試。
-文件系統壓力測試。
-數學 (浮點) 測試。
- 多線程壓力測試。
- 硬盤 I/O 測試。
- IPC (pipeio, semaphore) 測試。
- 系統調用功能的驗證測試。
- 網絡壓力測試。
在使用ltpstress.sh腳本的之前需要對系統進行配置
-rsh必須配置完畢並在運行。
-內核支持NFS,並且安裝NFS軟件,通過網絡測試。
-“sar”或"top"工具需要被安裝,執行ltpstress時需要添加"sar"或“top”工具。
(1)ltpstress.sh命令
參數說明 :
-d datefile 指定sar或top記錄文件,默認是/tmp/ltpstress.data
-i #(in sec) 指定sar或top快照時間間隔,默認是10s
-I iofile 記錄"iostat"結果到isofile默認是/tmp/ltpstress.iostat
-l logfile 記錄測試結果到logfile,默認是/tmp/ltpstress
-m #(in Mb) 指定最小的內存使用
-n 不對網絡進行壓力測試
-S 用 sar捕捉數據
-T 利用LTP修改過的top工具捕捉數據
-t duration 指定時間的設置
(2)"top"工具
使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
說明:即時顯示 process 的動態
-d 改變顯示的更新速度,或是在交談式指令列( interactive command)按d
-q 沒有任何延遲的顯示速度,如果使用者是有 superuser 的權限,則 top 將會以最高的優先序執行
-c 切換顯示模式,共有兩種模式,一是只顯示執行檔的名稱,另一種是顯示完整的路徑與名稱
-S 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來
-s 安全模式,將交談式指令取消, 避免潛在的危機。
-i 不顯示任何閑置 (idle) 或無用 (zombie) 的行程
-n 更新的次數,完成后將會退出 top
-b 批次檔模式,搭配 "n" 參數一起使用,可以用來將 top 的結果輸出到檔案內
(3)"sar"工具
sar [options] [-A] [-o file] t [n]
說明:在命令行中,n 和t 兩個參數組合起來定義采樣間隔和次數,t為采樣間隔,是必須有的參數,n為采樣次數,是可選的,sar命令的選項很多,下面只列出常用選項:
-a 報告文件讀寫使用情況
-b 報告緩存的使用情況
-c 報告系統調用的使用情況
-d 報告磁盤的使用情況
-h 報告關於buffer使用的統計數據
-m 報告IPC消息隊列和信號量的使用情況
-q 報告運行隊列和交換隊列的平均長度
-R 報告進程的活動情況
-r 報告沒有使用的內存頁面和硬盤塊
-u 報告CPU的利用率
-v 報告進程、i節點、文件和鎖表狀態
-w 報告系統交換活動狀況
四、測試案例
1.初始測試
[root@server25 ltp]# ./runalltests.sh
*******************************************************************
*******************************************************************
** **
** This script is being re-written to cover all aspects of **
** testing LTP, which includes running all those tests which **
** are not run by default with runltp script. Special setup **
** in system environment will be done to run all those tests **
** like the File System tests, SELinuxtest, etc **
** **
*******************************************************************
*******************************************************************
Running Default LTP...
INFO: creating /opt/ltp/results directory
INFO: no command files were provided. Will execute the following
runtest scenario files:
syscalls fs fs_perms_simple fsx dio io mm ipc sched math nptl pty containers fs_
bind controllers filecaps cap_bounds fcntl-locktests connectors admin_tools time
rs power_management_tests numa hugetlb commands hyperthreading
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.
NFS-Asianux Server
LSB_VERSION="3.1"
DISTRIB_ID="AsianuxServer"
DISTRIB_RELEASE="3"
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Linux server25.nfs 2.6.18-128.7NFS #1 SMP Thu Aug 26 10:13:03 EDT 2010 x86_64 x8
6_64 x86_64 GNU/Linux
Gnu C gcc (GCC) 4.1.2 20080704 (Asianux 3.0 4.1.2-44)
Gnu make 3.81
util-linux pre7)
mount pre7)
modutils 3.3-pre2
e2fsprogs 1.39
PPP 2.4.4
isdn4k-utils 3.9
Linux C Library > libc.2.5
Dynamic linker (ldd) 2.5
Procps 3.2.7
Net-tools 1.60
iproute2 iproute2-ss061002
Kbd 1.12
Sh-utils 5.97
Modules Loaded i915 drm ipv6 xfrm_nalgo crypto_api dm_mirror dm_multipat
h scsi_dh video hwmon backlight sbs i2c_ec button battery asus_acpi acpi_memhotp
lug ac lp sg snd_intel8x0 snd_ac97_codec ac97_bus snd_seq_dummy snd_seq_oss snd_
seq_midi_event snd_seq snd_seq_device snd_pcm_oss ide_cd snd_mixer_oss i2c_i801
8139too pcspkr snd_pcm i2c_core 8139cp mii cdrom serio_raw parport_pc snd_timer
snd parport soundcore snd_page_alloc dm_raid45 dm_message dm_region_hash dm_log
dm_mod dm_mem_cache ata_piix libata sd_mod scsi_mod ext3 jbd uhci_hcd ohci_hcd e
hci_hcd
free reports:
total used free shared buffers cached
Mem: 501400 490124 11276 0 2432 87364
-/+ buffers/cache: 400328 101072
Swap: 2096472 136 2096336
/proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) 4 CPU 3.06GHz
stepping : 9
cpu MHz : 3059.069
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc
pni monitor ds_cpl tm2 cid cx16 xtpr lahf_lm
bogomips : 6121.34
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Pentium(R) 4 CPU 3.06GHz
stepping : 9
cpu MHz : 3059.069
cache size : 1024 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl tm2 cid cx16 xtpr lahf_lm
bogomips : 6117.09
clflush size : 64
cache_alignment : 128
address sizes : 36 bits physical, 48 bits virtual
power management:
remove test cases which require the block device.
You can specify it with option -b
COMMAND: /opt/ltp/bin/ltp-pan -e -S -a 5704 -n 5704 -p -f /tmp/ltp-c rOdkS5710/alltests -l /opt/ltp/results/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.log - o /opt/ltp/output/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.output -C /opt/ltp/output/ LTP_RUN_ON-2011_.failed
LOG File: /opt/ltp/results/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.log
OUTPUT File: /opt/ltp/output/LTP_RUN_ON-2011_ 3月_25-16h_36m_16s.output
FAILED COMMAND File: /opt/ltp/output/LTP_RUN_ON-2011_.failed
HTML File: /opt/ltp/output/2011_
Running tests.......
分析:
remove test cases which require the block device這句前面一部分是對系統信息的捕捉,后面是對記錄結果的文件的說明。
詳細測試結果略
2.壓力測試
Linux 2.6.18-128.7NFS (server20) 2011年03月26日
Running LTP Stress for 24 hour(s) using 730 Mb
Test output recorded in:
/tmp/ltpstress.2496.output1
/tmp/ltpstress.2496.output2
/tmp/ltpstress.2496.output3
13時01分04秒 all 4.00 0.00 8.45 87.56 0.00 0.00
13時00分59秒 CPU %user %nice %system %iowait %steal %idle
13時01分09秒 all 4.35 0.00 9.50 86.14 0.00 0.00
13時01分14秒 all 5.56 0.00 13.46 80.98 0.00 0.00
13時01分19秒 all 6.20 0.00 16.10 77.70 0.00 0.00
13時01分24秒 all 7.80 0.00 15.15 77.05 0.00 0.00
13時01分29秒 all 9.05 0.00 12.81 78.14 0.00 0.00
分析:
sar會動態收集系統的狀態信息。詳細結果略。收集的信息保存在
tmp/ltpstress.data利用sar工具分析ltpstress.data。
(1)sar -u -f ltpstress.data //cpu 平均利用率
[root@server25 tmp]# sar -u -f ltpstress.data
Linux 2.6.18-128.7NFS (server25.nfs) 2011年03月25日
16時49分02秒 CPU %user %nice %system %iowait %steal %idle
16時49分12秒 all 3.81 0.00 3.50 92.69 0.00 0.00
16時49分22秒 all 14.17 0.00 7.14 78.69 0.00 0.00
16時49分45秒 all 31.94 0.00 5.30 62.76 0.00 0.00
16時50分11秒 all 6.25 0.00 5.38 88.36 0.00 0.02
16時50分49秒 all 9.13 0.00 3.21 87.65 0.00 0.00
Average: all 13.35 0.00 4.57 82.07 0.00 0.0
(2) sar -r -f ltpstress.data //內存平均利用率
inux 2.6.18-128.7NFS (server25.nfs) 2011年03月25日
16時49分02秒 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
16時49分12秒 5036 496364 99.00 360 14804 1747512 348960 16.65 44664
16時49分22秒 5540 495860 98.90 464 11304 1633908 462564 22.06 58788
16時49分45秒 8428 492972 98.32 232 9660 1347532 748940 35.72 43848
16時50分11秒 4852 496548 99.03 432 10568 1468572 627900 29.95 39252
16時50分49秒 4772 496628 99.05 940 11980 1198232 898240 42.85 35224
Average: 5726 495674 98.86 486 11663 1479151 617321 29.45 44355
[root@server25 tmp]#
ltp 測試流程及測試腳本分析
1 pan
pan工作原理:LTP測試套件有一個專門的測試驅動程序pan,具體的測試用例的執行都是由pan來調用執行,它可以跟蹤孤兒進程和抓取測試的輸出信息。它的工作方式是這樣的:
從一個測試命令文件中讀取要測試的條目的要執行的命令行,然后等待該項測試的結束,並記錄詳細的測試輸出。默認狀態下pan會隨機的選擇一個命令行來運行,可以指定在同一時間要執行測試的次數。
pan會記錄測試產生的詳細的格式復雜的輸出,但它不進行數據的整理和統計,數據整理統計的工作由scanner來完成,scanner是一個測試結果分析工具,它會理解pan的輸出格式,並輸出成一個表格的
形式來總結那些測試passed或failed。
2 ltp 測試過程
LTP測試的過程主要分為兩個階段:
第一階段——初始測試,主要用於測試系統的可靠性,包括LTP測試套件在硬件和操作系統上24小時的成功運轉。
第二階段——壓力測試,主要驗證產品在系統高使用率時的健壯性。
初始測試
./runltp -p -l /tmp/resultlog.20061222 -d /tmp -o /tmp/ltpscreen.20061222
-t 24h
壓力測試
./ltpstress.sh -m 35 -S -t 72h //-m:
表示genload不停的在分配和釋放35m內存,
-S: 使用sar工具記錄
-t: 測試時間
3 runltp 調試過程
將ltp安裝在pc機上
make autotools
make
make install
在/opt/ltp 目錄下就是安裝好的ltp。可以在其中運行測試腳本
例如: ./runltp -p -l result.log (該命令沒有指定測試案例,默認)
可以將輸出結果重定向到一個文件如:rtp-info
就可以修改runltp腳本,看rtp-info的輸出結果
4 ltp 在arm的交叉編譯
$ make autotools
$./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux
--host=arm-linux CFLAGS="-static -pthread"
$make
make install
make時會報openlog的錯誤。將testcases/kernel/fs/fs-bench 文件夾移走,不編譯
5 runltp 腳本
bash腳本,主要是通過調用ltp-pan 來運行testcas中的各個測試用例
還有根據參數來自定義測試,及對測試結果進行不同的保存
6 測試自己的用例
一 修改已有的測試命令文件
1 在runtest/syscalls 中加入moon01 (自己編寫的腳本名,只打印)
2 將moon01 腳本放入testcase/bin 目錄下
運行./runltp -p -l result.log 會看到打印。說明調用了moon01腳本
(由於沒有-f 指定測試命令文件,用scenario_groups/default 文件讀入默認
的測試命令文件,其中第一個為syscalls文件,該文件中寫明了要測試的命令,
注意格式)
二 填寫自己的命令文件
1 填寫自己的命令文件my_cmd_file
寫入 moon01 moon01
將該文件放入runtest 目錄下
2將moon01腳本放入testcase/bin下
3執行./runltp -p -l result.log -f my_cmd_file
4 執行結果調用moon01打印出信息
ltp 測試流程及測試腳本分析
1 pan
pan工作原理:LTP測試套件有一個專門的測試驅動程序pan,具體的測試用例的執行都是由pan來調用執行,它可以跟蹤孤兒進程和抓取測試的輸出信息。它的工作方式是這樣的:
從一個測試命令文件中讀取要測試的條目的要執行的命令行,然后等待該項測試的結束,並記錄詳細的測試輸出。默認狀態下pan會隨機的選擇一個命令行來運行,可以指定在同一時間要執行測試的次數。
pan會記錄測試產生的詳細的格式復雜的輸出,但它不進行數據的整理和統計,數據整理統計的工作由scanner來完成,scanner是一個測試結果分析工具,它會理解pan的輸出格式,並輸出成一個表格的
形式來總結那些測試passed或failed。
2 ltp 測試過程
LTP測試的過程主要分為兩個階段:
第一階段——初始測試,主要用於測試系統的可靠性,包括LTP測試套件在硬件和操作系統上24小時的成功運轉。
第二階段——壓力測試,主要驗證產品在系統高使用率時的健壯性。
初始測試
./runltp -p -l /tmp/resultlog.20061222 -d /tmp -o /tmp/ltpscreen.20061222
-t 24h
壓力測試
./ltpstress.sh -m 35 -S -t 72h //-m:
表示genload不停的在分配和釋放35m內存,
-S: 使用sar工具記錄
-t: 測試時間
3 runltp 調試過程
將ltp安裝在pc機上
make autotools
make
make install
在/opt/ltp 目錄下就是安裝好的ltp。可以在其中運行測試腳本
例如: ./runltp -p -l result.log (該命令沒有指定測試案例,默認)
可以將輸出結果重定向到一個文件如:rtp-info
就可以修改runltp腳本,看rtp-info的輸出結果
4 ltp 在arm的交叉編譯
$ make autotools
$./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux
--host=arm-linux CFLAGS="-static -pthread"
$make
make install
make時會報openlog的錯誤。將testcases/kernel/fs/fs-bench 文件夾移走,不編譯
5 runltp 腳本
bash腳本,主要是通過調用ltp-pan 來運行testcas中的各個測試用例
還有根據參數來自定義測試,及對測試結果進行不同的保存
6 測試自己的用例
一 修改已有的測試命令文件
1 在runtest/syscalls 中加入moon01 (自己編寫的腳本名,只打印)
2 將moon01 腳本放入testcase/bin 目錄下
運行./runltp -p -l result.log 會看到打印。說明調用了moon01腳本
(由於沒有-f 指定測試命令文件,用scenario_groups/default 文件讀入默認
的測試命令文件,其中第一個為syscalls文件,該文件中寫明了要測試的命令,
注意格式)
二 填寫自己的命令文件
1 填寫自己的命令文件my_cmd_file
寫入 moon01 moon01
將該文件放入runtest 目錄下
2將moon01腳本放入testcase/bin下
3執行./runltp -p -l result.log -f my_cmd_file
4 執行結果調用moon01打印出信息
