On 11/2/06, Robert Greig <[EMAIL PROTECTED]> wrote:
On 02/11/06, lneves <[EMAIL PROTECTED]> wrote:
> I tried to test your code, but DIRMINA-290 introduced API changes and your
> SocketIOProcessor does not compile against Mina-HEAD.
Ah, we'll update the code tomorrow to work with trunk.
> - can you please tell us how does this "Multi threaded SocketIOProcessor"
relates to
> the "ReadWriteThreadModel" that Robert Greig (also from the QPid project?)
introduced
> some time ago?
They are orthogonal. The ReadWriteThreadModel changes the thread pool
used in the filter so that writes are also threaded. The
SocketIoProcessor change introduces two threads per SocketIoProcessor
to combat the starvation problems we had seen.
We did try keeping a single thread per socketIoProcessor and just be
cleverer to avoid starvation but that caused more problems than it
solved.
Did you try having multiple SocketIoProcessors for the acceptor?
IIRC that should provide more concurrency to your application, and
should alleviate the starvation problem.
Anyways... I did try your test application on a 2 way Opteron and
found performance improvements with the Multi-model. But the writer
still needed more memory than what was specified in build.xml
My results -
writer_mina:
[java] 1 [main] INFO org.apache.mina.SocketIOTest.WriterTest -
Starting 2k test
[java] 2 [main] WARN org.apache.mina.SocketIOTest.WriterTest -
Using MINA NIO
[java] 70 [main] INFO org.apache.mina.SocketIOTest.WriterTest -
Attempting connection to localhost/127.0.0.1:9999
[java] 132 [main] INFO org.apache.mina.SocketIOTest.WriterTest -
Connection completed
[java] 135 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - Starting to send 200000
buffers of 2048B
[java] 6842 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - All buffers sent; waiting
for receipt from server
[java] 16056 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - Completed
[java] 16056 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - Total time waiting for
server after last write: 9214
[java] 16056 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - Total time: 15921
[java] 16056 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - MB per second: 25727
[java] 16058 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - Average chunk time:
1.0000000298023348ms
[java] 16058 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - Maximum WriteRequestQueue
size: 179856
[java] 16058 [Thread-2] INFO
org.apache.mina.SocketIOTest.WriterTest - Closing session
writer_multi:
[java] 1 [main] INFO org.apache.mina.SocketIOTest.WriterTest -
Starting 2k test
[java] 1 [main] WARN org.apache.mina.SocketIOTest.WriterTest -
Using MultiThread NIO
[java] 60 [main] INFO org.apache.mina.SocketIOTest.WriterTest -
Attempting connection to localhost/127.0.0.1:9999
[java] 145 [main] INFO org.apache.mina.SocketIOTest.WriterTest -
Connection completed
[java] 147 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - Starting to send 200000
buffers of 2048B
[java] 7280 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - All buffers sent; waiting
for receipt from server
[java] 15567 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - Completed
[java] 15567 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - Total time waiting for
server after last write: 8287
[java] 15567 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - Total time: 15419
[java] 15567 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - MB per second: 26564
[java] 15568 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - Average chunk time: 1.0ms
[java] 15569 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - Maximum WriteRequestQueue
size: 177347
[java] 15569 [Thread-3] INFO
org.apache.mina.SocketIOTest.WriterTest - Closing session
writer-mina was run against acceptor-mina. writer-multi was run
against acceptor-multi.
This output is from the second run - I didn't count results of the
first run to allow sufficient JVM warmup.
I'll start another thread to describe problems I've found during load
testing of my app.
Regards,
Vinod.