CPU Utilization View

This view shows the average core utilization by the analyzed process, the Idle process, the System process, and other processes that are running on the system over time. It does not show which specific core is active at any given time. For example, if two cores are each running at 50% capacity for a given time period, then this view will show one logical core being utilized. The view is generated by dividing the profiling time into short time segments. For each segment, the graph plots the average number of process threads executing on logical cores during that interval.

CPU Utilization View

The graph shows time (on the x-axis) and the average logical cores that are utilized by the target process, the Idle process (to show idle cores), and the System process (a special process in Windows that may perform work on behalf of other processes). The remaining processes running on the system account for the utilization of any remaining cores.

The number of logical cores is shown on the y-axis. The Windows operating system treats simultaneous multithreading support in hardware (for example, Hyper-Threading) as logical cores. Therefore, a system that has a quad-core processor supporting two hardware threads per core will appear as an eight-logical core system. This also applies to the Cores View. (For more information, see Cores View.)

Also, when your application is shown consuming one core, it does not imply that your application threads were running on core 1; instead, it means that on average your application threads effectively consumed the equivalent of one logical core. The Cores View can be used to examine the mapping of threads to logical cores.

If you leverage scenario markers in your application, the CPU Utilization View can also show vertical markers corresponding to Start/Stop pairs in your application. This allows you to correlate regions in the view to the phases of the application that are causing the behavior under investigation. To see details, hover over a vertical marker to view a tooltip that contains the strings that you specified in the markers in your application. Although this is an optional feature, we recommend it for performance analysis. The Concurrency Visualizer supports up to 100 markers for CPU Utilization View and up to 500 for the Cores and Threads Views.

Purpose

The CPU Utilization View is the recommended starting point for performance investigations using the Concurrency Visualizer. By providing an overview of an application’s degree of concurrency over time, it allows for quick identification of an area (or areas) of interest. There are two main purposes for using the Concurrency Visualizer: a performance-tuning effort, or a parallelization effort.

If you are interested in performance tuning, you might be trying to identify behavior differing from your expectations. You may also be looking to identify the existence and cause of regions with low utilization of logical CPU cores.

If you are interested in parallelizing an application, you typically look for either CPU-bound areas of execution or areas where you are not utilizing the CPU.

CPU-bound areas are green, and the graph shows one core being utilized if the application is serial.

Areas where you are not utilizing the CPU are colored gray. These might represent points at which the application is idle or performing blocking I/O that provide opportunities for parallelism by overlapping with other CPU-bound work.

When a behavior of interest has been identified, you can zoom in on that region by selecting it. After zooming, you may switch to the Threads View or Cores View for more detailed analysis.

Zooming

To zoom in on the CPU Utilization graph, select a section by clicking and then dragging within the graph, or use the zoom slider tool above the graph. To zoom in further, do the same. The zoom setting persists as you switch to other views. To zoom out again, use the zoom slider tool.

See Also

Concepts

Concurrency Visualizer

Cores View