[erlang-questions] UDP client/server performance

Ronny Meeus <>
Mon Aug 13 22:29:30 CEST 2012


Hello

I did a quick check.
- The values between 2 machines are comparable for Erlang.
- For the C code there is a difference: the async version drops from
700Kpks/sec to 400Kpks/sec while the sync version drops from
86Kpkts/sec to 10Kpkts/sec.


On Mon, Aug 13, 2012 at 9:42 PM, JD Bothma <> wrote:
> 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
> erlang?
>
> JD
>
> 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