Performance profiling with XRay
If your application seems to run slow, then you might want to know where all the time is spent in the code. In this case, instrumenting the code with XRay helps you. Basically, at each function entry and exit, a special call into the runtime library is inserted. This allows counting how often a function is called, and also how much time is spent in the function. You 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 either calls func1()
or sleeps for 100 µs, depending on whether 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...