[erlang-questions] erl_tracer, trace_status and pids
Loïc Hoguin
essen@REDACTED
Tue May 30 10:14:27 CEST 2017
Thanks for the replies!
On 05/29/2017 01:26 PM, Lukas Larsson wrote:
> * when you use enabled_*/3 and trace_*/5 functions for everything,
> the trace/5 function will never be called
>
> hmm, that should be true in the current implementation. That may change
> in the future though.
I'll change it in the future then. :-)
> * trace_status is always called before any other enabled_*/3 so I
> should be fine just doing nothing in enabled_*/3, right? I'm only
> checking that the tracer processes are still alive anyway.
>
>
> no, trace_status is not always called before enabled_*. The only event
> that I know of where it is called is enabled_call/3, there may be a
> couple of more but not all of them.
Alright. I'm a bit confused still. Would it make sense to only perform
some checks for trace_status, for example checking that the tracer
process exists? Then for other enabled_*/3 calls I would just reject
events I don't need.
> Basically if you could shed light on the circumstances around
> trace_status that would help a lot for optimizing this. :-)
>
>
> the check for trace_status call is made in various places in the vm code
> where the VM finds it convenient to do a check and see if the tracer is
> still alive. There are no specific rules about when it is called.
It sounds like the answer to my question is a yes. :-)
> Another question, I have a pool of tracer processes and want to send
> the events to one of them depending on the pid (all events of a pid
> gets to the same tracer process). Is this a valid solution?
>
> nth = (tracee.pid >> 4) % len;
>
> This gives me the number of the tracer I will send the message to.
>
>
> It is one way to do it, but you are relying on the internal
> representation of a PID, which may change, and I don't think you get a
> very good hash.
>
> In OTP-20 there is a new nif called enif_hash/3 that can be used to get
> a better hash value.
> (http://erlang.org/documentation/doc-9.0-rc1/erts-9.0/doc/html/erl_nif.html#enif_hash)
Thanks, I will use it on OTP 20+ then.
--
Loïc Hoguin
https://ninenines.eu
More information about the erlang-questions
mailing list