[erlang-questions] UDP client/server performance

JD Bothma <>
Mon Aug 13 21:42:27 CEST 2012

I'm curious:

What are the numbers like (c versus erlang) when it's between two
physical machines? Or between two (vmware or virtualbox, not xen)
virtual machines?

Or said otherwise: does the fact that it's the same machine, network
stack and loopback interface affect the comparison between c and


On 13 August 2012 21:11, Ronny Meeus <> wrote:
> Hello
> I have created a simple UDP based client/server application.
> The code is available on bitbucket
> (https://bitbucket.org/meeusr/erl-examples) in the networking
> directory.
> The server is just an echo server running in 1 process.
> The client can behave like a sync client (sending 1 message and
> waiting for the reply) or like an async client (sending X messages
> before waiting for all the replies).
> I see that my PC (Intel(R) Quad code i7 CPU 860  @ 2.80GHz) is able to
> process something like 7K - 10K messages per second. Both the sync and
> the async are in the same order of magnitude. Please note that I use
> the loopback interface.
> $ erl +sbt db
> Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4]
> [async-threads:0] [hipe] [kernel-poll:false]
> Eshell V5.9.1  (abort with ^G)
> 1> c(gen_udp_test).
> gen_udp_test.erl:47: Warning: variable 'Data' is unused
> gen_udp_test.erl:47: Warning: variable 'Msg' is unused
> gen_udp_test.erl:62: Warning: variable 'Data' is unused
> gen_udp_test.erl:62: Warning: variable 'Msg' is unused
> {ok,gen_udp_test}
> 2> gen_udp_test:start_server().
> true
> ...
> 12> gen_udp_test:client_async(5000).
> stop : 841482
> ok
> 13> gen_udp_test:client_async(6000).
> stop : 1082679
> ok
> The timings are the number of usec for the processing of the X number
> of messages (round-trip).
> If I implement the same application in C (client and server are 2
> applications), I see that the application performs an order of
> magnitude better for the sync solution (86Kpkts/sec) and 100 times
> better (700Kpkts/sec) for the async version.
> The code for this is also available in the repo on bitbucket.
> I know there this test is only looking to a part of the application
> (transport of the data), but I find the difference rather big.
> Is this normal or is there something wrong in my Erlang code?
> Thanks.
> Regards,
> Ronny
> _______________________________________________
> erlang-questions mailing list
> http://erlang.org/mailman/listinfo/erlang-questions

More information about the erlang-questions mailing list