2023-11-21 21:31:16 +02:00
|
|
|
\page page_man_pw-top_1 pw-top
|
|
|
|
|
|
|
|
|
|
The PipeWire process viewer
|
|
|
|
|
|
|
|
|
|
# SYNOPSIS
|
|
|
|
|
|
|
|
|
|
**pw-top** \[*options*\]
|
|
|
|
|
|
|
|
|
|
# DESCRIPTION
|
|
|
|
|
|
|
|
|
|
The *pw-top* program provides a dynamic real-time view of the pipewire
|
|
|
|
|
node and device statistics.
|
|
|
|
|
|
|
|
|
|
A hierarchical view is shown of Driver nodes and follower nodes. The
|
|
|
|
|
Driver nodes are actively using a timer to schedule dataflow in the
|
|
|
|
|
followers. The followers of a driver node as shown below their driver
|
2025-09-15 12:29:57 +02:00
|
|
|
with a + sign (or = for async nodes) in a tree-like representation.
|
2023-11-21 21:31:16 +02:00
|
|
|
|
|
|
|
|
The columns presented are as follows:
|
|
|
|
|
|
|
|
|
|
\par S
|
|
|
|
|
\parblock
|
|
|
|
|
Node status.
|
|
|
|
|
|
|
|
|
|
- E = ERROR
|
|
|
|
|
- C = CREATING
|
|
|
|
|
- S = SUSPENDED
|
|
|
|
|
- I = IDLE
|
|
|
|
|
- R = RUNNING
|
2024-02-29 14:07:08 +01:00
|
|
|
- t = RUNNING + transport starting
|
|
|
|
|
- T = RUNNING + transport running
|
2023-11-21 21:31:16 +02:00
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par ID
|
|
|
|
|
The ID of the pipewire node/device, as found in *pw-dump* and
|
|
|
|
|
*pw-cli*
|
|
|
|
|
|
|
|
|
|
\par QUANT
|
|
|
|
|
\parblock
|
|
|
|
|
The current quantum (for drivers) and the suggested quantum for
|
|
|
|
|
follower nodes.
|
|
|
|
|
|
|
|
|
|
The quantum by itself needs to be divided by the RATE column to
|
|
|
|
|
calculate the duration of a scheduling period in fractions of a
|
|
|
|
|
second.
|
|
|
|
|
|
|
|
|
|
For a QUANT of 1024 and a RATE of 48000, the duration of one period
|
|
|
|
|
in the graph is 1024/48000 or 21.3 milliseconds.
|
|
|
|
|
|
|
|
|
|
Follower nodes can have a 0 QUANT field, which means that the node
|
|
|
|
|
does not have a suggestion for the quantum and thus uses what the
|
|
|
|
|
driver selected.
|
|
|
|
|
|
|
|
|
|
The driver will use the lowest quantum of any of the followers. If
|
|
|
|
|
none of the followers select a quantum, the default quantum in the
|
|
|
|
|
pipewire configuration file will be used.
|
|
|
|
|
|
|
|
|
|
The QUANT on the drivers usually translates directly into the number
|
|
|
|
|
of audio samples processed per processing cycle of the graph.
|
|
|
|
|
|
|
|
|
|
See also
|
|
|
|
|
<https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/FAQ#pipewire-buffering-explained>
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par RATE
|
|
|
|
|
\parblock
|
|
|
|
|
The current rate (for drivers) and the suggested rate for follower
|
|
|
|
|
nodes.
|
|
|
|
|
|
|
|
|
|
This is the rate at which the *graph* processes data and needs to be
|
|
|
|
|
combined with the QUANT value to derive the duration of a processing
|
|
|
|
|
cycle in the graph.
|
|
|
|
|
|
|
|
|
|
Some nodes can have a 0 RATE, which means that they don\'t have any
|
|
|
|
|
rate suggestion for the graph. Nodes that suggest a rate can make
|
|
|
|
|
the graph switch rates if the graph is otherwise idle and the new
|
|
|
|
|
rate is allowed as a possible graph rate (see the pipewire
|
|
|
|
|
configuration file).
|
|
|
|
|
|
|
|
|
|
The RATE on (audio) driver nodes usually also translates directly to
|
|
|
|
|
the samplerate used by the device. Although some devices might not
|
|
|
|
|
be able to operate at the given samplerate, in which case resampling
|
|
|
|
|
will need to be done. The negotiated samplerate with the device and
|
|
|
|
|
stream can be found in the FORMAT column.
|
|
|
|
|
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par WAIT
|
|
|
|
|
\parblock
|
|
|
|
|
The waiting time of a node is the elapsed time between when the node
|
|
|
|
|
is ready to start processing and when it actually started
|
|
|
|
|
processing.
|
|
|
|
|
|
|
|
|
|
For Driver nodes, this is the time between when the node wakes up to
|
|
|
|
|
start processing the graph and when the driver (and thus also the
|
|
|
|
|
graph) completes a cycle. The WAIT time for driver is thus the
|
|
|
|
|
elapsed time processing the graph.
|
|
|
|
|
|
|
|
|
|
For follower nodes, it is the time spent between being woken up
|
|
|
|
|
(when all dependencies of the node are satisfied) and when
|
|
|
|
|
processing starts. The WAIT time for follower nodes is thus mostly
|
|
|
|
|
caused by context switching.
|
|
|
|
|
|
|
|
|
|
A value of \-\-- means that the node was not signaled. A value of
|
|
|
|
|
+++ means that the node was signaled but not awake.
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par BUSY
|
|
|
|
|
\parblock
|
|
|
|
|
The processing time is started when the node starts processing until
|
|
|
|
|
it completes and wakes up the next nodes in the graph.
|
|
|
|
|
|
|
|
|
|
A value of \-\-- means that the node was not started. A value of +++
|
|
|
|
|
means that the node was started but did not complete.
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par W/Q
|
|
|
|
|
\parblock
|
|
|
|
|
Ratio of WAIT / QUANT.
|
|
|
|
|
|
|
|
|
|
The W/Q time of the driver node is a good measure of the graph load.
|
|
|
|
|
The running averages of the driver W/Q ratios are used as the DSP
|
|
|
|
|
load in other (JACK) tools.
|
|
|
|
|
|
|
|
|
|
Values of \-\-- and +++ are copied from the WAIT column.
|
|
|
|
|
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par B/Q
|
|
|
|
|
\parblock
|
|
|
|
|
Ratio of BUSY / QUANT
|
|
|
|
|
|
|
|
|
|
This is a good measure of the load of a particular driver or
|
|
|
|
|
follower node.
|
|
|
|
|
|
|
|
|
|
Values of \-\-- and +++ are copied from the BUSY column.
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par ERR
|
|
|
|
|
\parblock
|
|
|
|
|
Total of Xruns and Errors
|
|
|
|
|
|
|
|
|
|
Xruns for drivers are when the graph did not complete a cycle. This
|
|
|
|
|
can be because a node in the graph also has an Xrun. It can also be
|
|
|
|
|
caused when scheduling delays cause a deadline to be missed, causing
|
|
|
|
|
a hardware Xrun.
|
|
|
|
|
|
|
|
|
|
Xruns for followers are incremented when the node started processing
|
|
|
|
|
but did not complete before the end of the graph cycle deadline.
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par FORMAT
|
|
|
|
|
\parblock
|
|
|
|
|
The format used by the driver node or the stream. This is the
|
|
|
|
|
hardware format negotiated with the device or stream.
|
|
|
|
|
|
|
|
|
|
If the stream of driver has a different rate than the graph,
|
|
|
|
|
resampling will be done.
|
|
|
|
|
|
|
|
|
|
For raw audio formats, the layout is \<sampleformat\> \<channels\>
|
|
|
|
|
\<samplerate\>.
|
|
|
|
|
|
|
|
|
|
For IEC958 passthrough audio formats, the layout is IEC958 \<codec\>
|
|
|
|
|
\<samplerate\>.
|
|
|
|
|
|
|
|
|
|
For DSD formats, the layout is \<dsd-rate\> \<channels\>.
|
|
|
|
|
|
|
|
|
|
For Video formats, the layout is \<pixelformat\>
|
|
|
|
|
\<width\>x\<height\>.
|
|
|
|
|
\endparblock
|
|
|
|
|
|
|
|
|
|
\par NAME
|
|
|
|
|
\parblock
|
|
|
|
|
Name assigned to the device/node, as found in *pw-dump* node.name
|
|
|
|
|
|
2025-09-15 12:29:57 +02:00
|
|
|
Names are prefixed by *+*/*=* when they are linked to a driver (entry
|
|
|
|
|
above with no +/=)
|
2023-11-21 21:31:16 +02:00
|
|
|
\endparblock
|
|
|
|
|
|
2025-04-30 15:10:15 +02:00
|
|
|
# COMMANDS
|
|
|
|
|
|
|
|
|
|
The following keys can be used in the interactive mode:
|
|
|
|
|
|
|
|
|
|
\par q
|
|
|
|
|
Quit
|
|
|
|
|
|
|
|
|
|
\par c
|
|
|
|
|
Clear the ERR counters. This does *not* clear the counters globally,
|
|
|
|
|
it will only reset the counters in this instance of *pw-top*.
|
2023-11-21 21:31:16 +02:00
|
|
|
|
|
|
|
|
# OPTIONS
|
|
|
|
|
|
|
|
|
|
\par -h | \--help
|
|
|
|
|
Show help.
|
|
|
|
|
|
|
|
|
|
\par -b | \--batch-mode
|
|
|
|
|
Run in non-interactive batch mode, similar to top\'s batch mode.
|
|
|
|
|
|
|
|
|
|
\par -n | \--iterations=NUMBER
|
|
|
|
|
Exit after NUMBER of batch iterations. Only used in batch mode.
|
|
|
|
|
|
|
|
|
|
\par -r | \--remote=NAME
|
|
|
|
|
The name the *remote* instance to monitor. If left unspecified, a
|
|
|
|
|
connection is made to the default PipeWire instance.
|
|
|
|
|
|
|
|
|
|
\par -V | \--version
|
|
|
|
|
Show version information.
|
|
|
|
|
|
|
|
|
|
# AUTHORS
|
|
|
|
|
|
|
|
|
|
The PipeWire Developers <$(PACKAGE_BUGREPORT)>;
|
|
|
|
|
PipeWire is available from <$(PACKAGE_URL)>
|
|
|
|
|
|
|
|
|
|
# SEE ALSO
|
|
|
|
|
|
|
|
|
|
\ref page_man_pipewire_1 "pipewire(1)",
|
|
|
|
|
\ref page_man_pw-dump_1 "pw-dump(1)",
|
|
|
|
|
\ref page_man_pw-cli_1 "pw-cli(1)",
|
|
|
|
|
\ref page_man_pw-profiler_1 "pw-profiler(1)"
|