making nio use kevent/kqueue

Greg Lewis glewis at eyesbeyond.com
Tue Aug 28 08:11:22 PDT 2007


G'day Nick,

On Thu, Aug 23, 2007 at 12:12:55PM -0700, Nick Johnson wrote:
> Looking at it a bit more, it looks like the "right" thing to do is to 
> create a KeventArrayWrapper, possibly based on the EPollArrayWrapper.c so 
> that multiple ready FDs can be returned at one time.
> 
> That means creating a KeventArrayWrapper.java based on 
> j2se/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java as well as a 
> KeventSelectorImpl.java based on EPollSelectorImpl.java and 
> KeventSelectorProvider.java based on EPollSelectorProvider.java.
> 
> It also means modifying 
> src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java to select the 
> KeventSelectorProvider and possibly tweaking some makefiles to ensure that 
> everything gets built, including:
> 
> make/java/nio/Makefile
> make/java/nio/mapfile*  (do we end up using mapfile-linux or 
> mapfile-solaris?)

Ummm mapfile-bsd :).

FWIW, I think this would be a great addition to the BSD port of the JDK.
I'd really encourage you to give it a try.  If you get something going
to the point where you want to place it under version control then
please feel free to talk to me about access to the porting team's repo.

> On Thu, 23 Aug 2007, Nick Johnson wrote:
> 
> > I think there could be a considerable performance gain if java.nio were 
> > tweaked to use kevent/kqueue(2) as opposed to poll(2).
> > 
> > It looks like the files that would need to be touched for this are:
> > 
> > j2se/src/solaris/native/sun/nio/ch/
> > 	DevPollArrayWrapper.c  (not sure about this one actually since 
> > FreeBSD doesn't use /dev/poll)
> > 	PollArrayWrapper.c
> > 	SocketChannelImpl.c
> > 
> > Does that sound about right?  I see select(2) and poll(2) used in other 
> > places as well, though outside of nio where they're likely to show the 
> > greatest benefit.
> > 
> > Are there any caveats or "gotchas" I should be aware if should I decide to 
> > take some free time to try to come up with a kevent patch for nio?
> > 
> > Also, is there a quicker way to build a JVM when just changing a file or 
> > two like this?  It would be lousy to have to wait 2 hours to build after 
> > every minor change...

The build process is mostly smart enough to just rebuild the affected
files.  You might want to convince it that you don't want to build a
release image every time though (I forget what controls this).  If you
wanted to you could also set up the appropriate environment variables
and just build in the specific "make" directory for your changes.

-- 
Greg Lewis                          Email   : glewis at eyesbeyond.com
Eyes Beyond                         Web     : http://www.eyesbeyond.com
Information Technology              FreeBSD : glewis at FreeBSD.org


More information about the freebsd-java mailing list