Uploaded image for project: 'MINA'
  1. MINA
  2. DIRMINA-509

DatagramConnector.connect() is slow compared to connect() with java.net.DatagramSocket

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.1.6, 2.0.0-M1
    • None
    • Transport
    • None

    Description

      I benchmarked Mina 2.0's NioDatagramConnector vs java.net.DatagramSocket on a Linux 2.6 kernel.

      Mina 2.0 NioDatagramConnector, connect(), future.addListener(), session.close()
      100,000 iterations
      ~20 seconds
      ~5,000 per second

      java.net.DatagramSocket, connect(), disconnect(), close()
      100,000 iterations
      ~2-3 seconds
      ~30,000 to 50,000 per second

      I believe the basic problem is that AbstractPollingIoConnector/AbstractPollingIoProcessor assumes that connecting a UDP datagram socket should be a scheduled operation. For TCP, this makes a lot of sense as connect() should be an asynchronous operation.

      But for UDP, where connect() only performs kernel resource reservation, it makes more sense I think to connect immediately and return an IoFuture with the IoSession already connected and ready. Looking at the code, I see that the connect() call is indeed made on the same call stack, but ConnectFuture.setSession() is executed by the AbstractPollingIoProcessor worker thread after the IoSession has been properly registered.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            wilsynet Wilson Yeung

            Dates

              Created:
              Updated:

              Slack

                Issue deployment