mina-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Zvika Gart <zvikag...@gmail.com>
Subject Re: Miserable performance results from MINA 1.1.7
Date Wed, 25 Nov 2009 08:55:51 GMT
The default is false...
I tried disabling Nagle by setting TcpNoDelay to true. As expected, this
didn't have any effect - the server doesn't send any data to the client,
only receives data.


On Tue, Nov 24, 2009 at 9:49 PM, Emmanuel Lecharny <elecharny@apache.org>wrote:

> Can you add this line in your server :
>
> ((SocketSessionConfig) acceptor.getSessionConfig()).setTcpNoDelay(false)
>
> and see if it makes any difference ?
>
>
>
>
> Zvika Gart wrote:
>
>> Sorry, but Nagle doesn't have anything to do with this...
>> Nagle is relevant at the *client side* when sending small buffers over the
>> network.
>> My client is a simple C# program (not MINA, so SocketConnector is
>> irrelevant) that sends large buffers (100KB) at each call to Socket.Send()
>> If Nagle was to blame then I would see the same bandwidth from both server
>> implementations. This is not the case.
>>
>>
>> On Tue, Nov 24, 2009 at 8:41 PM, Emmanuel Lecharny <elecharny@apache.org
>> >wrote:
>>
>>
>>
>>> Damn Nagle ! ( http://en.wikipedia.org/wiki/Nagle_algorithm )
>>>
>>> Check the FAQ : http://mina.apache.org/faq.html (
>>>
>>>
>>>    Why does SocketConnector send several messages as one message?)
>>>
>>>
>>>
>>> Zvika Gart wrote:
>>>
>>>
>>>
>>>> Hello,
>>>> Please help, as this is too strange to be true...
>>>>
>>>> I'm comparing two implementations of the most basic socket server - it
>>>> listens for a client, and after accepting it just starts reading data
>>>> from
>>>> it.
>>>> The first implementation using Java's plain old ServerSocket:
>>>>
>>>>       ServerSocket srv = new ServerSocket(80);
>>>>   Socket s = srv.accept();
>>>>   InputStream i = s.getInputStream();
>>>>   byte[] buf = new byte[1024 * 8];
>>>>   while (true) {
>>>>    i.read(buf);
>>>>   }
>>>>
>>>> The Second implementation using MINA 1.1.7 (which so simple that I can
>>>> paste
>>>> it here):
>>>>
>>>> First the Main class:
>>>>
>>>> package test;
>>>>
>>>> import java.net.InetSocketAddress;
>>>>
>>>> import org.apache.mina.common.ByteBuffer;
>>>> import org.apache.mina.common.IoAcceptor;
>>>> import org.apache.mina.common.SimpleByteBufferAllocator;
>>>> import org.apache.mina.transport.socket.nio.SocketAcceptor;
>>>>
>>>> public class Main {
>>>>   public static void main(String[] args) throws Exception {
>>>>       // The following two lines don't help
>>>>    ByteBuffer.setUseDirectBuffers(false);
>>>>       ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
>>>>
>>>>       IoAcceptor acceptor = new SocketAcceptor();
>>>>       acceptor.bind(new InetSocketAddress(80), new MyHandler());
>>>>   }
>>>> }
>>>>
>>>>
>>>> And the IoHandler:
>>>>
>>>>
>>>> package test;
>>>>
>>>> import org.apache.mina.common.IoHandlerAdapter;
>>>>
>>>> public class MyHandler extends IoHandlerAdapter {
>>>>
>>>> }
>>>>
>>>>
>>>> I wrote a simple client that connects to the server and pumps continuous
>>>> data.
>>>> Both client and server run on Amazon's EC2 on Debian Linux instances
>>>> (64-bit, Java 1.6). Client is in Europe and server in USA.
>>>>
>>>>
>>>> *The results:*
>>>> Simple Java implementation - 5 Mbps
>>>> MINA implementation - 750 Kbps
>>>>
>>>> Tried removing the setUseDirectBuffers lines; tried a simpler threading
>>>> model by running the IoHandler on the IoProcessor threads... nothing
>>>> helps
>>>> -
>>>> MINA is capped at 750 Kbps.
>>>> What is going on here?!
>>>>
>>>>
>>>>
>>>>
>>>>
>>> --
>>> --
>>> cordialement, regards,
>>> Emmanuel L├ęcharny
>>> www.iktek.com
>>> directory.apache.org
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
> --
> --
> cordialement, regards,
> Emmanuel L├ęcharny
> www.iktek.com
> directory.apache.org
>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message