TCP stack throughput
Javier París Fernández
paris@REDACTED
Tue Jul 19 19:39:12 CEST 2005
Hi,
Ok, a bit late O:)
I modified the files slightly, because out TCP/IP stack works
with a passive model (the client must make the reads explicitly).
The files can be downloaded from
http://www.lfcia.org/~paris/fac.erl
http://www.lfcia.org/~paris/tcp_server.erl
To take away the cost of the factorial, I made all the test computing
the factorial of 1.
I observed several funny things. The time spent processing the
connections seems to go up exponentially, but it is not limited
by cpu, which was always under 50%. I don't know what is throttling it.
When I trid with 5000 connections, the logs started to show retransmissions,
so I think it is probably related to some buffering limit with
the socket. This obviously skyrocketed the total processing time.
The total processing time for the tests was:
500 in 0.6 seconds
1000 in 1.7 seconds
2000 in 6.2 seconds
5000 was still closing connections after 3 minutes
There are tcpdump logs in
http://www.lfcia.org/~paris/dump500.gz
http://www.lfcia.org/~paris/dump1000.gz
http://www.lfcia.org/~paris/dump2000.gz
http://www.lfcia.org/~paris/dump5000.gz
I think it would be interesting to find what is the limiting the stack
here, and why there are dropped packets, as I think it should be
possible to get better performance. However, I had not made a test
similar to this, so connection opening and closing is one of the things
that are not optimized in the stack.
Regards,
Javier.
More information about the erlang-questions
mailing list