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

Reply via email to