1. Workload Automation介绍
Workload Automation是提供一个在设备上运行各种workload的工具,使用Python编写。WA具有良好的框架结构,方便快捷的扩展。包含几个方面的扩展:workloads、instruments、result_processors、devices。
- Workloads:用于在设备上生成各种负荷,这些负荷能被较好的定制,进行稳定的测试输入。
- Instruments:用于获取各种测试数据,比如trace-cmd获取ftracelog、energy_probe获取Power Monitor数据等。
- Result_processors:用于对测试数据分析,得出测试结果。比如ipynb_exporter使用IPython Notebook。
- Devices:是针对待测设备的配置。
首先配置好Devices,然后开始运行Workloads,同时可以通过Instruments手机测试数据,最后通过Result_processors进行后期处理。
2. WA安装和使用
下载代码:git clone https://github.com/ARM-software/workload-automation.git
安装WA
sudo python setup.py install
运行WA
wa run xxx.yaml -c config.py -d out_dir
xxx.yaml是workload的配置文件。
config.py是针对测试环境、待测设备等相关的配置。
out_dir是输出目录。
xxx.yaml的配置比较广泛,WA相关的扩展都可以在这里配置。
wa list workloads/commands/devices/instruments/modules/resource_getters/result_processors/-------------------显示当前WA扩展功能列表。 wa show xxx-----------------显示扩展功能的详细信息。 wa create workload/package/agenda----------------建一个新WA workload/package/agenda。 wa get-assets----------------下载WA以来的外部扩展。
3. WA框架分析
从上面的WA执行流可以清晰的看出WA的是如何工作的。
在执行必要的初始化工作之后,WA开始配置待测设备,加载配置测试仪器。
然后按照agenda中定义的workload开始执行,在执行过程中收集数据。
执行结束过后,进行数据处理。
最后做一些清理工作,关闭应用,清空临时文件等操作。
代码分析
wa可执行文件位于/usr/local/bin/wa:
#!/usr/bin/python # EASY-INSTALL-SCRIPT: 'wlauto==2.5.0','wa' __requires__ = 'wlauto==2.5.0' __import__('pkg_resources').run_script('wlauto==2.5.0', 'wa') |
然后跳转到/usr/local/lib/python2.7/dist-packages/wlauto-2.5.0-py2.7.egg/EGG-INFO/scripts/wa:
#!/usr/bin/python from wlauto.core.entry_point import main main() |
core/entry_point.py是真正的点。
4. WA扩展功能分析
4.1 workloads
列出所支持的workload,其中大部分都是Android平台特有的,一小部分是Linux通用的。
wa list workloads
扩展自己的Workload
wa create workload -h---------------------------------查看新建workload的帮助信息
wa list workloads-------------------------------------查看是否有重名workload
wa create workload suspend -p wlauto/workloads/ -v----创建名为suspend的workload
4.2 instruments
wa list instruments列出WA支持的设备,这里的设备可能指实体的energy_probe、hwmon也可能指虚拟的dmesg等等。
它的主要用途就是通过不同渠道获取WA执行时的数据,比如trace、dmesg、功耗数据等等。
...
cpufreq: Collects dynamic frequency (DVFS) settings before and after workload execution. ... sysfs_extractor: Collects the contest of a set of directories, before and after workload execution and diffs the result. systrace: This instrument uses systrace.py from the android SDK to dump atrace output. trace-cmd: trace-cmd is an instrument which interacts with ftrace Linux kernel internal tracer
trace-cmd
cpufreq
energy_probe
如何添加自己的Instruments
首先所有的Intruments都是类Instrument的子类,在core/instrumentation.py中有新建Instrument的详细指导。
首先必须有个名字,然后必须有两个参数(self, context)。
然后还有一些方法需要实现:
setup-在Workload setup之后进行Instrument的必要设置。
start-在Worload start之前进行调用,这里Instrument的测量就已经开始。
stop-在Worload停止执行后调用。
update_result-在Worload更新自己执行结果后调用。
teardown-在Workload teardown之后调用。
4.3 result_processors
在Workload或者Instrument更新完结果之后,就需要调用Result_processor进行处理。
5. 一个基于dhrystone分析IPA案例
编写yaml配置文件
config: ] |
执行测试,获取数据
wa run ipa_tunning.yaml |
基于ipynb_notebook生成分析结果
ipython脚本如下,这里使用到一个python库trappy,专门生成图形化报表。
trappy.summary_plots实现了一系列针对IPA的图表:
IPA的主要功能就是控制CPU温度,可以通过降低频率等措施来cooling。
可以看到CUP的温度得到了很好的,控制
下面IPA Governor的核心PID控制器的图表,也很直观地反映了P、I、D三个参数变化情况,以及PID控制器的输出。
下面图表反映了cpufreq的统计信息。
参考资料:
Workload Automation:http://pythonhosted.org/wlauto/index.html