前言
FIO是是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet,guasi, solarisaio 等等。
我们可以通过运行fio负载,在linux 、Windows 环境下测试磁盘的性能。
fio 官网: Fio官网传送门
Fio 源码压缩包 下载
一、移植Fio 至 Android
FIO 默认支持 Android 交叉编译,但是REDAME 上说明如何编译 Android。
因工作需要在Android平台上使用Fio,故在此文记录移植过程。
编译环境: Linux 系统: Ubuntu 16.04 Fio 版本: 2.19
运行环境: 开发板 ODROID-XU4, Android 4.4.4
1.1 建立独立运行的交叉编译器
下载 NDK NDK 传送门
我所使用的是 NDK 14b, 下载成功后解压 ,进入指定目录
cd /android-ndk-r14b/build/tools
./make-standalone-toolchain.sh --arch=arm --platform=android-19 --install-dir=/data/NDK_ANDROID19 --toolchain=arm-linux-androideabi-4.8
note: --platform=android-19 此参数 与Android 版本有关,我所使的 Android4.4 对应 android-19
交叉编译器 安在 /data/NDK_ANDROID19 目录下
这样,就成功安装好 NDK 编译器。附加传送门 NDK交叉编译之自定义工具链
1.2 编译 fio
进入 fio 目录下
cd fio-2.19
执行以下命令:
make V=1 UNAME=Android cross_prefix=/data/NDK_ANDROID19/bin/arm-linux-androideabi-
出现 以下error
解决
error 1 :undefined reference to ‘inet_network’
engines/net.c( 316行 intfio_netio_is_multicast函数)中用了inet_network函数,而库中没有定义,所以编译出错,比较了一下inet_network与inet_addr的区别,决定将其改为inet_addr.
error 2:undefined reference to ‘__bswap_32’
原因:os.android.h 中宏定义; 但是 __bswap_16 __bswap_32 __bswap_64 没有定义
在fio 源码工程中搜索 fio_swap16,fio_swap32,将fio_swap16,fio_swap32函数直接定义在 blktrace.c 中。
再次 执行 编译命令,
make V=1 UNAME=Android cross_prefix=/data/NDK_ANDROID19/bin/arm-linux-androideabi-
最后 make install 默认生成的 fio可执行文件 安装在 /usr/local/bin/ 目录下
然后将 生成 fio可执行文件 推送到 Android 的 /data 目录下
测试 fio 是否移植成功
./fio -h
如果 命令能够执行,并输出fio 帮助信息,说明fio 已成功移植到 Android 平台。
二、FIO 参数说明
1.Fio 用法
顺序写
fio -filename=/data/fiotest -direct=1 -iodepth=1 -thread -rw=write -ioengine=psync -bs=16k -size=200G -numjobs=30-runtime=1000 -group_reporting -name=mytest
说明: