Thursday November 03, 2005
To poll or epoll: that is the question:
One of the updates in build 59 of Mustang (JavaTM SE 6) is that the New I/O Selector implementation will use the epoll event notification facility when running on the Linux 2.6 kernel. The epoll event mechanism is much more scalable than the traditional poll when there are thousands of file descriptors in the interest set. The work done by poll depends on the size of the interest set whereas with epoll (like Solaris /dev/poll) the registration of interest is separated from the retrieval of the events. A lot has been written on the topic. The C10K problem has been documenting I/O frameworks and strategies for several years. One relatively recent paper on Comparing and Evaluating epoll, select, and poll Event Mechanisms makes it clear the workloads where epoll performs a lot better than poll.
This isn't the first NIO Selector implementation to use epoll. The Blackdown folks added epoll support in their 1.4.x release. On Solaris, the /dev/poll based Selector has been default on Solaris 8 (and newer) since the original implementation of New I/O in J2SETM 1.4.
So if you are running on a Linux 2.6 system with an application that handles lots of simultaneous connections you might want to give b59 a test-run. The weekly builds have been appearing like clockwork on the binary snapshot release site so b59 should be available tomorrow (November 4). Will you see a difference? It depends on the workload. If you've registered lots of SelectableChannels with a Selector and you notice a lot of time spent in the kernel due to poll then you should see a difference. If you are doing test runs and you want to do a direct comparison with poll then you can set the java.nio.channels.spi.SelectorProvider system property to sun.nio.ch.PollSelectorProvider. This will select the poll-based Selector that will continue to be the default on 2.4 kernels. There is an epoll patch for 2.4 kernels but at this time anyway, the NIO implementation doesn't attempt to detect this.
Posted at 04:19AM Nov 03, 2005 by alanb in Java | Comments[10]
Posted by anandp on November 05, 2005 at 09:06 AM PST #
Posted by alanb on November 06, 2005 at 10:57 AM PST #
Posted by Alex Lloyd on November 15, 2005 at 09:50 PM PST #
Posted by Arnold Burns on November 17, 2005 at 05:35 PM PST #
Posted by alanb on November 22, 2005 at 02:01 PM PST #
Posted by Hank on September 16, 2006 at 12:46 AM PDT #
Posted by Eric on September 26, 2006 at 03:02 PM PDT #
Eric - the epoll based SelectorProvider that has been putback for the 5.0 update is identical to jdk6. It's hard to say what issue you are seeing - one possibility is 6403933 that arises when the interset set is 0 and a connection is abruptly terminated.
Hank - bug fixes and other changes are batched into update releases and there isn't patches available for specific changes.
Posted by 192.18.1.4 on September 27, 2006 at 03:08 AM PDT #
Posted by Paul on October 03, 2006 at 05:18 AM PDT #
Posted by 192.18.1.4 on October 03, 2006 at 05:27 AM PDT #