iozone是一個(gè)文件系統(tǒng)性能評(píng)測工具,,可以測試Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等不同模式下不同文件系統(tǒng)的讀寫性能,。本文介紹了它的各種功能,,如何針對ARM進(jìn)行交叉編譯,,以及如何配置
1. 介紹
iozone的web site位于:
http://www.iozone.org/
本文中使用的軟件為:
http://www.iozone.org/src/current/iozone3_414.tar
iozone的主要測試內(nèi)容:
Write: 測試向一個(gè)新文件寫入的性能。當(dāng)新文件被寫入時(shí),,除了文件中的數(shù)據(jù),,還有被稱作“元數(shù)據(jù)”的額外信息也需要
Re-write: 測試向一個(gè)已存在的文件寫入的性能,。因?yàn)榇藭r(shí)元數(shù)據(jù)已經(jīng)存在。Re-write的性能通常比Write的性
Read: 測試讀一個(gè)已存在的文件的性能,。
Re-Read: 測試讀一個(gè)最近讀過的文件的性能。因?yàn)椴僮飨到y(tǒng)通常會(huì)緩存最近讀過的文件數(shù)據(jù),,Re-Read性能會(huì)高些,。
Random Read: 測試讀一個(gè)文件中的隨機(jī)偏移量的性能。
Random Write: 測試寫一個(gè)文件中的隨機(jī)偏移量的性能,。
Random Mix: 測試讀寫一個(gè)文件中的隨機(jī)偏移量的性能,。在隨機(jī)訪問的時(shí)候,許多其他因素可能影響測試結(jié)果,,例如:操作系統(tǒng)
Backwards Read: 測試使用倒序讀一個(gè)文件的性能,。盡管不常見,但事實(shí)上確實(shí)有些應(yīng)用這么干,,例如MSC Nastran,。
Record Rewrite: 測試寫與覆蓋寫一個(gè)文件中的特定塊的性能。在跨越L1 cache,、L2 cache和操作系統(tǒng)緩存邊界時(shí),,測試結(jié)果會(huì)發(fā)生突然變化,。
Strided Read: 測試跳躍讀一個(gè)文件的性能。例如:每間隔200Kbytes,讀4Kbytes并重復(fù)這個(gè)模式,。文件中使用
Fwrite: 測試調(diào)用庫函數(shù)fwrite()來寫文件的性能。這個(gè)測試是針對新文件,,所以包括元數(shù)據(jù)的寫入,。
Frewrite:測試調(diào)用庫函數(shù)fwrite()來寫文件的性能。類似Re-write操作,,因?yàn)槭轻槍?wbr>已存在的文件,,無元數(shù)據(jù)操作,測試的性能會(huì)高些,。
Fread:測試調(diào)用庫函數(shù)fread()來讀文件的性能,。
Freread: 這個(gè)測試與上面的fread 類似,類似Re-Read,,因?yàn)椴僮飨到y(tǒng)緩存了文件數(shù)據(jù)會(huì)導(dǎo)致測試結(jié)果比較高,。
幾個(gè)特殊測試:
Mmap: 這個(gè)測試就是測量使用mmap()機(jī)制完成I/O的性能。許多操作系統(tǒng)支持mmap()的使用來映射一個(gè)文
Async I/O: 這個(gè)測試測量POSIX異步I/O機(jī)制的性能。許多操作系統(tǒng)支持的另外一種I/O機(jī)制是POSIX 標(biāo)準(zhǔn)的異步I/O,。本程序使用POSIX標(biāo)準(zhǔn)異步I/O接口來完成此測試功能,。例如: aio_write(), aio_read(), aio_error()。
2. 針對ARM交叉編譯:
iozone對交叉編譯的支持算是比較好的,。打開iozone3_414/src/current/Mak
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上運(yùn)行iozone
可以用以下命令看iozone的詳細(xì)參數(shù)列表和解釋:
./iozone –h
iozone有很多參數(shù)。在這里我們關(guān)注的是如何用iozone通過ramfs來測試和比較內(nèi)存性能,在z
./iozone -Raz -b out.xls -i 0 -i 1 -i 2 -S 512 -g 8M -+r
常用參數(shù)說明如下:
-R: 產(chǎn)生EXCEL格式的報(bào)告
-a: 全自動(dòng)模式,。生成包括所有測試操作的報(bào)告,,使用的塊 大小從4k到16M,文件大小從64k到512M,。
-f filename: 用來指定測試時(shí)使用的臨時(shí)文件的文件名。
-z: 和-a一起,,指定測試所有可能的record size
-S: 指定process cache的大小,,單位是Kbytes。
-g -n: 指定file size的最大值和最小值,。文件越大測試時(shí)間越長,。測試文件的大小一定要大過cache,否則會(huì)使數(shù)值非常
-+r:在打開文件時(shí)的flag中包含O_RSYNC和O_SYNC,,即同步讀和同步寫,保證數(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的時(shí)候被指定。
進(jìn)入到相應(yīng)的目錄,,執(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ù)是傳輸速度,單位為
從測試結(jié)果來看,,有如下結(jié)論
* 因?yàn)槭菍am file system測試,是否打開數(shù)據(jù)同步對性能影響不大,。
* 對Write操作,,性能ramfs>tmpfs>>ramdisk; 對Read操作,性能ramfs>ramdisk>tmfs,??梢哉J(rèn)為ramfs的開銷更小,更能反映ma
4. 測試PL MIG的性能:
Linux的memory pool缺省是從高地址開始分配的。如果要測試PL MIG的性能,,只需要簡單的修改Linux的kernel command line即可,。在U-BOOT里面運(yùn)行命令:
setenv bootargs console=ttyPS0,115200 root=/dev/ram rw ip=192.168.1.10 earlyprintk mem=2048M
run sdboot
啟動(dòng)后cat /proc/meminfo可以看到Linux確實(shí)使用了2GB的內(nèi)存。
重新運(yùn)行benchmarker,,即可得到PL DDR的性能數(shù)據(jù),。
注意:文件大小要大于L2 cache size(512KB)才有意義,否則數(shù)據(jù)都是在L1/L2 cache里面轉(zhuǎn)來轉(zhuǎn)去,。