Using perf probe for fun and profit
Gnome Terminal has for a long time now exhibited a peculiar and annoying tendency to leak X11 resources. Over the course of weeks it will accrue hundreds of thousands of resources which
xrestop could only describe as “Miscellaneous”. Eventually I broke down and found that these are
SyncCounters. The challenge was then to determine why this was happening.
A bit of poking around in
gdb indicated that
XSyncDestroyCounter are when one would roughly expect (namely window creation and destruction). So where is this leak coming from?
The obvious way to approach this is be to capture callgraphs to calls to these functions and see if we can find missing frees. It turns out that
perf has just the tool for this task:
$ sudo chown ben /sys/kernel/debug -R $ ~/bin/perf probe -x /usr/lib/x86_64-linux-gnu/libXext.so --add XSyncCreateCounter $ ~/bin/perf probe -x /usr/lib/x86_64-linux-gnu/libXext.so --add XSyncDestroyCounter ~/bin/perf record -e probe_libXext:XSyncCreateCounter,probe_libXext:XSyncDestroyCounter /usr/lib/gnome-terminal/gnome-terminal-server
This lead to the opening (and, happily, resolution) of Gnome ticket #760188.