博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一款比较强悍的存储性能分析工具(未完待续)
阅读量:2352 次
发布时间:2019-05-10

本文共 1810 字,大约阅读时间需要 6 分钟。

开发目的

我这边zip解压缩和io跑分类问题经常会涉及到不同存储芯片间的存储性能对比。

众所周知,存储性能问题,跟存储芯片自身性能,块设备层和文件系统层的性能都有关系的。所以说搞出一款工具,能够直观地看出
某性能问题对应的在存储bsp层,块设备层和文件系统层的耗时信息,是有助于解决存储性能问题的。

适用场合

该工具目前比较适合用来分析单线程存储性能问题。

比如zip解压缩,androbench顺序读写和sqlite跑分都是属于单线程性能问题分析范畴的。因为这些测试项目在实际进行时,只有一个线程在做性能测试工作,最后输出的性能指标只跟该线程的性能有关。

使用介绍

1 搭建bcc环境

参考之前的博文:bcc工具上手指南,搭建好测试手机的bcc开发环境。

2 获取存储性能分析工具

从XXX上 把工具:ioworkload_analysis.py 和 ioworkload_analysis_not_included_blk​.py下载到本地,然后adb push 到手机的/data/androdeb/debian目录里面,并对它们chmod 777一下。

3 开启性能trace

执行 下面命令,开启存储性能trace。

adeb shell
./ioworkload_analysis.py 0 > /data/io.log

4 开始性能测试

开始跑性能测试(比如上面的zip解压缩和IO跑分),

 跑完性能测试后,把上面生成的手机里面的/data/io.log文件adb pull到电脑端, 产生的文件系统层,块设备层和bsp层的存储性能耗时信息都在上面的io.log文件里面。

5 分析存储各层面的性能耗时

拿androbench跑分性能分析举例,来说明怎么得到在bsp层,块设备层和文件系统层的耗时信息。(androbench跑分性能跟Thread-xxx这个线程的工作性能挂钩的)

1> 文件系统层

cat io.log | grep Thread- | grep VFS | awk '{sum += $8};END {print sum}'

可以得到文件系统层面的总耗时信息

cat io.log | grep Thread- | {grep " N ",grep " W ",grep " R "} | wc -l

可以得到文件系统层总共发送了多少fsync or write or read系统调用数目。

2> 存储bsp层

 cat io.log | grep Thread- | grep REQ | awk '{sum += $8};END {print sum}'

可以得到跑分时发出的块设备层所有请求完成(req issue到req complete)总耗时信息。

cat io.log | grep Thread- | grep REQ | wc -l

可以得到跑分时发出的请求总数目。
请求完成的平均耗时 = 所有请求的总耗时 / 上面的总数目.
请求完成的最大耗时和耗时分布可由sort -nr命令得出。

上面信息便代表了存储bsp层的耗时信息。

3> 块设备层

cat io.log | grep Thread- | grep REQ | awk '{sum += $6};END {print sum}'

得到了IO跑分时的块设备层的请求排队耗时(req insert到req issue)信息。

cat io.log | grep Thread- | grep BLK | awk '{sum += $8};END {print sum}'

可以得到IO跑分时的块设备层submit bio的总耗时。

cat io.log | grep Thread- | grep BLK | wc -l

得到跑分时的submit_bio调用次数。

上面信息便代表了块设备层的耗时信息。

因为块设备层的耗时有两方面的耗时组成,一个是submit_bio的耗时,一个是请求排队耗时。

目前应用成果

目前正在应用该工具解决IO跑分和zip解压缩中不同存储芯片对比的性能问题。

已经能够成功看出jira:MIUI-1826523里面的q版本sliqte性能衰退问题是由于文件系统层fsync性能不如p版本造成的,
存储bsp层和块设备层q版本的性能还好于p版本的。(该jira还在进一步地分析定位中)

转载地址:http://gkrvb.baihongyu.com/

你可能感兴趣的文章
MyEclipse中echart.js文件校验报错
查看>>
init_seg说明
查看>>
#pragma init_seg使特定的全局变量优先于其他的全局变量先构造
查看>>
VS2008下载(包含中文MSDN)序列号 破解版
查看>>
汇编语言中的相关英文全称
查看>>
cdecl、stdcall、fastcall函数调用约定区别
查看>>
堆栈中的EIP EBP ESP
查看>>
ESP和EBP指针寄存器
查看>>
EIP & EBP & ESP
查看>>
动态链接库(DLL)入口/出口点
查看>>
C/C++ 开发库 | C/C++ Development Library
查看>>
VC 运行时库中的 new/delete 函数
查看>>
面向对象设计原则、模式开篇
查看>>
01.单例模式--Singleton
查看>>
02.工厂模式--Factory
查看>>
03.抽象工厂模式--AbstractFactory
查看>>
04.C++反射的实现
查看>>
05.抽象工厂模式+反射--AbstractFactory&Reflect
查看>>
UML类图
查看>>
06.建造者模式--Builder
查看>>