[erlang-questions] UDP client/server performance
Mon Aug 13 21:11:53 CEST 2012
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
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)
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
stop : 841482
stop : 1082679
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?
More information about the erlang-questions