On 10/20/11 3:37 PM, Zigor Salvador wrote:
Hello everyone,
I'm benchmarking a distributed application developed with MINA 2.0.4.
I use a simple text protocol (TextLineCodecFactory over TCP) to transmit JSON
formatted messages (Using Jackson 1.9.0) with a payload size of 472 bytes (that
is the length of the String I write to the MINA session).
Two applications running on different machines that communicate with said
protocol over Gigabit Ethernet achieve a maximum stable throughput of 36.000
events/second (measured by my benchmarking component).
Assuming 20 bytes for IP and another 20 bytes for TCP headers, that is 512
bytes per message so roughly 17.57 MBytes/second.
I was expecting *more* of our Gigabit switch (and this is without any other
traffic in the network) so I'm looking for ways to improve performance. The
machines have plenty of power (8 core Xeons) and RAM (24 Gb each).
Is it a Linux OS, Windows or MacOS, or anything more exotic ?
Which Linux flavor ?
I have used VisualVM to profile the applications and I see that most of the
time is spent in NioProcessor.select() followed (quite far) by
NioProcessor.write().
Should I understand that there's nothing left for me to do as MINA is taking
most of the processing time?
I haven't customized any aspect of MINA (buffer size, thread pool, things like
that...).
Should not be necessary at this step.
What are the CPU metrics on your server ?
Any hints would be GREATLY appreciated.
I guess I'm using very small packages that have an impact in the maximum
achieved bandwidth. Maybe using a message size closer to the MTU of 1500 bytes
would bring total bandwidth up at the cost of a lowered throughput?
Each message sent and received on ethernet will use 1500 bytes, even if
you transmit only one byte of data. That means for a message being send
and a response being provided, you will eat 2 x 1500 bytes. With 36 000
messages sent per second, that is 36 000 x 2 x 1500 = 108 000 000 bytes
per second. This will pretty much saturate your Gb ethernet network...
Just try to send a 1500 bytes long messages (actually, less than 1500, I
don't remember what is the size of the max payload you can store in a
PDU), to see if you can still process 36 000 messages per second. The
response must have the same size. If so, you should totally saturate
your Gb ethernet, and have the same throughput.
--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com