一、文件系統測試工具簡介
1、LTP
參考網站:http://oss.sgi.com/projects/ltp/
LTP(Linux Test Project)是由SGI和IBM聯合發起的項目,提供一套驗證Linux系統可靠性、健壯性、穩定性的測試套件,也可用來進行POSIX兼容測試和功 能性測試。LTP提供了2000多個測試工具,可以根據需要自行進行定制。同時,LTP還是一個優秀的自動化測試框架,基於它通過設計測試用例和測試工具 可以實現更多功能的測試自動化。
穩定性測試相關參考:
基於LTP《測試Linux的可靠性》http://www.ibm.com/developerworks/cn/linux/l-rel/
2、fstest
參考網站:http://www.tuxera.com/community/posix-test-suite/
fstest是一套簡化版的文件系統POSIX兼容性測試套件,它可以工作在FreeBSD, Solaris, Linux上用於測試UFS, ZFS, ext3, XFS and the NTFS-3G等文件系統。fstest目前有3601個回歸測試用例,測試的系統調用覆蓋chmod, chown, link, mkdir, mkfifo, open, rename, rmdir, symlink, truncate, unlink。
該用例測試以上幾個常用的文件系統調用,涉及用例約2K條左右,基於Android系統的測試,需要將相關測試用例的shell腳本稍微做下適配,可以基 於busybox下的相關命令(如dirname修改為busybox dirname),另外還需要適配主腳本“misc.sh”里面的相關命令
3、locktests
參考網站:http://nfsv4.bullopensource.org/tools/tests/locktest.php
locktest用於fcntl鎖功能的壓力測試。運行時,主進程先在指定文件區域設置字節范圍的記錄鎖,然后多個從進程嘗試在該文件區域執行read, write, 加新鎖操作。這些操作結果是可預期的(矩陣如下),如果操作結果與預期一致則測試通過,否則測試失敗。
Expected results
Here is the table of expected results, depending on :
- Slave test operations (READ, WRITE, SET A WRITE LOCK … )
- Master Operation (SET A READ LOCK, SET A WRITE LOCK )
- Slave types (Processes, threads)
- Locking profile (POSIX locking, Mandatory locking)
|
4、PCTS
參考網站:http://www.opengroup.org/testing/downloads.html
PCTS(Posix Complicance Testing Suite),POSIX一致性測試套件,是從POSIX標准出發,通過嚴格的、定量地測試,以驗證、評價、認證操作系統符合POSIX標准的程序的測試 軟件。IEEE std2003.1是PCTS的設計標准,常見的PCTS主要有VSX-PCTS、NIST-PCTS、OPTS-PCTS三種實現,上面提供的連接為 VSX-PCTS。
5、iozone
Iozone是目前應用非常廣泛的文件系統測試標准工具,它能夠產生並測量各種的操作性能,包括read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write等操作。Iozone目前已經被移植到各種體系結構計算機和操作系統上,廣泛用於文件系統性能測試、分析與評估的標准工具。
6、Postmark
參考網站:http://openbenchmarking.org/test/pts/postmark
Postmark 是由著名的 NAS 提供商 NetApp 開發,用來測試其產品的后端存儲性能。Postmark主要用於測試文件系統在郵件系統或電子商務系統中性能,這類應用的特點是:需要頻繁、大量地存取小 文件。 Postmark 的測試原理是創建一個測試文件池。文件的數量和最大、最小長度可以設定,數據總量是一定的。創建完成后, Postmark 對文件池進行一系列的事務( transaction )操作,根據從實際應用中統計的結果,設定每一個事務包括一次創建或刪除操作和一次讀或添加操作,在有些情況下,文件系統的緩存策略可能對性能造成影響, Postmark 可以通過對創建 / 刪除以及讀 / 添加操作的比例進行修改來抵消這種影響。事務操作進行完畢后, Post 對文件池進行刪除操作,並結束測試,輸出結果。 Postmark是用隨機數來產生所操作文件的序號,從而使測試更加貼近於現實應用。輸出結果中比較重要的輸出數據包括測試總時間、每秒鍾平均完成的事務 數、在事務處理中平均每秒創建和刪除的文件數,以及讀和寫的平均傳輸速度。
一、Postmark原理
Postmark是由着名的NAS提供商NetApp開發,用來測試其產品的后端存儲性能。
Postmark主要用於測試文件系統在郵件系統或電子商務系統中性能,這類應用的特點是:需要頻繁、大量地存取小文件。
Postmark的測試原理是創建一個測試文件池。文件的數量和最大、最小長度可以設定,數據總量是一定的。創建完成后,Postmark對文件池進行一 系列的事務(transaction)操作,根據從實際應用中統計的結果,設定每一個事務包括一次創建或刪除操作和一次讀或添加操作,在有些情況下,文件 系統的緩存策略可能對性能造成影響,Postmark可以通過對創建/刪除以及讀/添加操作的比例進行修改來抵消這種影響。事務操作進行完畢后,Post 對文件池進行刪除操作,並結束測試,輸出結果。
Postmark是用隨機數來產生所操作文件的序號,從而使測試更加貼近於現實應用。
輸出結果中比較重要的輸出數據包括測試總時間、每秒鍾平均完成的事務數、在事務處理中平均每秒創建和刪除的文件數,以及讀和寫的平均傳輸速度。
二.Postmark的安裝:
postmark軟件只有一個.c文件,在gcc下編譯即可。假定編譯之后的可執行文件名為postmark。
三.postmark命令集
3.1 postmark命令解析
postmark的操作是在命令行的環境下的。
一個配置文件(在命令行中被指定)包含了一組可以直接運行的命令。
在命令行提示下,有如下命令:
pm > ?
set size : 設置文件大小的上限和下限。(low bound and high bound)
set number : 設置並發的文件數(simultaneous files)
set seed : 為隨機數產生器設置種子(sets seed for random number generator)
set transactions : 設置事務處理的數目(set number of transactions)
set location : 設定工作文件的location(sets location of working files)
set read : 設定讀取block的大小(sets read block size)
set write : 設定寫block的大小(sets write block size)
set buffering : (set usage of buffered I/O)
set bias read : 設置讀操作發生的頻率(sets the chance of choosing read over append)
set bias create : 設置刪除操作發生的頻率(sets the chance of choosing create over delete)
run : 運行該軟件
show : 顯示當前的配置信息(displays current configuration)
help : 顯出可用的命令(prints out available commands )
quit : Exit program
pm >
show命令顯示可用於下次run的當前的配置信息。系統的默認配置信息如下:
pm>show
Current configuration is:
Transactions: 500 事務處理的數目是500個;
Files range between 500 bytes and 9.77 kilobytes in size
文件大小的上下限分別是500字節和9.77K字節。
Random number generator seed is 42 隨機數產生器的種子是42
The base number of files is 500 並發的文件數是500個
The working directory is: . 工作目錄是 .
Block sizes are: read=512 bytes, write=512 bytes 塊大小是:讀:512字節,寫:512字節
Biases are: read/append=5, create/delete=5
讀/追加發生的概率相等;創建/刪除發生的概率相等。
Using Unix buffered file I/O 文件操作將使用標准的緩沖區I/O
pm>
If this configuration is run:
500 files will be initially created, between .. and 10 Kilobytes in size
The files will be processed in the current directory
All reads will occur in 512 byte blocks
All writes will occur in 512 byte blocks
Reads and appends are equally likely to occur
Creates and deletes are equally likely to occur
File operations will be performed using the standard buffered I/O in the runtime library
部分命令解釋:
pm > set size 10000 20000 表示文件大小的下限是10000字節,文件大小的上限是20000字節;
pm > set size 15000 表示文件的大小只能固定是15000字節,不能變化。
pm > set number 整數 注意:后面的整數可以是任何大於1的整數,但是要保證文件系統有足夠的空間來存放結果文件;設置並發的文件數;
pm > set seed 整數; 表示隨機數產生器的種子。注意:任何整數都是可以的。但是這個項很少被自行設置,因為改變這個數之后測試結果將與原先測試的結果不同。
pm > set transaction 表示即將到來的下一次run中讀/追加、創建/刪除等操作的事務數目。任何大於1的整數都是可以的。
pm > set location 表示程序運行過程中產生文件的工作目錄。例如:pm > set location user2/tmp
pm > set read 整數 以及 pm > set write 整數 表示從文件中一次讀取的數據的大小或者一次寫進文件的數據的大小。這兩個整數的取值范圍是:1 < 整數 < 文件的最大大小;
pm > set buffering true(默認是true) 或者 pm > set buffering false
true表示buffering is enabled.
false表示buffering is not enabled.
pm > set bias read整數 和 pm > set bias create 整數 兩個整數分別表示該操作發生的頻率;
其取值范圍是:-1,0,1,2,3,…,10
當取值為-1時,表示系統禁止read和append這兩個操作;取值從0到10變化過程中,值越小,表示read操作發生的幾率小於append操作發 生的幾率;值越大,表示read操作發生的幾率大於append操作發生的幾率。默認是5,表示read和append兩種操作發生的幾率相等。
同樣,對於pm > set bias write 整數 和 pm > set bias delete 整數 兩個整數分別表示該操作發生的頻率;
其取值范圍是:-1,0,1,2,3…10;
當取值為-1時,表示系統禁止write和delete這兩個操作;取值從0到10變化過程中,值越小,表示write操作發生的幾率小於delete操 作發生的幾率;值越大,表示write操作發生的幾率大於delete操作發生的幾率。默認是5,表示write和delete兩種操作發生的幾率相等。
set bias read n n為read/append中read所占比例 n/10
set bias create n create/delete中create所占比例 n/10
set report verbose(default)/terse 設置報告模式,terse模式的輸出沒有文字說明,便於通過批處理運行多個測試之后,使用excel對結果進行分析
pm > run 命令表示在當前的配置下運行程序
四.postmark命令使用例子
postmark有兩種使用方法:
1、 使用配置文件
./postmark XXX.cfg
配置文件方式,是將所有配置命令及run放入文件中,由postmark自動讀取
配置文件示例:
set size 10000 50000
set location /mnt/cfs
set transactions 5000
set number 5000
run result.txt
show
quit
2、命令行模式
./postmark
進入命令行模式,然后打入相應命令,進行配置,run命令按當前配置運行postmark將上面配置文件中的命令在命令行中依次執行,結果是相同的,沒有任何區別。
7、fio
參考網站:http://freecode.com/projects/fio
fio是一個I/O標准測試和硬件壓力驗證工具,它支持13種不同類型的I/O引擎(sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio等),I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs等等。fio可以支持塊設備和文件系統測試,廣泛用於標准測試、QA、驗證測試等,支持Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, HP-UX, Windows等操作系統。
8、filebench
參考網站:http://sourceforge.net/projects/filebench/
Filebench 是一款文件系統性能的自動化測試工具,它通過快速模擬真實應用服務器的負載來測試文件系統的性能。它不僅可以仿真文件系統微操作(如 copyfiles, createfiles, randomread, randomwrite ),而且可以仿真復雜的應用程序(如 varmail, fileserver, oltp, dss, webserver, webproxy )。 Filebench 比較適合用來測試文件服務器性能,但同時也是一款負載自動生成工具,也可用於文件系統的性能。
9、bonnie
參考網站:
http://sourceforge.net/projects/bonnie/
http://www.textuality.com/bonnie/
Bonnie++是一個用來測試UNIX文件系統性能的測試工具,主要目的是為了找出系統的性能瓶頸,其名字來源於作者喜愛的歌手Bonnie Raitt。
Bonnie++在類似的測試工具和軟件中不是最大的和最復雜的,但是在易用性和輸出結果顯示方面很不錯。
為什么需要bonnie++?
我們有以下假設:
內存是有限的,因此cache經常會達到上限;因此
許多I/O操作最終需要真正執行I/O;因此
有必要測試真實I/O的速度,而且
在UNIX文件系統中隨機搜索是非常慢的;
Bonnie++做了什么?
Bonnie++在一個已知文件大小的文件上執行一系列的測試操作。如果不指定文件大小,Bonnie++默認使用100MB。這個默認大小對於大型服務器來說可能不夠大,因此文件的大小最好比可用RAM的大小大一點,一般會要求大兩倍。
Bonnie++的使用說明
Bonnie++將長時間的執行磁盤文件讀寫操作(中間不斷給出進程報告),然后生成一個小而精的報告。
下載Bonnie++的源碼;
解壓tar -xzf bonnie++-1.03e.tgz
進入解壓后的目錄
編譯Bonnie++:make
至此,Bonnie++就已經安裝,並可以使用了。
命令:
[cpp] view plaincopyprint?
01.#./Bonnie
02.You must use the "-u" switch when running as root.
03.usage: bonnie++ [-d scratch-dir] [-s size(MiB)[:chunk-size(b)]]
04. [-n number-to-stat[:max-size[:min-size][:num-directories]]]
05. [-m machine-name]
06. [-r ram-size-in-MiB]
07. [-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]
08. [-q] [-f] [-b] [-D] [-p processes | -y]
09.
10.
11.Version: 1.03e
方括號中的選項都是可選,其含義如下:
Bonnie
程序名字。
-d 起始路徑
目錄名字;Bonnie將在該目錄下創建測試文件並進行讀寫,即為需要測試的文件系統掛載的目錄。bonnie不會對目錄名字進行任何特殊的解釋,只是按照原名字使用。
-s size-in-MB
測試文件的大小,以MB為單位。默認是100MB大小。文件大小一定要是數倍於可用內存的大小,否則操作系統將會把文件的大部分文件cache到內存中,從而導致bonnie執行的真正的I/O次數非常少。建議設置至少為可用內存大小的2倍(另一種說法為4倍)。
-m machine-label
給出bonnie用來生成報告的標識。如果不使用該選項,bonnie將不在報告中提供特定標識。
-html
以html的格式輸出測試結果
-m 機器名
實際上我們可以認為是本次測試的方案名,可以隨便定義。默認是本機的hostname。
-r 內存大小
指定內存大小,這樣可以通過-s參數創建r*2大小的文件,通常用於縮短測試時間,但是需要注意這樣由於內存的cache可能導致測試結果的不准確
-x 測試的次數
-u 測試文件的屬主和組,默認是執行bonnie++的當前用戶和當前組
-g 測試文件的組,默認是執行bonnie++的當前用組
-b 在每次寫文件時調用fsync()函數,對於測試郵件服務器或者數據庫服務器這種通常需要同步操作的情況比較適合,而不使用該參數則比較適合測試copy文件或者編譯等操作的效率。
在此,我們的文件系統掛載在/mnt目錄下,因此我們將工作目錄定為/mnt
[cpp] view plaincopyprint?
01.[root@de18 bonnie++-1.03e]# ./bonnie++ -d /mnt -s 1000 -u root
02.Using uid:0, gid:0.
03.File size should be double RAM for good results, RAM is 1000M.
說明我們的文件大小設置小了,RAM的大小為1000M,因此我們設置文件大小為2000M:
#./bonnie++ -d /test -s 2000 -u root
則可以得到測試結果:
[cpp] view plaincopyprint?
01.Version 1.03e ——Sequential Output—— –Sequential Input- –Random-
02. -Per Chr- –Block– -Rewrite- -Per Chr- –Block– –Seeks–
03.Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
04.de18 2000M 7849 44 16681 34 15773 37 60869 86 215620 36 9076 98
05. ——Sequential Create—— ——–Random Create——–
06. -Create– –Read— -Delete– -Create– –Read— -Delete–
07. files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
08. 16 1993 24 8381 16 2545 11 2025 30 8922 17 2576 15
09.de18,2000M,7849,44,16681,34,15773,37,60869,86,215620,36,9075.7,98,16,1993,24,8381,16,2545,11,2025,30,8922,17,2576,15
測試結果分析:
Sequential Output部分表示寫文件的相關信息
Sequential Input部分表示讀文件的相關信息
Per Chr表示以字符為單位讀寫文件
Block表示以block為單位讀寫文件
Rewrite表示修改並重寫已經存在的文件的每一個block
K/sec表示每秒讀或寫文件的速率,以K為單位
%CP表示在某階段執行操作時平均消耗的CPU
Sequential Output
1. Per Char
就是Per-Character的含義。使用putc()函數進行循環寫入,每次寫入的字節很小,基本上可以放入任意一種I-Cache中,這種情況下的CPU消耗在處理putc()代碼和分配磁盤文件空間上。
2. Block
使用write(2)函數創建文件。這種情況下的CPU消耗只是在分配磁盤文件空間上。
3. Rewrite
使用read(2)函數讀取文件,然后修改再用write(2)函數寫回。由於文件的空間已經分配好,所以這種方式可以很有效地測試文件系統緩存和數據傳輸的速度。
Sequential Input
1. Per Char
使用getc()函數循環 讀取文件內容
2. Block
使用read(2)函數循環讀取文件內容,有效測試磁盤讀取的效率。
Random Seek
默認3個seeks進程作8000次的測試。用read(2)函數讀取文件的block,同時有10%的操作是用write(2)函數將block修改以 后寫回文件中。在這個測試中,如果內存容量大於創建的文件大小,那么將會出現比較高的數值,而這個數值可能並不能准確反映磁盤本身的I/O效率。
Sequential Create和Radom Create
這兩大類測試均是用創建,讀取,刪除大量的小文件來測試磁盤效率。文件名用7位數字和任意個數(0-12)的任意英文字母來組成。在Sequential部分,字母在數字之后,而Random部分則是字母在數字之前。
創建文件的最小值和最大值等參數可以在bonnie++命令行中用-n參數來控制。
最后需要注意的是,在測試RAID的時候,對於多CPU的系統,bonnie++並沒有發揮CPU的最大潛力,也就是說bonnie++發出的I/O請求 通常不夠達到CPU和磁盤的最大壓力,這時候顯示的吞吐量就不是存儲設備能夠達到的最大值。因此,這些數字智能作為在單CPU系統中操作的有效性指標。
二、內存測試工具簡介
1、memtester
參考網站:http://pyropus.ca/software/memtester/
memtester是用戶態工具,用於測試內存子系統的故障。非常方便,支持32位或64位Unix-like系統。對於硬件開發開發者來說,memtester可以定位到物理地址。
1、安裝
下載獲取memtester-4.3.0.tar.gz源碼包。
#tar –zxvf memtester-4.3.0.tar.gz
#make
#make install
2、測試
./memtester [-p physaddrbase] [B|K|M|G] [loops]
其中:
Physaddrbase:需要測試的物理地址;
<mem>[B|K|M|G]:測試內存的大小;
[loops]:測試次數
案例:
# ./memtester -p 0x0a0000 4k 1
memtester version 4.3.0 (32-bit)
Copyright (C) 2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).
pagesize is 4096
pagesizemask is 0xfffff000
want 0MB (4096 bytes)
Loop 1/1:
Stuck Address :testing 0FAILURE: possible bad addressline at physical address 0x000a0000.
Skipping to next test…
Random Value : ok
Compare XOR : ok
Compare SUB : ok
Compare MUL : ok
Compare DIV : ok
Compare OR : ok
Compare AND : ok
Sequential Increment : ok
Solid Bits : ok
Block Sequential : ok
Checkerboard : ok
Bit Spread : ok
Bit Flip : ok
Walking Ones : ok
Walking Zeroes : ok
8-bit Writes : ok
16-bit Writes : ok
Done.