LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

Workload Automation分析及其使用

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相关的扩展都可以在这里配置。

image

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框架分析

_images/wa-execution.png

从上面的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:
        instrumentation: [trace-cmd]
#        result_processors: [ipynb_exporter]
        trace_events: ['thermal*', 'cpufreq*'

]
        trace_buffer_size: 80000
#        ipynb_exporter:
#                notebook_template: /home/lubaoquan/ipa-tunning/parse_ipa_results.ipynb
#                convert_to_html: True
#                show_html: True
global:
        iterations: 1
workloads:
        - name: dhrystone
          params:
                duration: 60
                threads: 8

 

执行测试,获取数据

wa run ipa_tunning.yaml

基于ipynb_notebook生成分析结果

ipython脚本如下,这里使用到一个python库trappy,专门生成图形化报表。

image

trappy.summary_plots实现了一系列针对IPA的图表:

IPA的主要功能就是控制CPU温度,可以通过降低频率等措施来cooling。

可以看到CUP的温度得到了很好的,控制

1

下面IPA Governor的核心PID控制器的图表,也很直观地反映了P、I、D三个参数变化情况,以及PID控制器的输出。

4

下面图表反映了cpufreq的统计信息。

5

 

参考资料:

Workload Automation:http://pythonhosted.org/wlauto/index.html

trappy:https://github.com/ARM-software/trappy

posted on 2016-12-29 20:43  ArnoldLu  阅读(3223)  评论(0编辑  收藏  举报

导航