Linux文件系統測試工具

1、文件系統測試工具簡介

一、LTP

參考網站:http://oss.sgi.com/projects/ltp/ php

LTP(Linux Test Project)是由SGI和IBM聯合發起的項目,提供一套驗證Linux系統可靠性、健壯性、穩定性的測試套件,也可用來進行POSIX兼容測試和功 能性測試。LTP提供了2000多個測試工具,能夠根據須要自行進行定製。同時,LTP仍是一個優秀的自動化測試框架,基於它經過設計測試用例和測試工具 能夠實現更多功能的測試自動化。 html

穩定性測試相關參考: linux

基於LTP《測試Linux的可靠性》http://www.ibm.com/developerworks/cn/linux/l-rel/ web

 

二、fstest

 

參考網站:http://www.tuxera.com/community/posix-test-suite/ shell

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」裏面的相關命令 後端

 

三、locktests

 

參考網站:http://nfsv4.bullopensource.org/tools/tests/locktest.php 緩存

locktest用於fcntl鎖功能的壓力測試。運行時,主進程先在指定文件區域設置字節範圍的記錄鎖,而後多個從進程嘗試在該文件區域執行read, write, 加新鎖操做。這些操做結果是可預期的(矩陣以下),若是操做結果與預期一致則測試經過,不然測試失敗。 服務器

Expected results 併發

Here is the table of expected results, depending on :

  1. Slave test operations (READ, WRITE, SET A WRITE LOCK … )
  2. Master Operation (SET A READ LOCK, SET A WRITE LOCK )
  3. Slave types (Processes, threads)
  4. Locking profile (POSIX locking, Mandatory locking)
     

Master

   

Slave type

Test operation

advisory

locking 

  mandatory

locking 

   

read lock 

write lock 

read lock 

write lock 

thread

set a read lock

Allowed

Allowed

Allowed

Allowed

 

set a write lock

Allowed

Allowed

Allowed

Allowed

 

read

Allowed

Allowed

Allowed

Allowed

 

write

Allowed

Allowed

Allowed

Allowed

process

set a read lock

Allowed

Denied

Allowed

Denied

 

set a write lock

Denied

Denied

Denied

Denied

 

read

Allowed

Allowed

Denied

Allowed

 

write

Allowed

Allowed

Denied

Denied

四、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。

 

五、iozone

 

參考網站:http://www.iozone.org/

Iozone是目前應用很是普遍的文件系統測試標準工具,它可以產生並測量各類的操做性能,包括read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread ,mmap, aio_read, aio_write等操做。Iozone目前已經被移植到各類體系結構計算機和操做系統上,普遍用於文件系統性能測試、分析與評估的標準工具。

clip_image002

 

六、Postmark

 

參考網站:http://openbenchmarking.org/test/pts/postmark

Postmark 是由著名的 NAS 提供商 NetApp 開發,用來測試其產品的後端存儲性能。Postmark主要用於測試文件系統在郵件系統或電子商務系統中性能,這類應用的特色是:須要頻繁、大量地存取小 文件。 Postmark 的測試原理是建立一個測試文件池。文件的數量和最大、最小長度能夠設定,數據總量是必定的。建立完成後, Postmark 對文件池進行一系列的事務( transaction )操做,根據從實際應用中統計的結果,設定每個事務包括一次建立或刪除操做和一次讀或添加操做,在有些狀況下,文件系統的緩存策略可能對性能形成影響, Postmark 能夠經過對建立 / 刪除以及讀 / 添加操做的比例進行修改來抵消這種影響。事務操做進行完畢後, Post 對文件池進行刪除操做,並結束測試,輸出結果。 Postmark是用隨機數來產生所操做文件的序號,從而使測試更加貼近於現實應用。輸出結果中比較重要的輸出數據包括測試總時間、每秒鐘平均完成的事務 數、在事務處理中平均每秒建立和刪除的文件數,以及讀和寫的平均傳輸速度。

1、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有兩種使用方法:

一、 使用配置文件

./postmark XXX.cfg

配置文件方式,是將全部配置命令及run放入文件中,由postmark自動讀取

配置文件示例:

set size 10000 50000

set location /mnt/cfs

set transactions 5000

set number 5000

run result.txt

show

quit

二、命令行模式

./postmark

進入命令行模式,而後打入相應命令,進行配置,run命令按當前配置運行postmark將上面配置文件中的命令在命令行中依次執行,結果是相同的,沒有任何區別。

 

七、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等操做系統。

 

八、filebench

 

參考網站:http://sourceforge.net/projects/filebench/

Filebench 是一款文件系統性能的自動化測試工具,它經過快速模擬真實應用服務器的負載來測試文件系統的性能。它不只能夠仿真文件系統微操做(如 copyfiles, createfiles, randomread, randomwrite ),並且能夠仿真複雜的應用程序(如 varmail, fileserver, oltp, dss, webserver, webproxy )。 Filebench 比較適合用來測試文件服務器性能,但同時也是一款負載自動生成工具,也可用於文件系統的性能。

 

九、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系統中操做的有效性指標。

 

2、內存測試工具簡介

 

一、memtester

參考網站:http://pyropus.ca/software/memtester/

memtester是用戶態工具,用於測試內存子系統的故障。很是方便,支持32位或64位Unix-like系統。對於硬件開發開發者來講,memtester能夠定位到物理地址。

一、安裝

下載獲取memtester-4.3.0.tar.gz源碼包。

#tar –zxvf memtester-4.3.0.tar.gz

#make

#make install

二、測試

./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.

相關文章
相關標籤/搜索