openthos / oto_external_lkp

2 stars 4 forks source link

给lkp增加gui benchmark和monitor,并生成csv,用web展示曲线图 #3

Open ELWIN-MAO opened 7 years ago

ELWIN-MAO commented 7 years ago

昨天我和向老师讨论了一下,gui输出结果转json和csv的存在的问题,解决方法如下: 1.gui输出的信息,没有按照lkp方式组织。导致lkp collect失败。解决方法是:安装lkp新增benchmark的方法,一个gui测试对应一个lkp benchmark。 2.由于gui输出的key:value对中存在非数字的东西,会导致生成json和csv时导致lkp奔溃。需要修改lkp代码,过滤掉非数字的key:value

我需要张琳萍给出一个apk gui采集的原始输出文件,中间key:value文件,和对应的程序。然后才能知道如何过滤。你们商量一下啥时候有空 把那些东西准备好,来东主楼这里再当面讨论一下。明确一下各自的任务,争取把这个问题早点解决。 @雷蕾 @张琳苹 

ELWIN-MAO commented 7 years ago

2016.11.23下午讨论结果:

张琳萍: 工作目标: 参照lkpjishigou增加一个2048【或者其他apk】的benchmark到oto_lkp中。 自动安装apk ,运行apk,采集数据生成json文件,会自动生成lkp collect要求的csv数据。 https://github.com/openthos/oto_lkp/tree/master/testcase/lkpjishigou

帮助信息: lkp新增测试用例,需要添加的文件列表: https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/README.md https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/doc/lkp-howto.md

以下5个文件是lkp官方文档要求添加的文件: https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/pack/jishigou #编译安装测试用例 https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/stats/jishigou #将benchmark的原始输出,转变为key:value中间结果 https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/tests/jishigou #benchmark的运行方法【“执行”启动activity,启动gui自动交互的脚本】 https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/jobs/jishigou.yaml #描述benchmark的配置文件 https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1.tar.gz #benchmark压缩包

以下内容是由于引入了anroidx86,chroot,还有自动化框架,需要添加的文件: https://github.com/openthos/oto_lkp/blob/master/joblist/jishigou.sh #运行lkp

https://github.com/openthos/oto_lkp/tree/master/testcase/lkpjishigou/ #用于自动化测试框架调用的目录

https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/ #benchmark压缩包对应的目录 https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/net.jishigou.t2.8.0.apk #要安装的apk https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/auto_interact.sh #启动activity,gui自动交互的脚本

以下是chrooted ubuntu和androidx86通过telnet协作,需要添加的expect脚本: https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/pack/jishigou_pack.expt https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/jishigou_benchmark.expt

薛海龙: 工作目标: 将新增的monitor加入到oto_lkp并生成json,csv

monitor原始输出无法生成json的原因是./stats/xxx.py脚本加了.py后缀,去掉.py后缀加上shangbang即可解决问题。

了解lkp运行过程,新增测试用例过程,帮助张琳苹和蕾蕾解决问题。

帮助信息: lkp run 会调用./bin/run-local https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/bin/run-local

生成job.sh https://github.com/openthos/oto_lkp/blob/master/testcase/lkpebizzy/lkp_tmp_result/result/ebizzy/200%25-5x-5s/localhost/ubuntu/defconfig/gcc-5/4.4.10-android-x86_64/16/job.sh

lkp run同时开启benchmark和montors采集信息的过程: system job_script, 'run_job'

lkp run把benchmark和montors采集的信息原始输出通过./stats/xxx转换为key:value临时文件的过程: system job_script, 'extract_stats' https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/stats/wrapper

/stats/xxx脚本不能有后缀.rb,.py,加上shangbang和可执行权限即可,其从表准输入中读数据,把数据写到标准输出。

lkp 自动会调用/stats/xxx脚本,并重定向标准输入和输出 if [[ -f $log ]]; then $program_dir/$program $log < $log > $tmpfile || { echo "$program_dir/$program $log < $log exit code $?, check $tmpfile" >&2; exit

./stats/xxxx脚本编写示例: http://166.111.68.197:11123/research/kernel/Openthos4H170pro2016#A20160928-ruby_to_json

mointor阻塞和benchmark唤醒monitor的原理:wait和wakeupe配对实现协作。 run_monitor $LKP_SRC/monitors/event/wait 'activate-monitor' run_test $LKP_SRC/tests/wrapper ebizzy

telnet和exept协作,实现androidx86和chroot ubuntu通信。 https://github.com/openthos/oto_lkp/blob/master/testcase/lkpjishigou/lkp_test/before_chroot.sh ##开启telnet服务

https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/jishigou
https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/jishigou_benchmark.expt #向telnet发送命令 https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/jishigou.v0.1/auto_interact.sh ##此脚本内容应该替换为实际的uiautomater脚本。

雷蕾: 张琳萍加上benchmark,薛海龙加上monitor以后,gui的csv文件会自动生成。 需要联系敖权测试不同commitid的openthos,从而得到多行csv数据,从而展现出一条曲线。 协助张琳萍、薛海龙一起解决问题。

毛英明: 修改lkp代码,过滤掉gui benchmark输出的信息中包含的非数字key:value

ELWIN-MAO commented 7 years ago

薛海龙的问题: 问题1: lkp install 没有weget下载/benchmark_mirror/wechat.v0.1.tar.gz压缩包:

出错原因: 压缩包url没有写对 错误的URL https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/wechat.v0.1.tar.gz 正确的URL https://github.com/openthos/oto_lkp/raw/master/benchmark_mirror/wechat.v0.1.tar.gz

新加的脚本要增加可执行权限,并且push到github上面 pack/wechat pack/wechat_pack.expt test/ stats/

问题2: lkp run 没有自动启动微信 原因和解决方法: 每个apk的main activity名字都不一样,需要一对一的修改 am start -n net.wechat.t/net.wechat.t.StartActivity

ELWIN-MAO commented 7 years ago

雷蕾 csv集成到result.php的问题: 已经完成了一部分内容。但是还有很多问题: 问题1: 目前的情况是多台机器生成的csv会相互覆盖,导致insterdata.py执行出错。 可能的解决方法: 方法1:每个机器的csv单独命名,ebizzy1.csv ,ebizzy2.csv【多个csv不能利用cat eibzzy1.csv ebizzy2.csv >>union.csv进行合并,因为表头有可能不一样】 方法2:在对多台机器的/result结果的并集:/var/ww/html/result 目录进行lkp collect操作。 需要合并多台机器的/lkp/paths/xxx文件【会存在不同机器上面同名文件覆盖的问题】。

问题2: ebizzy.csv文件中短7列数据,这7列数据的来源不太好追溯和匹配。

问题3: 多台机器的csv如果合并,需要都加上前7列数据以后,并且表头一致的情况下才能合并。 如果表头不一致,那么合并就比较麻烦了,需要对所有的表头取一个并集,然后再往里填数据。如果某项数据不存在,需要填充NULL或者N/A。这样就形成了一个很大的稀疏矩阵。不知道这个稀疏矩阵是否和intel的做法一致,好像他们处理数据时就碰到了稀疏矩阵,降维的问题。

ELWIN-MAO commented 7 years ago

csv集成过程,文档完善。 在http://166.111.131.12:7780/result.php 一加载就执行 getfilelist.py -f ebizzy/nbench 输入 '/root/oto_lkp/testcase/lkp'+file+'/lkp_tmp_result/result/'+file 改为 '/var/www/html/result'+file

输出: /var/www/html/lkp_web_oto/path/'+file+'.txt'

insertdata.py -f ebizzy/nbench 输入: MySelectPath = '/root/oto_lkp/testcase/lkp'+filename+'/lkp_tmp_result/result/'+filename+'/'+filename+'.csv'

改为: '/var/www/html/result'+filename+'.csv'

输出 OutPath = '/var/www/html/lkp_web_oto/csv/'+filename+'.csv'

testcase

                     <option value="all">ALL</option>
                    <option value="ebizzy">ebizzy</option>
                    <option value="jishigou">jishigou</option>

insertdata.py写死的部分【匹配哪几列】: 需要根据实际环境修改一下
n = 7 while n<=13: line.append(path[n]) n = n+1 for item in rows[i]:

越界错误:【多台机器csv相互覆盖导致的】 root@a:/var/www/html/lkp_web_oto# ./insertdata.py -f ebizzy 1 0.0 0.0 0.0 0.0 2 0.0 Traceback (most recent call last): File "./insertdata.py", line 74, in insertdata(filename) File "./insertdata.py", line 48, in insertdata print rows[i][0] IndexError: list index out of range root@a:/var/www/html/lkp_web_oto#

ELWIN-MAO commented 7 years ago

蕾蕾:

第1部分: 进入/result/$benchmark目录 获取到各个$benchmark.txt文件。 https://github.com/hanhy/lkp-analysis/tree/master/code/multi_thread_test/path https://github.com/hanhy/lkp-analysis/tree/master/code/multi_thread_test/path/ebizzy.txt

第2部分: collect.py

原本是读matrix.json文件,其需要删除source字段,然后再算一遍平均值。 现在的方法是直接读取avg.json文件,不需要删除source字段,然后再算一遍平均值。

第3部分: result.php 调用了两个python 脚本 getfilelist.py和insertdata.py 下面把insertdata.py替换为collect.py

薛海龙: 问题1: expect 执行微信交互程序不成功原因是uiautomator脚本里面执行了sleep操作,导致expect认为超时了,然后直接结束了。

问题2: ps | grep com.tencent.mm 中|被当做了ps的命令行参数了。 eval /system/bin/sh /system/xbin/sh

有可能是shell不兼容导致的。 也有可能是telnet给出的环境变量和tty1下面给出的环境变量不同。 也有可能是java的execv这个函数有很多版本,各个版本实现有出入,把这些版本挨个试一遍。 java中execve("")函数的实现方法应该是通过启动一个子shell来实现的,这个子shell出现了问题。 https://github.com/openthos/oto_Uitest/blob/master/wechat/src/com/autoTestUI/window_lib.java

问题3: 测试用例的自动编译过程: 是通过lkp 执行benchmark包中的Makefile来实现的。 https://github.com/openthos/oto_lkp/blob/master/benchmark_mirror/wechat.v0.1/Makefile all: chmod 777 ./wechat chmod 777 ./auto_interact.sh chmod 777 ./wechat_benchmark.expt ./mycpjava #编译java文件为jar包

测试用例的安装过程:
是通过执行pack/$benchmark脚本中的install()函数来实现的。

https://github.com/openthos/oto_lkp/blob/master/lkp-tests-master/pack/wechat

!/bin/bash

VERSION="2.2.3"

WEB_URL="http://www.tux.org/~mayer/linux/nbench-byte-2.2.3.tar.gz"

WEB_URL="https://github.com/openthos/oto_lkp/raw/master/benchmark_mirror/wechat.v0.1.tar.gz"

install() {

make

cp -af $BM_NAME $BM_ROOT cp -af .apk $BM_ROOT cp -af .jar $BM_ROOT cp -af auto_interact.sh $BM_ROOT
cp -af wechat_benchmark.expt $BM_ROOT
$LKP_SRC/pack/wechat_pack.expt cp /xxx.jar /dat/local/tmp }