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





