Performance profiling with XRay
If your application seems to run slow, then you might want to know where the time is spent in the code. Here, instrumenting the code with XRay can assist with this task. Basically, at each function entry and exit, a special call is inserted into the runtime library. This allows you to count how often a function is called, and also how much time is spent in the function. You can find the implementation for the instrumentation pass in the llvm/lib/XRay/
directory. The runtime portion is part of compiler-rt
.
In the following example source, real work is simulated by calling the usleep()
function. The func1()
function sleeps for 10 µs. The func2()
function calls func1()
or sleeps for 100 µs, depending on if the n
parameter is odd or even. Inside the main()
function, both functions are called inside a loop. This is already enough to get interesting information. You’ll need to save the following source code in the xraydemo.c
file:
#include...