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

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

    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

          People

            Unassigned Unassigned
            wilsynet Wilson Yeung
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: