[erlang-questions] Erlang tracing
Jesper Louis Andersen
jesper.louis.andersen@REDACTED
Tue Sep 22 12:47:38 CEST 2015
On Mon, Sep 21, 2015 at 10:52 AM, Lukas Larsson <lukas@REDACTED> wrote:
> * Allow multiple tracers. Today only one port/process can be the receiver
> of trace data.
>
This would be especially welcome. You can run profiling next to
debug-tracing then, which is a nice thing.
> * Better integration of dtrace/lttngt/systemtap into the erlang trace.
>
My advice would be: Study the DTrace model. Steal every good idea. In
DTrace, you enable probes, then define a filter set on those probes and
then you define what action (i.e., program) to run if the filter is passed.
Example: People have requested a "who calls me" query. Suppose we had a
probe in DTrace for when a function calls another function, in module 'm'
erlang*:::funcall
/ copyinstr(arg1) = "m" /
{
caller = current_function()
}
erlang*:::global-function-enry
{
@callers[caller] = count()
}
This would in principle be enough to satisfy that query, if only we
extended DTrace probes a little bit. It would output a list of pairs
[{Caller, Count}].
Second observation: DTrace has something called a ustack(), which is the
backtrace stack in Userland. We can get that for the C layer in BEAM, but
we can't look into it for the Erlang world. The ustack() helpers are
D-scripts (they run in the kernel, and can only have finite loops among
other things). So we would probably need an easy way, in a struct, where we
can grab information about the frames on the emulator stack from the
kernel. Any tracing facility outside the Erlang world needs this.
Third observation: Simon's request is also easily satisfiable. Set a tick
timer at 997Hz from the kernel, then look up where we are once the timer
ticks. Preferably once per scheduler thread.
Key takeaway: Provide tools, not solutions. Once you can enable probes and
filter probes, a process can tie actions to probes like the above. We can
always push specialized optimizations down into the tracing layer for
efficiency, but we should go for a variant where we provide enabling tools
for programmers, rather than baked solutions.
I envision that things such as e2_debug, recon_trace, redbug and so on are
adaptable to a new model, easily.
Finally, we should really write a good dbg tutorial together with better
documentation. I'm willing to throw some hours into this if needed :)
--
J.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150922/fd267630/attachment.htm>
More information about the erlang-questions
mailing list