移植FIO benchmark至Android

来源:互联网 发布:乾隆知画嗯嗯 编辑:程序博客网 时间:2024/06/14 10:40

移植FIO至Android


FIO是在PC上常用来测IO performance的工具,本文尝试将其按Android平台编译
虽然FIO声明是支持Android但没有在README中说明如何对其进行编译,再加上在Android Platform上没有进行过足够的测试,所以移植起来稍有麻烦,所以在这记录下我的移植过程:


我用的OS是ubuntu12.04,FIO版本是2.1.3-18


首先是下载NDK,Google的标准交叉编译工具
1.下载Android-NDK
在http://developer.android.com/tools/sdk/ndk/index.html中下载android-ndk-r9b-linux-x86_64.tar.bz2
然后在Terminal中解压所下载的NDK
tar jxvf android-ndk-r0b-linux-x86_64.tar.bz2


在目录中使用如下命令
./android-ndk-r9b/build/tools/make-standalone-toolchain.sh --ndk-dir=/home/wenji/Android/android-ndk-r9b/ --system=linux-x86_64 --platform=android-9 --install-dir=/home/wenji/tools/NDK_ANDROID9
建立一个可以独立运行的交叉编译器并放入NDK_ANDROID9这个文件夹中


2.编译(需改源码中的一个函数)
在使用
make V=1 UNAME=Android cross_prefix=/home/wenji/tools/NDK_ANDROID9/bin/arm-linux-androideabi-
来进行编译时发现,因为engines/net.c中用了inet_network函数,而库中没有定义编译出错,比较了一下inet_network与inet_addr的区别,决定将其改为inet_addr再编译通过,以下为PATCH


From 86979699d45ca44b5b13cd22cf6a08c4479f28e0 Mon Sep 17 00:00:00 2001
From: Keenite <keenite@gmail.com>
Date: Thu, 7 Nov 2013 10:47:36 -0500
Subject: [PATCH] Modify inet_network for Android


Modify the inet_network to inet_addr in engines/net.c because the
toolchain of google didn't support it.


Signed-off-by: Keenite <keenite@gmail.com>
---
 engines/net.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)


diff --git a/engines/net.c b/engines/net.c
index 0c90e1c..9629b4f 100644
--- a/engines/net.c
+++ b/engines/net.c
@@ -188,12 +188,13 @@ static int poll_wait(struct thread_data *td, int fd, short events)
 
 static int fio_netio_is_multicast(const char *mcaddr)
 {
- in_addr_t addr = inet_network(mcaddr);
+// in_addr_t addr = inet_network(mcaddr);
+ in_addr_t addr = inet_addr(mcaddr);
  if (addr == -1)
  return 0;
 
- if (inet_network("224.0.0.0") <= addr &&
-    inet_network("239.255.255.255") >= addr)
+ if (inet_addr("224.0.0.0") <= addr &&
+    inet_addr("239.255.255.255") >= addr)
  return 1;
 
  return 0;
-- 

1.7.9.5


另外,附FIO的message list,最新的修改信息和一些没说明的东西,在list里都有讨论

www.spinics.net/lists/fio/index.html#01336

Linux清空CACHE命令

#echo 3 > /proc/sys/vm/drop_caches

FIO 命令示例:

fio --blocksize=4k --numjob=1 --rw=write --direct=1 --iodepth=4 --size=2048m --name=seq_write