基于Android系统的hikey 960 开发板中使用blktrace(linux自带)分析I/O信息

blktrace是一柄神器,很多工具都是基于该神器的:ioprof,seekwatcher,iowatcher,这个工具基本可以满足我们的对块设备请求的所有了解。

在将Q版本Android 刷入hikey 960 开发板后,本文讲述如何在系统中安装并使用blktrace。

一、blktrace简介:

一个I/O请求进入block layer之后,可能会经历下面的过程:

Remap: 可能被DM(Device Mapper)或MD(Multiple Device, Software RAID) remap到其它设备
Split: 可能会因为I/O请求与扇区边界未对齐、或者size太大而被分拆(split)成多个物理I/O
Merge: 可能会因为与其它I/O请求的物理位置相邻而合并(merge)成一个I/O
被IO Scheduler依照调度策略发送给driver
被driver提交给硬件,经过HBA、电缆(光纤、网线等)、交换机(SAN或网络)、最后到达存储设备,设备完成IO请求之后再把结果发回。
blktrace 能够记录下IO所经历的各个步骤

blktrace的输出:

第一个字段:8,0 这个字段是设备号 major device ID和minor device ID。
第二个字段:3 表示CPU
第三个字段:11 序列号
第四个字段:0.009507758 Time Stamp是时间偏移
第五个字段:PID 本次IO对应的进程ID
第六个字段:Event,这个字段非常重要,反映了IO进行到了那一步
第七个字段:R表示 Read, W是Write,D表示block,B表示Barrier Operation
第八个字段:223490+56,表示的是起始block number 和 number of blocks,即我们常说的Offset 和 Size
第九个字段: 进程名
其中第六个字段非常有用:每一个字母都代表了IO请求所经历的某个阶段。

Q – 即将生成IO请求
|
G – IO请求生成
|
I – IO请求进入IO Scheduler队列
|
D – IO请求进入driver
|
C – IO请求执行完毕
磁盘请求延迟:D-C (2020-On the Application Level Impact of SSD Performance Anomalies)
blkparse中分析的结果为:
M(合并的IO数Merges) Q(文件系统派发的IO数Queued)=A G(合并后下发的IO数Dispatches)=I(请求进入IO Scheduler队列)=D(请求进入driver)

二、编译blktrace源码

1、从Android源码的external/中找到blktrace文件夹,此目录即为blktrace源码,将其复制到Ubuntu系统中的某个文件夹下。
文件夹内容如图:

2、搭建NDK环境

a) 下载ndk安装包并解压(Ubuntu环境下)

下载地址

https://developer.android.com/ndk/downloads/index.html

b) 拷贝压缩包至/usr/local/lib

cp android-ndk-r16b-linux-x86_64.zip /usr/local/lib

cd /usr/local/lib

c) 解压后递归修改文件权限

chmod 777 android-ndk-r8b -R 

d) 别忘了把NDK加入到环境变量中:

 vim /etc/profile

里面加入:

export ANDROID_NDK="/usr/local/lib/android-ndk-r16b"
export PATH="$ANDROID_NDK:$PATH"

保存后,生效:

source profile

3、编译blktrace等工具

a) 将blktrace拷贝至任意目录(例 /home/qiwenjie/)

cp ~/Android_platform/external/blktrace/  /home/qiwenjie/

b) 修改Android.mk文件

将文件第一行的

BUILD_BLKTRACE := false 

改为

BUILD_BLKTRACE:= true

c) 执行编译命令

cd  /home/qiwenjie/blktrace/
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk

编译完成的blktrace和blkparse保存在/home/qiwenjie/blktrace/libs/

其中有多个版本:

我们的hikey 960是ARM64架构的处理器,所以选择arm64-v8a的文件夹中的结果即可。

三、 将blktrace等工具导入手机

1、将960开发板通过TYPE-C连入PC的USB

2、启动adb,并查看设备是否正确连接

adb devices

3、 将blktrace等push入hikey960

我先将Ubuntu中生产的程序拷贝进我的Windows 10 中,在C:\Android_blktrace\arm64-v8a路径下

然后push进960的/sdcard:

adb push C:\Android_blktrace\arm64-v8a/blktrace /sdcard/
adb push C:\Android_blktrace\arm64-v8a/blktrace /sdcard/

4、 然后将blktrace,blkparse和most拷贝至手机的/system/xbin
如果报错:表示/system为只读文件系统

此时需要重新挂载,可以尝试以下指令来实现:
退出adb shell:

exit

依次输入:

adb root 
adb disable-verity  // 重点在这一步,取消验证即可,最新版的adb才支持此指令。 
adb reboot a
adb root 
adb remount

出现这个结果表示成功:

此时重新进入adb shell ,重新进行复制:

5、修改文件权限为可执行:

四、运行blktrace,并生产结果

1、查看hikey960 的分区

df -h


2、选择某个分区,在其上运行blktrace
比如我选择挂载在/data的/dev/block/sdd13分区:
运行:

blktrace -d /dev/block/sdd13 -w 60

-w 后面60代表blktrace运行60秒

运行结束:

3、使用blkparse解析结果

blkparse -i sdd13


也可将结果保存之某一文件中,比如1.txt

blkparse -i sdd13 > 1.txt

在这里插入图片描述
至此,大功告成~

谢谢!

补充:

切换实验平台:Nexus 9 (wifi)

需要在编译内核之前开启blktrace:

在内核源码的根目录下.config文件中将下列语句取消注释并修改:

CONFIG_BLK_DEV_IO_TRACE = y

编译后刷入平板,然后按照本教程即可。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值