diff --git a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java index 7c875efb0d..c3d3de9b4c 100644 --- a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java +++ b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java @@ -16,7 +16,11 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; +import io.netty.channel.ServerChannel; import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.epoll.EpollServerSocketChannel; +import io.netty.channel.epoll.EpollSocketChannel; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; @@ -40,9 +44,10 @@ public class NettyMessagingService implements MessagingService { private final int port; private final Endpoint localEp; - private final EventLoopGroup bossGroup = new NioEventLoopGroup(); + private EventLoopGroup bossGroup; private EventLoopGroup workerGroup; - private Class channelClass; + private Class clientChannelClass; + private Class serverChannelClass; private final ConcurrentMap handlers = new ConcurrentHashMap<>(); private final Cache responseFutures = CacheBuilder.newBuilder() .maximumSize(100000) @@ -55,8 +60,17 @@ public class NettyMessagingService implements MessagingService { // TODO: make this configurable. private void initEventLoopGroup() { - workerGroup = new NioEventLoopGroup(); - channelClass = NioSocketChannel.class; + try { + bossGroup = new EpollEventLoopGroup(); + workerGroup = new EpollEventLoopGroup(); + clientChannelClass = EpollSocketChannel.class; + serverChannelClass = EpollServerSocketChannel.class; + } catch (Throwable th) { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + serverChannelClass = NioServerSocketChannel.class; + clientChannelClass = NioSocketChannel.class; + } } public NettyMessagingService() { @@ -150,7 +164,7 @@ public class NettyMessagingService implements MessagingService { // TODO: Need JVM options to configure PooledByteBufAllocator. b.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT); b.group(bossGroup, workerGroup) - .channel(NioServerSocketChannel.class) + .channel(serverChannelClass) .childHandler(new OnosCommunicationChannelInitializer()) .option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true); @@ -181,7 +195,7 @@ public class NettyMessagingService implements MessagingService { bootstrap.group(workerGroup); // TODO: Make this faster: // http://normanmaurer.me/presentations/2014-facebook-eng-netty/slides.html#37.0 - bootstrap.channel(channelClass); + bootstrap.channel(clientChannelClass); bootstrap.option(ChannelOption.SO_KEEPALIVE, true); bootstrap.handler(new OnosCommunicationChannelInitializer()); // Start the client.