Profiling with Sysprof
Prerequisites
To work with Sysprof one needs to install it first:
- ubuntu:
apt install sysprof
- fedora
dnf install sysprof
Profiling
To start the profiling one must either:
- start
sysprof-cli
to get a system-wide capture:
sysprof-cli -f
- or wrap a command with
sysprof-cli
to get a capture focused on the execution of a particular process tree created by the given command:
sysprof-cli -f -- MiniBrowser 'http://webkit.org'
For more information, please refer to sysprof-cli --help
:
Usage:
sysprof-cli [OPTION…] [CAPTURE_FILE] [-- COMMAND ARGS]
(...)
Profiling WebKit in the SDK
When profiling WebKit in the SDK, one must use the Tools/Scripts/run-minibrowser
script as it contains plumbing that makes sysprof-cli
work correctly:
WPE_BROWSER=minibrowser sysprof-cli -f -- Tools/Scripts/run-minibrowser --wpe --release 'https://igalia.com'
Working with capture files
Once the sysprof capture file (.syscap
) is produced using sysprof-cli
, it’s possible:
- to visualize the captured data using the Sysprof GUI
- to further transform it into textual format format that can be used for playing around with the data
Visualizing captured data
To visualize the captured data, the sysprof
application needs to be launched and the capture file needs to be loaded. It’s possible to open multiple capture files and have them visualized in separate windows.
Transforming captured data into text
Visualizing sysprof captures is very feature rich, but sometimes one needs to process the data using scripts to e.g. perform statistical analysis etc. For that, sysprof capture file needs to be transformed from binary format, the textual format that can be easily parsed and processed further. This can be easily done using sysprof-cat
:
sysprof-cat capture.syscap
sysprof-cat --no-callgraph --no-counters capture.syscap
The output format is “CSS-inspired” yet it’s very easy to write a custom parser for it.
Known problems
sysprof-cli
not starting in SDK
If basic sysprof-cli -f
command yields errors such as:
(...)
Sampler: Failed to record copy of “kallsyms” to capture: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Not authorized to make request
Sampler: Failed to load Perf event stream for CPU 0: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Not authorized to make request
Sampler: Failed to load Perf event stream for CPU 1: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Not authorized to make request
Sampler: Failed to load Perf event stream for CPU 2: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Not authorized to make request
Sampler: Failed to load Perf event stream for CPU 3: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Not authorized to make request
(...)
This means that D-Bus calls to the system bus cannot be authorized. To make sure that’s the case, one can run the command:
dbus-send --system --print-reply --dest=org.gnome.Sysprof3 /org/gnome/Sysprof3 org.gnome.Sysprof3.Service.ListProcesses
and confirm it outputs:
Error org.freedesktop.DBus.Error.AccessDenied: Not authorized to make request
This means the host system does not have Polkit agent running that would normally be used to ask the user for their password. In such case one needs to install and run a Polkit agentN.
E.g. on ubuntu, the following should do the job:
sudo apt install policykit-1-gnome
/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1