[erlang-questions] optimizing an asynchronous architecture

Joel Reymont joelr1@REDACTED
Wed Jul 8 19:30:32 CEST 2009

On Jul 7, 2009, at 9:40 PM, Jeroen Koops wrote:

> Not that I have any experience with it, but did you have a look at  
> the sequential tracing facility (http://www.erlang.org/doc/man/seq_trace.html)? 
>  Looks like it does pretty much what you need.

I rolled my own version of sequential tracing by wrapping a message up  
in another message with a timestamp at each stage. This way I can  
calculate how long it took the message to get from process to process,  
a total of 5 stages. The pipeline stops right before gen_tcp:send but  
it's still only 50% the time I calculate by other means, described  

I can't believe that 50% of the time is spent going through the TCP  
stack so perhaps my testing methodology is flawed.

I need to broadcast my message once all the bots have connected to the  
server and subscribed to a particular topic. To make this happen, I  
have a "barrier" process that I start with the total number of bots I  
plan to run. Bots ping the barrier once they are ready which  
decrements the counter. Once the counter is 0 the barrier process exits.

Bots monitor the barrier process to get notified of its exit and so  
does the broadcasting process. A single message is broadcast to all  
bots once the barrier opens. Bots log the time when they received the  
barrier exit notification as well as the time when they receive the  
message itself.

The difference is what I compare against the "pipeline length" at the  
beginning of this message. It turns out that a message takes twice as  
long to get to a bot as the total time it takes a message to travel  
through all stages.

Is it safe to assume that erlang:monitor is wicked fast and has no  
problem notifying 10-20k processes monitoring a single one? Are there  
better ways to implement a "barrier" in Erlang?

Is there anything else, apart from gen_tcp:send, that could be  
accounting for that 50% difference between bot notification time and  
message travel time within the server?

	Thanks, Joel

Mac hacker with a performance bent

More information about the erlang-questions mailing list