[erlang-questions] Is the performance cost of inet:i() big or small?

Jesper Louis Andersen jesper.louis.andersen@REDACTED
Tue May 22 16:10:44 CEST 2012


On 5/13/12 12:32 PM, skyman wrote:
> Hi all,
> inet:i() can print all socket info statistics, and it is very useful 
> for monitoring the network for the Erlang node. Is the performance 
> cost of inet:i() big or small? Can I use it in the production system?
>
I learned a trick during the Erlang Factory 2012 by Patrik Nyblom: When 
in doubt, read the source code of the virtual machine.

inet:i() makes a call to erlang:ports() and then afterwards does some 
work to format the result of this nicely. The erlang:ports/0 call is a 
BIF, so you can go to the BIF-table and look up that its name in the C 
source is ports_0. Going to this function and reading about the blocking 
behaviour tells you that you can only have one such snapshot call 
running at a time and it only blocks concurrency on ports one port at a 
time (It has to, it bumps a snapshot counter in the port struct). This 
would suggest that the performance cost is such that it won't block the 
whole system when it is run (which is good), but it does have a cost if 
you call all the time.

More interestingly, the call also allocates quite the amount of data. So 
you may end up with a spike in memory usage when you make the call and 
the result is then dependent on how many ports you have.

My guess is that it won't be highly problematic to use in production 
unless you put it into a tight loop. If you are in doubt, you should 
measure.



-- 
Jesper Louis Andersen
   Erlang Solutions Ltd., Copenhagen, DK

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120522/b81ceaaa/attachment.htm>


More information about the erlang-questions mailing list