性能是评估一个文件系统的最为关键的维度,根据文件系统在不同场景下的性能表现,可以判断文件系统是否适合特定的应用场景,并为系统性能调优提供依据。
当我们使用一个文件系统时(例如Ext4),我们怎么知道这个文件系统是否可靠?它的性能与稳定性如何?这个文件系统的性能瓶颈在哪里?以及如何才能发挥出文件系统的最佳性能?
下文即将介绍的iozone工具将帮助你测试这一切。
iozone
IOzone是一个文件系统基准测试工具。该基准测试生成并测量各种文件操作。
Iozone已经被移植到许多机器上,并在许多操作系统下运行。
基准测试针对以下操作测试文件I/O性能:
- Read
- write
- re-read
- re-write
- read backwards
- read strided
- fread
- fwrite
- random read/write
- pread/pwrite variants
- aio_read
- aio_write
- mmap
iozone工具获取
IOzone Filesystem Benchmark 官网

不同平台iozone工具安装方法:
- windows平台可以在iozone官网下载exe格式的安装包
- linux X86_64平台可以在iozone官网通过RPM包手动安装
iozone - ARM平台可以下载源码进行交叉编译
ARM平台交叉编译iozone方法
-
首先去官网下载iozone源码(Latest或者stable版本都可以)
笔者下载的是iozone3_494.tgz -
解压源码文件

- docs 里面存放的是使用文档,有PDF和DOC版本
- src 里面是源码
-
修改makefile
- iozone3_494/src/current/makefile
CC = aarch64-linux-gnu-gcc # 修改为交叉编译器
C89 = c89
GCC = aarch64-linux-gnu-gcc # 修改为交叉编译器
......
- 编译
$ cd iozone3_494/src/current
$ chmod 755 * #给文件增加读写权限
$ make clean # 清除之前编译结果
$ make linux-arm # 一定要指定平台类型,arm64也可以指定为 linux-arm
编译成功后将iozone3_494/src/current/iozone二进制文件拷贝到开发板即可。
iozone测试选项说明如下
仅涵盖大部分选项,更全面的选项说明请执行iozone -h。
| OPTIONS | 说明 | 备注 |
|---|---|---|
| -a | 全自动测试模式。记录大小从4k到16M,文件大小从64k到512M | 如果和-i 同时指定,以-i 指定的测试模式为准,比如仅指定 -i 0,那么就只测写和覆写 |
| -A | 这个版本的自动模式提供了更多的覆盖率,但消耗了大量的时间。当文件大小大于或等于32 MB时,-a选项会自动停止使用小于64k的传输大小。这节省了时间。-A选项告诉Iozone用户愿意等待,即使文件非常大,也希望对小传输进行密集覆盖。注意:这个选项在Iozone 3.61版本中已被弃用。请使用-az -i 0 -i 1代替。 | flash编程的最小单位,一般=pagesize |
| -b filename | Iozone 将创建一个二进制文件格式的文件filename,并以 Excel 兼容的方式输出结果 | |
| -B | 使用mmap()文件。这使得所有要测量的临时文件都可以通过mmap()接口创建和访问。有些应用程序喜欢将文件视为内存数组。这些应用程序对文件进行mmap()操作,然后通过加载和存储访问数组来执行文件I/O操作。 | |
| -c | 在计时计算中包含close()。只有当你怀疑close()在当前测试的操作系统中有问题时,这才有用。它对于NFS版本3的测试也很有用,可以帮助确定nfs3_commit是否正常工作。 | |
| -C | 在吞吐量测试中显示每个子进程传输的字节数。如果你的操作系统在文件I/O或进程管理中有任何饥饿问题,这很有用。 | |
| -d # | 在屏障外的微秒延迟。在吞吐量测试期间,在开始测试之前,所有线程或进程都被强制设置为屏障。通常,所有的线程或进程都会在同一时刻被释放。该选项允许在释放每个进程或线程之间延迟指定的时间(以微秒为单位)。 | |
| -D | 在 mmap 文件上使用 msync(MS_ASYNC)。 这告诉操作系统需要将mmap空间中的所有数据异步写入磁盘 | |
| -e | 在计时计算中包含flush (fsync,fflush) | |
| -E | 用于选择扩展测试。使用pread接口 | 仅在某些平台上可用。 |
| -f filename | 用于指定被测试临时文件的文件名。在使用unmount选项时,这很有用。当在测试之间使用unmount进行测试时,测试中的临时文件必须位于可以卸载的目录中。无法卸载当前工作目录,因为Iozone进程正在这个目录中运行 | 未指定默认当前目录 |
| -F filename filename filename … | 指定吞吐量测试中使用的每个临时文件名。名称的数量应该等于指定的进程或线程的数量。 | |
| -g # | 设置自动模式下的最大文件大小(以KB为单位)。 | 仅自动模式(-a)下可用 |
| -G | 在mmap文件上使用msync(MS_SYNC)。这告诉操作系统,mmap空间中的所有数据都需要同步写入磁盘 | |
| -H | 将 POSIX 异步 I/O 与 # 异步操作一起使用。 Iozone 将使用 POSIX 异步 I/O,将异步缓冲区中的 bcopy 返回到应用程序缓冲区中。 某些版本的 MSC NASTRAN 以这种方式执行 I/O。 应用程序使用此技术,以便异步 I/O 可以在库中执行,并且不需要更改应用程序内部模型。 | |
| -i # | 用于指定要运行的测试。(0=write/rewrit |

最低0.47元/天 解锁文章
862

被折叠的 条评论
为什么被折叠?



