www.percepio.com

Communication Flow

Overview

The Communication Flow graph offers a quick overview of the communication and synchronization between actors in a trace, through message queues, semaphores and mutexes. This graph can be generated over a whole trace, or for a specific interval only. For example, you might use the CPU Load Graph viewer to identify a peak where there is a lot of activity, then select the interval using a mouse drag selection, right click and select "Show Communication Flow" in the context menu to show the communication flow graph of that specific interval.

Actors are shown as rectangles, and other kernel objects are shown as ellipses or hexagons. Ellipses are used for message queues and other message passing operations, i.e., communication, while hexagons are used for Mutexes and similar locks, i.e., for synchronization objects.

There are two modes in this view:

The classification of kernel objects into communication objects (ellipses) and synchronization objects (hexagons) is based on the actual kernel service calls found, not the static type of the object. This since semaphores can be used for both purposes, as a directional signal (a form of communication), and as a synchronization lock, i.e., like a Mutex. A kernel object is treated as a synchronization object (hexagon) if there are actors that both increment and decrement the object state (e.g., do both a "LockMutex" and "ReleaseMutex"). This means that a semaphore can show up as a hexagon (if one actor both signals and waits for it) while a mutex in rare cases might show up as an ellipse, if only one type of operation ("LockMutex" or "ReleaseMutex") have are recorded on the particular object.

Applying filters

Sometimes it's useful to filter out specific tasks or objects, such as if you have a debug or log writer task that many other tasks send data to. By default, all actors and objects that doesn't perform any communication is hidden, but you can adjust these settings using the filter menus. You can also right-click a node to hide it.

When right-clicking a node, you'll also be presented with options to show only connected nodes, in one, two or unlimited steps. This shows only actors and objects that affect or are affected by the selected actor or object via directed communication (undirected communication such as through mutexes are not followed even though the objects will be displayed).

The Show All Connected and the Show All Connected Only options will show the same nodes (actors/objects) but might show different sets of edges (lines). The difference is that the former does not hide communication between those nodes even if it's unrelated to the selected node. For example, if you have the communication chains taskA -> queueB -> taskB -> outputQueue and taskA -> outputQueue and you show nodes connected to taskB, Show All Connected Only (2 steps) would should only the first chain while Show All Connected (2 steps) would also show the second chain.


Copyright Percepio AB 2014, all rights reserved.