iozone是一个文件系统性能评测工具,可以测试Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等不同模式下不同文件系统的读写性能。本文介绍了它的各种功能,如何针对ARM进行交叉编译,以及如何配置
1. 介绍
iozone的web site位于:
本文中使用的软件为:
http://www.iozone.org/src/current/iozone3_414.tar
iozone的主要测试内容:
Write: 测试向一个新文件写入的性能。当新文件被写入时,除了文件中的数据,还有被称作“元数据”的额外信息也需要
Re-write: 测试向一个已存在的文件写入的性能。因为此时元数据已经存在。Re-write的性能通常比Write的性
Read: 测试读一个已存在的文件的性能。
Re-Read: 测试读一个最近读过的文件的性能。因为操作系统通常会缓存最近读过的文件数据,Re-Read性能会高些。
Random Read: 测试读一个文件中的随机偏移量的性能。
Random Write: 测试写一个文件中的随机偏移量的性能。
Random Mix: 测试读写一个文件中的随机偏移量的性能。在随机访问的时候,许多其他因素可能影响测试结果,例如:操作系统
Backwards Read: 测试使用倒序读一个文件的性能。尽管不常见,但事实上确实有些应用这么干,例如MSC Nastran。
Record Rewrite: 测试写与覆盖写一个文件中的特定块的性能。在跨越L1 cache、L2 cache和操作系统缓存边界时,测试结果会发生突然变化。
Strided Read: 测试跳跃读一个文件的性能。例如:每间隔200Kbytes,读4Kbytes并重复这个模式。文件中使用
Fwrite: 测试调用库函数fwrite()来写文件的性能。这个测试是针对新文件,所以包括元数据的写入。
Frewrite:测试调用库函数fwrite()来写文件的性能。类似Re-write操作,因为是针对
Fread:测试调用库函数fread()来读文件的性能。
Freread: 这个测试与上面的fread 类似,类似Re-Read,因为操作系统缓存了文件数据会导致测试结果比较高。
几个特殊测试:
Mmap: 这个测试就是测量使用mmap()机制完成I/O的性能。许多操作系统支持mmap()的使用来映射一个文
Async I/O: 这个测试测量POSIX异步I/O机制的性能。许多操作系统支持的另外一种I/O机制是POSIX 标准的异步I/O。本程序使用POSIX标准异步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’即可完成编译。编译成功后 生成可执行文件iozone。
3. 在zc706上运行iozone
可以用以下命令看iozone的详细参数列表和解释:
./iozone –h
iozone有很多参数。在这里我们关注的是如何用iozone通过ramfs来测试和比较内存性能,在z
./iozone -Raz -b out.xls -i 0 -i 1 -i 2 -S 512 -g 8M -+r
常用参数说明如下:
-R: 产生EXCEL格式的报告
-a: 全自动模式。生成包括所有测试操作的报告,使用的块 大小从4k到16M,文件大小从64k到512M。
-f filename: 用来指定测试时使用的临时文件的文件名。
-z: 和-a一起,指定测试所有可能的record size
-S: 指定process cache的大小,单位是Kbytes。
-g -n: 指定file size的最大值和最小值。文件越大测试时间越长。测试文件的大小一定要大过cache,否则会使数值非常
-+r:在打开文件时的flag中包含O_RSYNC和O_SYNC,即同步读和同步写,保证数据真正写到
可以用以下命令创建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被限制最多可使用内存大小的一半。可以通过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的时候被指定。
进入到相应的目录,执行以下命令完成测试:
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。表格中的数据是传输速度,单位为
从测试结果来看,有如下结论
* 因为是对ram file system测试,是否打开数据同步对性能影响不大。
* 对Write操作,性能ramfs>tmpfs>>ramdisk; 对Read操作,性能ramfs>ramdisk>tmfs。可以认为ramfs的开销更小,更能反映ma
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的内存。
重新运行benchmarker,即可得到PL DDR的性能数据。
注意:文件大小要大于L2 cache size(512KB)才有意义,否则数据都是在L1/L2 cache里面转来转去。
==END==
本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念
本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“
课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了
@2003-2020 中国电子顶级开发网