《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 嵌入式系統(tǒng)的性能測試(2) – iozone篇
嵌入式系統(tǒng)的性能測試(2) – iozone篇
摘要: iozone是一個文件系統(tǒng)性能評測工具,可以測試Read,write,re-read,re-write,readbackwards,readstrided,fread,fwrite,randomread,pread,mmap,aio_read,aio_write等不同模式下不同文件系統(tǒng)的讀寫性能
Abstract:
Key words :

iozone是一個文件系統(tǒng)性能評測工具,,可以測試Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等不同模式下不同文件系統(tǒng)的讀寫性能,。本文介紹了它的各種功能,如何針對ARM進行交叉編譯,,以及如何配置合理參數(shù)進行評測,。通過在RAMFS上運行iozone,,亦可測試內(nèi)存子系統(tǒng)的性能,。

 

1. 介紹

iozone的web site位于:

http://www.iozone.org/

本文中使用的軟件為:

http://www.iozone.org/src/current/iozone3_414.tar

 

iozone的主要測試內(nèi)容:

Write: 測試向一個新文件寫入的性能,。當新文件被寫入時,除了文件中的數(shù)據(jù),,還有被稱作“元數(shù)據(jù)”的額外信息也需要被存儲,。這些額外信息包括目錄信息,所分配的空間和一些與該文件有關但又并非該文件所含數(shù)據(jù)的其他數(shù)據(jù),。因為這些額外信息,,Write的性能通常會比Re-write的性能低。

Re-write: 測試向一個已存在的文件寫入的性能,。因為此時元數(shù)據(jù)已經(jīng)存在,。Re-write的性能通常比Write的性能高。

Read: 測試讀一個已存在的文件的性能,。

Re-Read: 測試讀一個最近讀過的文件的性能,。因為操作系統(tǒng)通常會緩存最近讀過的文件數(shù)據(jù),Re-Read性能會高些,。

Random Read: 測試讀一個文件中的隨機偏移量的性能,。

Random Write: 測試寫一個文件中的隨機偏移量的性能。

Random Mix: 測試讀寫一個文件中的隨機偏移量的性能,。在隨機訪問的時候,,許多其他因素可能影響測試結果,例如:操作系統(tǒng)緩存的大小,,磁盤數(shù)量,,尋道延遲和其他。

Backwards Read: 測試使用倒序讀一個文件的性能,。盡管不常見,,但事實上確實有些應用這么干,例如MSC Nastran,。

Record Rewrite: 測試寫與覆蓋寫一個文件中的特定塊的性能,。在跨越L1 cache、L2 cache和操作系統(tǒng)緩存邊界時,,測試結果會發(fā)生突然變化,。

Strided Read: 測試跳躍讀一個文件的性能。例如:每間隔200Kbytes,讀4Kbytes并重復這個模式,。文件中使用了數(shù)據(jù)結構并且訪問這個數(shù)據(jù)結構的特定區(qū)域的應用程序常常這樣做,。

Fwrite: 測試調(diào)用庫函數(shù)fwrite()來寫文件的性能。這個測試是針對新文件,,所以包括元數(shù)據(jù)的寫入,。

Frewrite:測試調(diào)用庫函數(shù)fwrite()來寫文件的性能,。類似Re-write操作,因為是針對已存在的文件,,無元數(shù)據(jù)操作,,測試的性能會高些。

Fread:測試調(diào)用庫函數(shù)fread()來讀文件的性能,。

Freread: 這個測試與上面的fread 類似,,類似Re-Read,因為操作系統(tǒng)緩存了文件數(shù)據(jù)會導致測試結果比較高,。

 

幾個特殊測試:

Mmap: 這個測試就是測量使用mmap()機制完成I/O的性能,。許多操作系統(tǒng)支持mmap()的使用來映射一個文件到用戶地址空間。映射之后,對內(nèi)存的讀寫將同步到文件中去,。這對一些希望將文件當作內(nèi)存塊來使用的應用程序來說很方便,。一個例子是內(nèi)存中的一塊將同時作為一個文件保存在于文件系統(tǒng)中。mmap 文件的語義和普通文件略有不同,。如果發(fā)生了對內(nèi)存的存儲,,并不是立即發(fā)生相應的文件I/O操作。使用MS_SYNC 和MS_ASYNC標志位的 msyc()函數(shù)調(diào)用將控制內(nèi)存和文件的一致性,。調(diào)用msync() 時將MS_SYNC置位將強制把內(nèi)存里的內(nèi)容寫到文件中去并等待直到此操作完成才返回,。而MS_ASYNC 置位則告訴操作系統(tǒng)使用異步機制將內(nèi)存刷新到磁盤,這樣應用程序可以直接返回而不用等待此操作的完成,。

Async I/O: 這個測試測量POSIX異步I/O機制的性能,。許多操作系統(tǒng)支持的另外一種I/O機制是POSIX 標準的異步I/O。本程序使用POSIX標準異步I/O接口來完成此測試功能,。例如: aio_write(), aio_read(), aio_error(),。

 

2. 針對ARM交叉編譯:

iozone對交叉編譯的支持算是比較好的。打開iozone3_414/src/current/Makefile找到CC和GCC的定義并修改成如下內(nèi)容,。

CC    = arm-xilinx-linux-gnueabi-gcc

GCC = arm-xilinx-linux-gnueabi-gcc

注意:這里使用的是PetaLinux 2013.04的tool chain,,使用前要先到PetaLinux目錄下'source settings.sh’

 

然后用命令'make linux-arm’即可完成編譯。編譯成功后 生成可執(zhí)行文件iozone,。

 

3. 在zc706上運行iozone

可以用以下命令看iozone的詳細參數(shù)列表和解釋:

./iozone –h

 

iozone有很多參數(shù),。在這里我們關注的是如何用iozone通過ramfs來測試和比較內(nèi)存性能,,在zc706上使用的命令如下:

./iozone -Raz -b out.xls -i 0 -i 1 -i 2 -S 512 -g 8M -+r

 

常用參數(shù)說明如下:

-R: 產(chǎn)生EXCEL格式的報告

-a: 全自動模式,。生成包括所有測試操作的報告,使用的塊 大小從4k到16M,,文件大小從64k到512M,。

-f filename: 用來指定測試時使用的臨時文件的文件名。

-z: 和-a一起,,指定測試所有可能的record size

-S: 指定process cache的大小,,單位是Kbytes,。

-g -n: 指定file size的最大值和最小值。文件越大測試時間越長,。測試文件的大小一定要大過cache,,否則會使數(shù)值非常不真實。

-+r:在打開文件時的flag中包含O_RSYNC和O_SYNC,,即同步讀和同步寫,,保證數(shù)據(jù)真正寫到硬件上和真正從硬件上讀數(shù)據(jù)。

 

可以用以下命令創(chuàng)建ram file system以供測試

mkdir -p /home/root/tmpfs

mount tmpfs /home/root/tmpfs -t tmpfs -O size=32M

 

mkdir -p /home/root/ramfs

mount -t ramfs none /home/root/ramfs -o maxsize=32768

注意:缺省情況下,,Ramfs被限制最多可使用內(nèi)存大小的一半,。可以通過maxsize(以kbyte為單位)選項來改變,。

 

mkdir -p /home/root/ramdisk

mke2fs /dev/ram1 -L "ramdisk" -b 1024 -m 0

mount -t ext2 /dev/ram1 /home/root/ramdisk

注意: ramdisk的大小在配置Linux kernel的時候被指定,。

 

進入到相應的目錄,執(zhí)行以下命令完成測試:

tar xvf /mnt/iozone3_414.tar

cd iozone3_414/src/current/

./iozone -Raz -b out.xls -i 0 -i 1 -i 2 -S 512 -g 8M -+r

 

生成的xls report里面,,行是記錄大小,,列是測試文件大小,單位為Kbytes,。表格中的數(shù)據(jù)是傳輸速度,,單位為Kbytes/s。

 

從測試結果來看,,有如下結論

* 因為是對ram file system測試,,是否打開數(shù)據(jù)同步對性能影響不大。

* 對Write操作,,性能ramfs>tmpfs>>ramdisk; 對Read操作,,性能ramfs>ramdisk>tmfs??梢哉J為ramfs的開銷更小,,更能反映main memory的性能。值得注意的是ramdisk的寫性能很差,,只有ramfs和tmpfs的1/4左右,。

 

4. 測試PL MIG的性能:

Linux的memory pool缺省是從高地址開始分配的。如果要測試PL MIG的性能,,只需要簡單的修改Linux的kernel command line即可,。在U-BOOT里面運行命令:

setenv bootargs console=ttyPS0,115200 root=/dev/ram rw ip=192.168.1.10 earlyprintk mem=2048M

run sdboot

啟動后cat /proc/meminfo可以看到Linux確實使用了2GB的內(nèi)存。

 

重新運行benchmarker,,即可得到PL DDR的性能數(shù)據(jù),。

注意:文件大小要大于L2 cache size(512KB)才有意義,否則數(shù)據(jù)都是在L1/L2 cache里面轉來轉去。

 

 

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權禁止轉載,。