Skip to content

Commit 953d8d5

Browse files
author
Michael Zappe
committed
Make Acrolinx a bit more happy
1 parent 3f39d42 commit 953d8d5

File tree

5 files changed

+54
-55
lines changed

5 files changed

+54
-55
lines changed

articles/remote-rendering/how-tos/performance-tracing.md

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Create client-side performance traces
3-
description: Best practices for client-side performance profiling using WPF
3+
description: Best practices for client-side performance profiling using WPA
44
author: florianborn71
55
ms.author: flborn
66
ms.date: 12/11/2019
@@ -9,63 +9,62 @@ ms.topic: conceptual
99

1010
# Create client-side performance traces
1111

12-
There are many reasons why the performance of Azure Remote Rendering may not be as good as desired. Apart from pure rendering performance on the cloud server, especially the quality of the network connection has a significant influence on the experience. To profile the server's performance, refer to chapter [Server-side performance queries](../overview/features/performance-queries.md).
12+
There are many reasons why the performance of Azure Remote Rendering might not be as good as desired. Apart from pure rendering performance on the cloud server, especially the quality of the network connection has a significant influence on the experience. To profile the server's performance, refer to chapter [Server-side performance queries](../overview/features/performance-queries.md).
1313

14-
This chapter focuses on how to identify potential client-side bottlenecks through *:::no-loc text="performance traces":::*.
14+
This chapter focuses on how to identify potential client-side bottlenecks through *:::no-loc text="performance traces.":::*
1515

1616
## Getting started
1717

1818
If you're new to the Windows :::no-loc text="performance tracing"::: functionality, this section mentions the most fundamental terms and applications to get you started.
1919

2020
### Installation
2121

22-
The applications used to do tracing with ARR are general purpose tools that can be used for all Windows development. They're provided through the [Windows Performance Toolkit](/windows-hardware/test/wpt/). To get this toolkit, download the [Windows Assessment and Deployment Kit](/windows-hardware/get-started/adk-install).
22+
The applications used to do tracing with Azure Remote Rendering (ARR) are general purpose tools that can be used for all Windows development. They're provided through the [Windows Performance Toolkit](/windows-hardware/test/wpt/). To get this toolkit, download the [Windows Assessment and Deployment Kit](/windows-hardware/get-started/adk-install).
2323

2424
### Terminology
2525

26-
When searching for information about performance traces, you may come across a range of terms. The most important ones are:
26+
A range of terms is important when talking about performance traces. The most important ones are:
2727

28-
* `ETW`
29-
* `ETL`
30-
* `WPR`
31-
* `WPA`
32-
* `Perfetto`
28+
* [**E**vent **T**racing for **W**indows](/windows/win32/etw/about-event-tracing) (ETW)\
29+
**ETW** is the overarching name for the efficient kernel-level tracing facility that is built into Windows. Applications that support ETW emit events to log actions that might help to track down performance issues, thus the name *event* tracing. By default, the operating system already emits events for things like disk accesses, task switches and such. Applications like ARR additionally emit custom events, for instance about dropped frames, network lag etc.
3330

34-
**ETW** stands for [**E**vent **T**racing for **W**indows](/windows/win32/etw/about-event-tracing). It's simply the overarching name for the efficient kernel-level tracing facility that is built into Windows. It's called *event* tracing, because applications that support ETW emit events to log actions that may help to track down performance issues. By default, the operating system already emits events for things like disk accesses, task switches and such. Applications like ARR additionally emit custom events, for instance about dropped frames, network lag etc.
31+
* **E**vent **T**race **L**ogging (ETL)\
32+
**ETL** describes a gathered (logged) trace and is therefore typically used as the file extension for files that store the tracing data. Thus when you do a trace, you typically have an *\*.etl* file afterwards.
3533

36-
**ETL** stands for **E**vent **T**race **L**ogging. It simply means that a trace has been gathered (logged) and is therefore typically used as the file extension for files that store the tracing data. Thus when you do a trace, you typically have an \*.etl file afterwards.
34+
* [**W**indows **P**erformance **R**ecorder](/windows-hardware/test/wpt/windows-performance-recorder) (WPR)\
35+
**WPR** is the name of the application that starts and stops the recording of event traces. WPR takes a profile file (*\*.wprp*) that configures which exact events to log. Such a `wprp` file is provided with the ARR SDK. When doing traces on a desktop PC, you can launch WPR directly. When doing a trace on the HoloLens, you typically go through the web interface instead.
3736

38-
**WPR** stands for [**W**indows **P**erformance **R**ecorder](/windows-hardware/test/wpt/windows-performance-recorder) and is the name of the application that starts and stops the recording of event traces. WPR takes a profile file (\*.wprp) that configures which exact events to log. Such a `wprp` file is provided with the ARR SDK. When doing traces on a desktop PC, you may launch WPR directly. When doing a trace on the HoloLens, you typically go through the web interface instead.
37+
* [**W**indows **P**erformance **A**nalyzer](/windows-hardware/test/wpt/windows-performance-analyzer) (WPA)\
38+
**WPA** is the name of the GUI application that is used to open *\*.etl* files and sift through the data to identify performance issues. WPA allows you to sort data by various criteria, display the data in several ways, dig down into details, and correlate information.
3939

40-
**WPA** stands for [**W**indows **P**erformance **A**nalyzer](/windows-hardware/test/wpt/windows-performance-analyzer) and is the name of the GUI application that is used to open \*.etl files and sift through the data to identify performance issues. WPA allows you to sort data by various criteria, display the data in several ways, dig down into details, and correlate information.
40+
* `Perfetto`\
41+
[**Perfetto**](https://perfetto.dev/) is a system profiling and application tracing tool for Android and Linux, which is available since Android 9 Pie. Perfetto is also enabled on [Meta Quest and Quest 2](https://developer.oculus.com/blog/how-to-run-a-perfetto-trace-on-oculus-quest-or-quest-2/) devices (when developer mode is enabled), since v27 OS. [Perfetto Trace Viewer UI](https://ui.perfetto.dev/) can be used to open and analyze resulting Perfetto traces.
4142

42-
[**Perfetto**](https://perfetto.dev/) is a system profiling and application tracing tool for Android and Linux. It's built into Android since Android 9 Pie. Perfetto is also enabled on [Meta Quest and Quest 2](https://developer.oculus.com/blog/how-to-run-a-perfetto-trace-on-oculus-quest-or-quest-2/) devices (when developer mode is enabled), since v27 OS. [Perfetto Trace Viewer UI](https://ui.perfetto.dev/) can be used to open and analyze resulting Perfetto traces.
43-
44-
While ETL traces can be created on any Windows device (local PC, HoloLens, cloud server, etc.), they're typically saved to disk and analyzed with WPA on a desktop PC. ETL files can be sent to other developers for them to have a look. Be aware that sensitive information, such as file-paths and IP addresses, may be captured in ETL traces, though. You can use ETW in two ways: to record traces, or to analyze traces. Recording traces is straight-forward and requires minimal setup. Analyzing traces on the other hand does require a decent understanding of both the WPA tool and the problem that you're investigating. General material for learning WPA is given below, and guidelines for how to interpret ARR-specific traces.
43+
While ETL traces can be created on any Windows device (local PC, HoloLens, cloud server, etc.), they're typically saved to disk and analyzed with WPA on a desktop PC. ETL files can be sent to other developers for them to have a look. ETL traces can include sensitive information, such as file-paths and IP addresses. You can use ETW in two ways: to record traces, or to analyze traces. Recording traces is straight-forward and requires minimal setup. Analyzing traces on the other hand does require a decent understanding of both the WPA tool and the problem that you're investigating. General material for learning WPA is given later, and guidelines for how to interpret ARR-specific traces.
4544

4645
## Recording a trace on a local PC
4746

48-
To identify ARR performance issues, you should prefer to do a trace directly on a HoloLens. Because that is the only way to get a snapshot of the true performance characteristics. However, if you specifically want to do a trace without the HoloLens performance restrictions or you just want to learn how to use WPA and don't need a realistic trace, here's how to do so.
47+
Use traces on PC to either get familiar with the tools or if you have an issue where the hardware restrictions of the HoloLens aren't relevant. Otherwise you can skip to the [Recording a trace on a HoloLens](#Recording-a-trace-on-a-HoloLens) section. Especially ARR performance issues should only be traced directly on a HoloLens.
4948

5049
### WPR configuration
5150

5251
1. Launch the [:::no-loc text="Windows Performance Recorder":::](/windows-hardware/test/wpt/windows-performance-recorder) from the *start menu*.
53-
1. Expand **More Options**
54-
1. Select **Add Profiles...**
52+
1. Expand **More Options**.
53+
1. Select **Add Profiles...**.
5554
1. Select the file *AzureRemoteRenderingNetworkProfiling.wprp*. You can find this file in the ARR SDK under *Tools/ETLProfiles*.
56-
The profile will now be listed in WPR under *Custom measurements*. Make sure it's the only enabled profile.
57-
1. Expand *First level triage*:
55+
The profile is listed in WPR under *Custom measurements*. Make sure it's the only enabled profile.
56+
1. Expand *First level triage*.
5857
* If all you want to do is capture a quick trace of the ARR networking events, **disable** this option.
5958
* If you need to correlate ARR network events with other system characteristics, such as CPU or memory usage, then **enable** this option.
60-
* If you do enable this option, the trace will most likely be multiple gigabytes in size and take a long time to save and open in WPA.
59+
* Traces with this option enabled are most likely multiple gigabytes in size and might take a long time to save and open in WPA.
6160

6261
Afterwards your WPR configuration should look like this:
6362

6463
![WPR configuration](./media/wpr.png)
6564

6665
### Recording
6766

68-
Select **Start** to start recording a trace. You can start and stop recording at any time; you don't need to close your application before doing so. As you can see you don't need to specify which application to trace, as ETW will always record a trace for the entire system. The `wprp` file specifies which types of events to record.
67+
Select **Start** to start recording a trace. You can start and stop recording at any time; you don't need to close your application before doing so. As you can see you don't need to specify which application to trace, as ETW records a trace for the entire system. The `wprp` file specifies which types of events to record.
6968

7069
Select **Save** to stop recording and specify where to store the ETL file.
7170

@@ -78,12 +77,12 @@ To record a trace on a HoloLens, boot up your device and enter its IP address in
7877
![Device Portal](./media/wpr-hololens.png)
7978

8079
1. On the left, navigate to *Performance > Performance Tracing*.
81-
1. Select **Custom profiles**
82-
1. Select **:::no-loc text="Browse...":::**
80+
1. Select **Custom profiles**.
81+
1. Select **:::no-loc text="Browse...":::**.
8382
1. Select the file *AzureRemoteRenderingNetworkProfiling.wprp*. You can find this file in the ARR SDK under *Tools/ETLProfiles*.
84-
1. Select **Start Trace**
83+
1. Select **Start Trace**.
8584
1. The HoloLens is now recording a trace. Make sure to trigger the performance issues that you want to investigate. Then select **Stop Trace**.
86-
1. The trace is then listed at the bottom of the webpage. Select the disk icon at the right-hand side to download the ETL file.
85+
1. The trace is then listed at the bottom of the webpage. To download the ETL file, select the disk icon at the right-hand side.
8786

8887
You now have an ETL file that you can open in WPA.
8988

@@ -95,17 +94,17 @@ To record a trace on a Quest, you need [adb command-line tool](https://developer
9594
1. Make sure that adb is authorized to access your device by running `adb devices` and verifying that the device is listed.
9695
1. Locate tracing config file *AzureRemoteRenderingPerfetto.txt* file from ARR SDK under *Tools/ETLProfiles*.
9796
* By default, the trace configuration is set up to run for 30 seconds. This configuration can be modified by editing the `duration_ms: 30000` value in *AzureRemoteRenderingPerfetto.txt* file.
98-
1. On PowerShell, run `$config = cat "AzureRemoteRenderingPerfetto.txt" | adb shell perfetto -c - $config --txt --o "/data/misc/perfetto-traces/trace"`
99-
1. You should see output similar to:
97+
1. On PowerShell, run `$config = cat "AzureRemoteRenderingPerfetto.txt" | adb shell perfetto -c - $config --txt --o "/data/misc/perfetto-traces/trace"`.
98+
1. You should see output similar to this line.
10099
```
101100
[522.149] perfetto_cmd.cc:825 Connected to the Perfetto traced service, TTL: 30s
102101
```
103102
1. Quest device is now recording a trace. Start your application and trigger the issue that you want to investigate.
104-
1. When the trace recording is finished, you should see an output similar to:
103+
1. When the trace recording is finished, you should see an output similar to this line.
105104
```
106105
[552.637] perfetto_cmd.cc:946 Trace written into the output file
107106
```
108-
1. Finally, you can pull the file from the device by running `adb pull "/data/misc/perfetto-traces/trace" "outputTrace.pftrace"`
107+
1. Finally, you can pull the file from the device by running `adb pull "/data/misc/perfetto-traces/trace" "outputTrace.pftrace"`.
109108

110109
You now have a Perfetto trace file that you can open on [Perfetto Trace Viewer UI](https://ui.perfetto.dev/).
111110

@@ -116,36 +115,36 @@ You now have a Perfetto trace file that you can open on [Perfetto Trace Viewer U
116115
Windows Performance Analyzer is the standard tool to open ETL files and inspect the traces. An explanation how WPA works is out of scope for this article. To get started, have a look at these resources:
117116

118117
* Watch the [introductory videos](/windows-hardware/test/wpt/windows-performance-analyzer) for a first overview.
119-
* WPA itself has a *Getting Started* tab, which explains common steps. Have a look at the available articles. Especially under "View Data" you get a quick introduction how to create graphs for specific data.
120-
* There's excellent information [on this website](https://randomascii.wordpress.com/2015/09/24/etw-central/), however, not all of it's relevant for beginners.
118+
* Look into the *Getting Started* tab in WPA itself, which explains common steps. Have a look at the available articles. Especially under "View Data" you get a quick introduction how to create graphs for specific data.
119+
* Look through the excellent information [on this website](https://randomascii.wordpress.com/2015/09/24/etw-central/), however, not all of it's relevant for beginners.
121120

122121
### Graphing data
123122

124123
To get started with ARR tracing, the following pieces are good to know.
125124

126125
![Performance graph](./media/wpa-graph.png)
127126

128-
The image above shows a table of tracing data and a graph representation of the same data.
127+
The image shows a table of tracing data and a graph representation of the same data.
129128

130129
In the table at the bottom, note the yellow (golden) bar and the blue bar. You can drag these bars and place them at any position.
131130

132-
All **columns to the left of the yellow bar** are interpreted as **keys**. Keys are used to structure the tree in the top-left window. Here we have two *key* columns, "Provider Name" and "Task Name". So the tree structure in the top-left window is two levels deep. If you reorder the columns or add or remove columns from the key area, the structure in the tree view changes.
131+
All **columns to the left of the yellow bar** are interpreted as **keys**. Keys are used to structure the tree in the top-left window. Here we have two *key* columns, "Provider Name" and "Task Name." So the tree structure in the top-left window is two levels deep. If you reorder the columns or add or remove columns from the key area, the structure in the tree view changes.
133132

134-
**Columns to the right of the blue bar** are used for the **graph display** in the top-right window. Most of the time only the first column is used, but some graph modes require multiple columns of data. For line graphs to work, the *aggregation mode* on that column must be set. Use 'Avg' or 'Max'. The aggregation mode is used to determine the value of the graph at a given pixel, when a pixel covers a range with multiple events. This can be observed by setting aggregation to 'Sum' and then zooming in and out.
133+
**Columns to the right of the blue bar** are used for the **graph display** in the top-right window. Most of the time only the first column is used, but some graph modes require multiple columns of data. For line graphs to work, the *aggregation mode* on that column must be set. Use 'Avg' or 'Max.' The aggregation mode is used to determine the value of the graph at a given pixel, when a pixel covers a range with multiple events. This property can be observed by setting aggregation to 'Sum' and then zooming in and out.
135134

136135
The columns in the middle have no special meaning.
137136

138137
![Events view](./media/wpa-event-view.png)
139138

140-
In the *Generic Events View Editor* you can configure all the columns to display, the aggregation mode, sorting and which columns are used as keys or for graphing. In the example above, **Field 2** is enabled and Field 3 - 6 are disabled. Field 2 is typically the first *custom data* field of an ETW event and thus for ARR "FrameStatistics" events, which represent some network latency value. Enable other "Field" columns to see further values of this event.
139+
In the *Generic Events View Editor* you can configure all the columns to display, the aggregation mode, sorting and which columns are used as keys or for graphing. In the example image, **Field 2** is enabled and Field 3 - 6 are disabled. Field 2 is typically the first *custom data* field of an ETW event and thus for ARR "FrameStatistics" events, which represent some network latency value. Enable other "Field" columns to see further values of this event.
141140

142141
### Presets
143142

144-
To properly analyze a trace, you need to figure out your own workflow, and preferred data display. However, to be able to get a quick overview over the ARR-specific events, we include Windows Software Protection Platform profile and presets files in the folder *Tools/ETLProfiles*. To load a full profile, select *Profiles > Apply...* from the WPA menu bar, or open the *My Presets* panel (*Window > My Presets*) and select *Import*. The former sets up a complete WPA configuration as in the image below. The latter only makes presets for the various view configurations available and allow you to quickly open a view to look at a specific piece of ARR event data.
143+
To properly analyze a trace, you need to figure out your own workflow, and preferred data display. However, to be able to get a quick overview over the ARR-specific events, we include Windows Software Protection Platform profile and presets files in the folder *Tools/ETLProfiles*. To load a full profile, select *Profiles > Apply...* from the WPA menu bar, or open the *My Presets* panel (*Window > My Presets*) and select *Import*. The former sets up a complete WPA configuration as in the image below this paragraph. The latter only makes presets for the various view configurations available and allow you to quickly open a view to look at a specific piece of ARR event data.
145144

146145
![Presets](./media/wpa-arr-trace.png)
147146

148-
The image above shows views of various ARR-specific events plus a view of the overall CPU utilization.
147+
The image shows views of various ARR-specific events plus a view of the overall CPU utilization.
149148

150149
## Next steps
151150

0 commit comments

Comments
 (0)