[ https://issues.apache.org/jira/browse/DIRMINA-301?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Julien Vermillard updated DIRMINA-301: -------------------------------------- Fix Version/s: 3.0.0-M1 > New Multi threaded SocketIOProcessor to improve fairness of socket > reads/writes > ------------------------------------------------------------------------------- > > Key: DIRMINA-301 > URL: https://issues.apache.org/jira/browse/DIRMINA-301 > Project: MINA > Issue Type: Improvement > Components: Transport > Affects Versions: 1.0.0 > Environment: Problem on all platforms, example test ran on a 8 Way > Opteron > Reporter: Martin Ritchie > Fix For: 3.0.0-M1 > > Attachments: JIRA-301-Release-4.zip, Mina Multi Thread > SocketIOProcessor(MinaHead).zip, Mina Multi Thread SocketIOProcessor.zip, > Mina Multi Thread SocketIOProcessor.zip, > MultiThreadSocketIOProcessor-java-1.0-proposal-R4.1-src.zip > > > The current SocketIOProcessor uses a single thread to do both reads and > socket flushes. During some testing of Apache Qpid (A messaging broker) which > uses mina as a transport we ran in to two problems. > The first was the client that produces lots of data failed with an > OutOfMemoryException, as mentioned in DIRMINA-206. > The second is that under constant load the broker cannot read and write from > the same socket at the same time. I have created a MultiThreaded > SocketIOProcessor that allows reads and writes to occur simultaneously. On > low core boxes the performance is similar to the existing SocketIOProcessor. > However, on higher core boxes the Multi threaded box can be more than twice > the speed. > The attached zip file is an attempt to resolve the second. > To run the test: > run "ant " to build everything. > The memory requirements for each process are shown in parenthesis, these were > just the largest numbers shown in top as the processes ran. > Then > "ant acceptor_mina"(1.2G) or "ant acceptor_multi"(250M) to run the listener > process. > This process simply sends the received message back down the same socket. > Then run the corresponding writer > "ant writer_mina"(560M) or "ant writer_multi"(540M) > The results from each of the writers I ran on an 8way Opteron are shown below. > The out of memory issue on the writer can be demonstrated buy running: > "ant writer_mina_mem" or "ant writer_multi_mem" > The increased throughput on the Multi Threaded SocketIOProcessor should allow > it survive the low memory setting. > ~/dev/TempProjects/mina-2006-11-02-1056/Mina Multi Thread SocketIOProcessor$ > ant writer_mina > Buildfile: build.xml > writer_mina: > [java] main 2006-11-02 10:57:36,932 INFO > [apache.mina.SocketIOTest.WriterTest] Starting 2k test > [java] main 2006-11-02 10:57:36,933 WARN > [apache.mina.SocketIOTest.WriterTest] Using MINA NIO > [java] main 2006-11-02 10:57:36,999 INFO > [apache.mina.SocketIOTest.WriterTest] Attempting connection to > localhost/127.0.0.1:9999 > [java] main 2006-11-02 10:57:37,035 INFO > [apache.mina.SocketIOTest.WriterTest] Connection completed > [java] Thread-2 2006-11-02 10:57:37,038 INFO > [apache.mina.SocketIOTest.WriterTest] Starting to send 200000 buffers of 2048B > [java] Thread-2 2006-11-02 10:57:43,409 INFO > [apache.mina.SocketIOTest.WriterTest] All buffers sent; waiting for receipt > from server > [java] Thread-2 2006-11-02 10:57:58,652 INFO > [apache.mina.SocketIOTest.WriterTest] Completed > [java] Thread-2 2006-11-02 10:57:58,652 INFO > [apache.mina.SocketIOTest.WriterTest] Total time waiting for server after > last write: 15243 > [java] Thread-2 2006-11-02 10:57:58,652 INFO > [apache.mina.SocketIOTest.WriterTest] Total time: 21613 > [java] Thread-2 2006-11-02 10:57:58,652 INFO > [apache.mina.SocketIOTest.WriterTest] MB per second: 18951 > [java] Thread-2 2006-11-02 10:57:58,654 INFO > [apache.mina.SocketIOTest.WriterTest] Average chunk time: 1.0000000000011369ms > [java] Thread-2 2006-11-02 10:57:58,654 INFO > [apache.mina.SocketIOTest.WriterTest] Maximum WriteRequestQueue size: 171836 > [java] Thread-2 2006-11-02 10:57:58,654 INFO > [apache.mina.SocketIOTest.WriterTest] Closing session > ~/dev/TempProjects/mina-2006-11-02-1056/Mina Multi Thread SocketIOProcessor$ > ant writer_multi > Buildfile: build.xml > writer_multi: > [java] main 2006-11-02 10:58:10,544 INFO > [apache.mina.SocketIOTest.WriterTest] Starting 2k test > [java] main 2006-11-02 10:58:10,546 WARN > [apache.mina.SocketIOTest.WriterTest] Using MultiThread NIO > [java] main 2006-11-02 10:58:10,620 INFO > [apache.mina.SocketIOTest.WriterTest] Attempting connection to > localhost/127.0.0.1:9999 > [java] main 2006-11-02 10:58:10,675 INFO > [apache.mina.SocketIOTest.WriterTest] Connection completed > [java] Thread-3 2006-11-02 10:58:10,678 INFO > [apache.mina.SocketIOTest.WriterTest] Starting to send 200000 buffers of 2048B > [java] Thread-3 2006-11-02 10:58:15,464 INFO > [apache.mina.SocketIOTest.WriterTest] All buffers sent; waiting for receipt > from server > [java] Thread-3 2006-11-02 10:58:20,214 INFO > [apache.mina.SocketIOTest.WriterTest] Completed > [java] Thread-3 2006-11-02 10:58:20,215 INFO > [apache.mina.SocketIOTest.WriterTest] Total time waiting for server after > last write: 4750 > [java] Thread-3 2006-11-02 10:58:20,215 INFO > [apache.mina.SocketIOTest.WriterTest] Total time: 9537 > [java] Thread-3 2006-11-02 10:58:20,215 INFO > [apache.mina.SocketIOTest.WriterTest] MB per second: 42948 > [java] Thread-3 2006-11-02 10:58:20,216 INFO > [apache.mina.SocketIOTest.WriterTest] Average chunk time: 1.0ms > [java] Thread-3 2006-11-02 10:58:20,216 INFO > [apache.mina.SocketIOTest.WriterTest] Maximum WriteRequestQueue size: 159054 > [java] Thread-3 2006-11-02 10:58:20,216 INFO > [apache.mina.SocketIOTest.WriterTest] Closing session -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.