mirror of
				https://github.com/ARM-software/workload-automation.git
				synced 2025-10-30 22:54:18 +00:00 
			
		
		
		
	doc: Restructure
Restructure the documentation to be split into `User Information` and `Developer Information`, and split the how to guides into their corresponding section.
This commit is contained in:
		
							
								
								
									
										528
									
								
								doc/source/user_information/user_guide.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										528
									
								
								doc/source/user_information/user_guide.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,528 @@ | ||||
| .. _user-guide: | ||||
|  | ||||
| ********** | ||||
| User Guide | ||||
| ********** | ||||
|  | ||||
| This guide will show you how to quickly start running workloads using | ||||
| Workload Automation 3. | ||||
|  | ||||
| .. contents:: Contents | ||||
|    :depth: 2 | ||||
|    :local: | ||||
|  | ||||
| --------------------------------------------------------------- | ||||
|  | ||||
|  | ||||
| Install | ||||
| ======= | ||||
|  | ||||
| .. note:: This is a quick summary. For more detailed instructions, please see | ||||
|           the :ref:`installation` section. | ||||
|  | ||||
| Make sure you have Python 2.7 and a recent Android SDK with API level 18 or above | ||||
| installed on your system. A complete install of the Android SDK is required, as | ||||
| WA uses a number of its utilities, not just adb. For the SDK, make sure that either | ||||
| ``ANDROID_HOME`` environment variable is set, or that ``adb`` is in your ``PATH``. | ||||
|  | ||||
| .. Note:: If you plan to run Workload Automation on Linux devices only, SSH is required, | ||||
|           and Android SDK is optional if you wish to run WA on Android devices at a | ||||
|           later time. | ||||
|  | ||||
|           However, you would be starting off with a limited number of workloads that | ||||
|           will run on Linux devices. | ||||
|  | ||||
| In addition to the base Python 2.7 install, you will also need to have ``pip`` | ||||
| (Python's package manager) installed as well. This is usually a separate package. | ||||
|  | ||||
| Once you have those, you can install WA with:: | ||||
|  | ||||
|         sudo -H pip install wa | ||||
|  | ||||
| This will install Workload Automation on your system, along with its mandatory | ||||
| dependencies. | ||||
|  | ||||
| Alternatively we provide a Dockerfile that which can be used to create a Docker | ||||
| image for running WA along with its dependencies. More information can be found | ||||
| :ref:`here <dockerfile>`. | ||||
|  | ||||
| (Optional) Verify installation | ||||
| ------------------------------- | ||||
|  | ||||
| Once the tarball has been installed, try executing :: | ||||
|  | ||||
|         wa -h | ||||
|  | ||||
| You should see a help message outlining available subcommands. | ||||
|  | ||||
|  | ||||
| (Optional) APK files | ||||
| -------------------- | ||||
|  | ||||
| A large number of WA workloads are installed as APK files. These cannot be | ||||
| distributed with WA and so you will need to obtain those separately. | ||||
|  | ||||
| For more details, please see the :ref:`installation <apk_files>` section. | ||||
|  | ||||
|  | ||||
| List Command | ||||
| ============ | ||||
|  | ||||
| In order to get started with using WA we first we need to find | ||||
| out what is available to use. In order to do this we can use the :ref:`list <list-command>` | ||||
| command followed by the type of plugin that you wish to see. | ||||
|  | ||||
| For example to see what workloads are available along with a short description | ||||
| of each you run:: | ||||
|  | ||||
|     wa list workloads | ||||
|  | ||||
| Which will give an output in the format of: | ||||
|  | ||||
| .. code-block:: none | ||||
|  | ||||
|              adobereader:    The Adobe Reader workflow carries out the following typical | ||||
|                              productivity tasks. | ||||
|               androbench:    Executes storage performance benchmarks | ||||
|           angrybirds_rio:    Angry Birds Rio game. | ||||
|                   antutu:    Executes Antutu 3D, UX, CPU and Memory tests | ||||
|                applaunch:    This workload launches and measures the launch time of applications | ||||
|                              for supporting workloads. | ||||
|              benchmarkpi:    Measures the time the target device takes to run and complete the | ||||
|                              Pi calculation algorithm. | ||||
|                dhrystone:    Runs the Dhrystone benchmark. | ||||
|                exoplayer:    Android ExoPlayer | ||||
|                geekbench:    Geekbench provides a comprehensive set of benchmarks engineered to | ||||
|                              quickly and accurately measure | ||||
|                              processor and memory performance. | ||||
|             #.. | ||||
|  | ||||
| The same syntax can be used to display ``commands``, | ||||
| ``energy_instrument_backends``, ``instruments``, ``output_processors``, | ||||
| ``resource_getters``, ``targets``. Once you have found the plugin you are | ||||
| looking for you can use the :ref:`show <show-command>` command to display more | ||||
| detailed information.  Alternatively please see the | ||||
| :ref:`Plugin Reference <plugin-reference>` for an online version. | ||||
|  | ||||
| Show Command | ||||
| ============ | ||||
|  | ||||
| If you want to learn more information about a particular plugin, such as the | ||||
| parameters it supports, you can use the "show" command:: | ||||
|  | ||||
|     wa show dhrystone | ||||
|  | ||||
| If you have ``pandoc`` installed on your system, this will display man | ||||
| page-like description of the plugin, and the parameters it supports. If you do | ||||
| not have ``pandoc``, you will instead see the same information as raw | ||||
| restructured text. | ||||
|  | ||||
| Configure Your Device | ||||
| ===================== | ||||
|  | ||||
| There are multiple options for configuring your device depending on your | ||||
| particular use case. | ||||
|  | ||||
| You can either add your configuration to the default configuration file | ||||
| ``config.yaml``, under the ``$WA_USER_HOME/`` directory or you can specify it in | ||||
| the ``config`` section of your agenda directly. | ||||
|  | ||||
| Alternatively if you are using multiple devices, you may want to create separate | ||||
| config files for each of your devices you will be using. This allows you to | ||||
| specify which device you would like to use for a particular run and pass it as | ||||
| an argument when invoking with the ``-c`` flag. | ||||
| :: | ||||
|  | ||||
|     wa run dhrystone -c my_device.yaml | ||||
|  | ||||
| By default WA will use the “most specific” configuration available for example | ||||
| any configuration specified inside an agenda will override a passed | ||||
| configuration file which will in turn overwrite the default configuration file. | ||||
|  | ||||
| .. note:: For a more information about configuring your | ||||
|           device please see :ref:`Setting Up A Device <setting-up-a-device>`. | ||||
|  | ||||
| Android | ||||
| ------- | ||||
|  | ||||
| By default, the device WA will use is set to 'generic_android'. WA is configured | ||||
| to work with a generic Android device through ``adb``. If you only have one | ||||
| device listed when you execute ``adb devices``, and your device has a standard | ||||
| Android configuration, then no extra configuration is required. | ||||
|  | ||||
| However, if your device is connected via network, you will have to manually | ||||
| execute ``adb connect <device ip>`` (or specify this in your | ||||
| :ref:`agenda <agenda>`) so that it appears in the device listing. | ||||
|  | ||||
| If you have multiple devices connected, you will need to tell WA which one you | ||||
| want it to use. You can do that by setting ``device`` in the device_config section. | ||||
|  | ||||
| .. code-block:: yaml | ||||
|  | ||||
|         # ... | ||||
|  | ||||
|         device_config: | ||||
|                 device: 'abcdef0123456789' | ||||
|                 # ... | ||||
|         # ... | ||||
|  | ||||
| Linux | ||||
| ----- | ||||
|  | ||||
| First, set the device to 'generic_linux' | ||||
|  | ||||
| .. code-block:: yaml | ||||
|  | ||||
|         # ... | ||||
|           device: 'generic_linux' | ||||
|         # ... | ||||
|  | ||||
| Find the device_config section and add these parameters | ||||
|  | ||||
| .. code-block:: yaml | ||||
|  | ||||
|         # ... | ||||
|  | ||||
|         device_config: | ||||
|                 host: '192.168.0.100' | ||||
|                 username: 'root' | ||||
|                 password: 'password' | ||||
|                 # ... | ||||
|         # ... | ||||
|  | ||||
| Parameters: | ||||
|  | ||||
| - Host is the IP of your target Linux device | ||||
| - Username is the user for the device | ||||
| - Password is the password for the device | ||||
|  | ||||
| Enabling and Disabling Augmentations | ||||
| --------------------------------------- | ||||
|  | ||||
| Augmentations are the collective name  for  "instruments" and "output | ||||
| processors" in WA3. | ||||
|  | ||||
| Some augmentations are enabled by default after your initial install of WA, | ||||
| which are specified in the ``config.yaml`` file located in your | ||||
| ``WA_USER_DIRECTORY``, typically ``~/.workload_autoamation``. | ||||
|  | ||||
| .. note:: Some Linux devices may not be able to run certain augmentations | ||||
|           provided by WA (e.g. cpufreq is disabled or unsupported by the | ||||
|           device). | ||||
|  | ||||
| .. code-block:: yaml | ||||
|  | ||||
|         # ... | ||||
|  | ||||
|         augmentations: | ||||
|             # Records the time it took to run the workload | ||||
|             - execution_time | ||||
|  | ||||
|             # Collects /proc/interrupts before and after execution and does a diff. | ||||
|             - interrupts | ||||
|  | ||||
|             # Collects the contents of/sys/devices/system/cpu before and after | ||||
|             # execution and does a diff. | ||||
|             - cpufreq | ||||
|  | ||||
|             # Generate a txt file containing general status information about | ||||
|             # which runs failed and which were successful. | ||||
|             - status | ||||
|  | ||||
|             # ... | ||||
|  | ||||
| If you only wanted to keep the 'execution_time' instrument enabled, you can comment out | ||||
| the rest of the list augmentations to disable them. | ||||
|  | ||||
| This should give you basic functionality. If you are working with a development | ||||
| board or you need some advanced functionality additional configuration may be required. | ||||
| Please see the :ref:`device setup <setting-up-a-device>` section for more details. | ||||
|  | ||||
| .. note:: In WA2 'Instrumentation' and 'Result Processors' were divided up into their | ||||
|           own sections in the agenda. In WA3 they now fall under the same category of | ||||
|           'augmentations'. For compatibility the old naming structure is still valid | ||||
|           however using the new entry names is recommended. | ||||
|  | ||||
|  | ||||
|  | ||||
| Running Your First Workload | ||||
| =========================== | ||||
|  | ||||
| The simplest way to run a workload is to specify it as a parameter to WA ``run`` | ||||
| :ref:`run <run-command>` sub-command:: | ||||
|  | ||||
|         wa run dhrystone | ||||
|  | ||||
| You will see INFO output from WA as it executes each stage of the run. A | ||||
| completed run output should look something like this:: | ||||
|  | ||||
|         INFO     Creating output directory. | ||||
|         INFO     Initializing run | ||||
|         INFO     Connecting to target | ||||
|         INFO     Setting up target | ||||
|         INFO     Initializing execution context | ||||
|         INFO     Generating jobs | ||||
|         INFO         Loading job wk1 (dhrystone) [1] | ||||
|         INFO     Installing instruments | ||||
|         INFO     Installing output processors | ||||
|         INFO     Starting run | ||||
|         INFO     Initializing run | ||||
|         INFO         Initializing job wk1 (dhrystone) [1] | ||||
|         INFO     Running job wk1 | ||||
|         INFO         Configuring augmentations | ||||
|         INFO         Configuring target for job wk1 (dhrystone) [1] | ||||
|         INFO         Setting up job wk1 (dhrystone) [1] | ||||
|         INFO         Running job wk1 (dhrystone) [1] | ||||
|         INFO         Tearing down job wk1 (dhrystone) [1] | ||||
|         INFO         Completing job wk1 | ||||
|         INFO     Job completed with status OK | ||||
|         INFO     Finalizing run | ||||
|         INFO         Finalizing job wk1 (dhrystone) [1] | ||||
|         INFO     Done. | ||||
|         INFO     Run duration: 9 seconds | ||||
|         INFO     Ran a total of 1 iterations: 1 OK | ||||
|         INFO     Results can be found in wa_output | ||||
|  | ||||
|  | ||||
| Once the run has completed, you will find a directory called ``wa_output`` | ||||
| in the location where you have invoked ``wa run``. Within this directory, | ||||
| you will find a "results.csv" file which will contain results obtained for | ||||
| dhrystone, as well as a "run.log" file containing detailed log output for | ||||
| the run. You will also find a sub-directory called 'wk1-dhrystone-1' that | ||||
| contains the results for that iteration. Finally, you will find various additional | ||||
| information in the ``wa_output/__meta`` subdirectory for example information | ||||
| extracted from the target and a copy of the agenda file. The contents of | ||||
| iteration-specific subdirectories will vary from workload to workload, and, | ||||
| along with the contents of the main output directory, will depend on the | ||||
| augmentations that were enabled for that run. | ||||
|  | ||||
| The ``run`` sub-command takes a number of options that control its behaviour, | ||||
| you can view those by executing ``wa run -h``. Please see the :ref:`invocation` | ||||
| section for details. | ||||
|  | ||||
|  | ||||
| Create an Agenda | ||||
| ================ | ||||
|  | ||||
| Simply running a single workload is normally of little use. Typically, you would | ||||
| want to specify several workloads, setup the device state and, possibly, enable | ||||
| additional augmentations. To do this, you would need to create an "agenda" for | ||||
| the run that outlines everything you want WA to do. | ||||
|  | ||||
| Agendas are written using YAML_ markup language. A simple agenda might look | ||||
| like this: | ||||
|  | ||||
| .. code-block:: yaml | ||||
|  | ||||
|         config: | ||||
|                 augmentations: | ||||
|                     - ~execution_time | ||||
|                     - json | ||||
|                 iterations: 2 | ||||
|         workloads: | ||||
|                 - memcpy | ||||
|                 - name: dhrystone | ||||
|                   params: | ||||
|                         mloops: 5 | ||||
|                         threads: 1 | ||||
|  | ||||
| This agenda: | ||||
|  | ||||
| - Specifies two workloads: memcpy and dhrystone. | ||||
| - Specifies that dhrystone should run in one thread and execute five million loops. | ||||
| - Specifies that each of the two workloads should be run twice. | ||||
| - Enables json output processor, in addition to the output processors enabled in | ||||
|   the config.yaml. | ||||
| - Disables execution_time instrument, if it is enabled in the config.yaml | ||||
|  | ||||
| An agenda can be created using WA's ``create`` :ref:`command <using-the-create-command>` | ||||
| or in a text editor and saved as a YAML file. | ||||
|  | ||||
| For more options please see the :ref:`agenda` documentation. | ||||
|  | ||||
| .. _YAML: http://en.wikipedia.org/wiki/YAML | ||||
|  | ||||
| .. _using-the-create-command: | ||||
|  | ||||
| Using the Create Command | ||||
| ------------------------- | ||||
| The easiest way to create an agenda is to use the 'create' command. For more | ||||
| in-depth information please see the :ref:`Create Command <create-command>` documentation. | ||||
|  | ||||
| In order to populate the agenda with relevant information you can supply all of | ||||
| the plugins you wish to use as arguments to the command, for example if we want | ||||
| to create an agenda file for running ``dhystrone`` on a 'generic android' device and we | ||||
| want to enable the ``execution_time`` and ``trace-cmd`` instruments and display the | ||||
| metrics using the ``csv`` output processor. We would use the following command:: | ||||
|  | ||||
|     wa create agenda generic_android dhrystone execution_time trace-cmd csv -o my_agenda.yaml | ||||
|  | ||||
| This will produce a `my_agenda.yaml` file containing all the relevant | ||||
| configuration for the specified plugins along with their default values as shown | ||||
| below: | ||||
|  | ||||
| .. code-block:: yaml | ||||
|  | ||||
|         config: | ||||
|             augmentations: | ||||
|             - execution_time | ||||
|             - trace-cmd | ||||
|             - csv | ||||
|             iterations: 1 | ||||
|             device: generic_android | ||||
|             device_config: | ||||
|                 adb_server: null | ||||
|                 big_core: null | ||||
|                 core_clusters: null | ||||
|                 core_names: null | ||||
|                 device: null | ||||
|                 disable_selinux: true | ||||
|                 executables_directory: null | ||||
|                 load_default_modules: true | ||||
|                 logcat_poll_period: null | ||||
|                 model: null | ||||
|                 modules: null | ||||
|                 package_data_directory: /data/data | ||||
|                 shell_prompt: !<tag:wa:regex> '8:^.*(shell|root)@.*:/\S* [#$] ' | ||||
|                 working_directory: null | ||||
|             execution_time: {} | ||||
|             trace-cmd: | ||||
|                 buffer_size: null | ||||
|                 buffer_size_step: 1000 | ||||
|                 events: | ||||
|                 - sched* | ||||
|                 - irq* | ||||
|                 - power* | ||||
|                 - thermal* | ||||
|                 functions: null | ||||
|                 no_install: false | ||||
|                 report: true | ||||
|                 report_on_target: false | ||||
|             csv: | ||||
|                 extra_columns: null | ||||
|                 use_all_classifiers: false | ||||
|         workloads: | ||||
|         -   name: dhrystone | ||||
|             params: | ||||
|                 cleanup_assets: true | ||||
|                 delay: 0 | ||||
|                 duration: 0 | ||||
|                 mloops: 0 | ||||
|                 taskset_mask: 0 | ||||
|                 threads: 4 | ||||
|  | ||||
|  | ||||
| Run Command | ||||
| ============ | ||||
| These examples show some useful options that can be used with WA's ``run`` command. | ||||
|  | ||||
| Once we have created an agenda to use it with WA we can pass it as a argument to | ||||
| the run command e.g.:: | ||||
|  | ||||
|     wa run <path/to/agenda> (e.g. wa run ~/myagenda.yaml) | ||||
|  | ||||
| By default WA will use the "wa_output" directory to stores its output however to | ||||
| redirect the output to a different directory we can use:: | ||||
|  | ||||
|     wa run dhrystone -d my_output_directory | ||||
|  | ||||
| We can also tell WA to use additional config files by supplying it with | ||||
| the ``-c`` argument. One use case for passing additional config files is if you | ||||
| have multiple devices you wish test with WA, you can store the relevant device | ||||
| configuration in individual config files and then pass the file corresponding to | ||||
| the device you wish to use for that particular test. | ||||
|  | ||||
| .. note:: As previously mentioned, any more specific configuration present in | ||||
|           the agenda file will overwrite the corresponding config parameters | ||||
|           specified in the config file(s). | ||||
|  | ||||
|  | ||||
| :: | ||||
|  | ||||
|     wa run -c myconfig.yaml ~/myagenda.yaml | ||||
|  | ||||
| To use the same output directory but override the existing contents to | ||||
| store new dhrystone results we can specify the ``-f`` argument:: | ||||
|  | ||||
|     wa run -f dhrystone | ||||
|  | ||||
| To display verbose output while running memcpy:: | ||||
|  | ||||
|     wa run --verbose memcpy | ||||
|  | ||||
|  | ||||
| .. _output_directory: | ||||
|  | ||||
| Output | ||||
| ====== | ||||
|  | ||||
| The output directory will contain subdirectories for each job that was run, | ||||
| which will in turn contain the generated metrics and artifacts for each job. | ||||
| The directory will also contain a ``run.log`` file containing the complete log | ||||
| output for the run, and a ``__meta`` directory with the configuration and | ||||
| metadata for the run. Metrics are serialized inside ``result.json`` files inside | ||||
| each job's subdirectory. There may also be a ``__failed`` directory containing | ||||
| failed attempts for jobs that have been re-run. | ||||
|  | ||||
| Augmentations may add additional files at the run or job directory level. The | ||||
| default configuration has ``status`` and ``csv`` augmentations enabled which | ||||
| generate a ``status.txt`` containing status summary for the run and individual | ||||
| jobs, and a ``results.csv`` containing metrics from all jobs in a CSV table, | ||||
| respectively. | ||||
|  | ||||
| See :ref:`output_directory_structure` for more information. | ||||
|  | ||||
| In order to make it easier to access WA results from scripts, WA provides an API | ||||
| that parses the contents of the output directory: | ||||
|  | ||||
|  | ||||
| .. code-block:: pycon | ||||
|  | ||||
|     >>> from wa import RunOutput | ||||
|     >>> ro = RunOutput('./wa_output') | ||||
|     >>> for job in ro.jobs: | ||||
|     ...     if job.status != 'OK': | ||||
|     ...         print 'Job "{}" did not complete successfully: {}'.format(job, job.status) | ||||
|     ...         continue | ||||
|     ...     print 'Job "{}":'.format(job) | ||||
|     ...     for metric in job.metrics: | ||||
|     ...         if metric.units: | ||||
|     ...             print '\t{}: {} {}'.format(metric.name, metric.value, metric.units) | ||||
|     ...         else: | ||||
|     ...             print '\t{}: {}'.format(metric.name, metric.value) | ||||
|     ... | ||||
|     Job "wk1-dhrystone-1": | ||||
|             thread 0 score: 20833333 | ||||
|             thread 0 DMIPS: 11857 | ||||
|             thread 1 score: 24509804 | ||||
|             thread 1 DMIPS: 13950 | ||||
|             thread 2 score: 18011527 | ||||
|             thread 2 DMIPS: 10251 | ||||
|             thread 3 score: 26371308 | ||||
|             thread 3 DMIPS: 15009 | ||||
|             time: 1.001251 seconds | ||||
|             total DMIPS: 51067 | ||||
|             total score: 89725972 | ||||
|             execution_time: 1.4834280014 seconds | ||||
|  | ||||
| See  :ref:`output_processing_api` for details. | ||||
|  | ||||
| Uninstall | ||||
| ========= | ||||
|  | ||||
| If you have installed Workload Automation via ``pip``, then run this command to | ||||
| uninstall it:: | ||||
|  | ||||
|     sudo pip uninstall wa | ||||
|  | ||||
|  | ||||
| .. Note:: It will *not* remove any user configuration (e.g. the ~/.workload_automation | ||||
|           directory). | ||||
|  | ||||
| Upgrade | ||||
| ======= | ||||
|  | ||||
| To upgrade Workload Automation to the latest version via ``pip``, run:: | ||||
|  | ||||
|     sudo pip install --upgrade --no-deps wa | ||||
|  | ||||
		Reference in New Issue
	
	Block a user