接続とワーカーの次の組み合わせを試しました
- 4 ワーカー - 16 接続 - トラフィックは 4 つの接続でのみ流れ、12 の接続ではトラフィックは流れません
- 8 ワーカー - 16 接続 - 8 つの接続でのみトラフィックが流れ、8 つの接続でトラフィックが流れない
- 0 ワーカー (Netty によって決定される最適なワーカー数を残しています) - 8 接続 - 4 つの接続でのみトラフィックが流れ、4 つの接続でトラフィックは流れません
NioServerSocket を使用した私のソフトウェア構成 Netty 3.2.6
パイプライン スニペット
public void startServer(int numWorkerThreads, String openFlowHost, int openFlowPort, OFChannelHandler ofchan){
this.workerThreads = numWorkerThreads;
try {
final ServerBootstrap bootstrap = createServerBootStrap();
bootstrap.setOption("reuseAddr", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.receiveBufferSize", EnhancedController.RECEIVE_BUFFER_SIZE);
bootstrap.setOption("child.sendBufferSize", EnhancedController.SEND_BUFFER_SIZE);
// better to have an receive buffer predictor
//bootstrap.setOption("receiveBufferSizePredictorFactory",
// new AdaptiveReceiveBufferSizePredictorFactory());
//if the server is sending 1000 messages per sec, optimum write buffer water marks will
//prevent unnecessary throttling, Check NioSocketChannelConfig doc
//bootstrap.setOption("writeBufferLowWaterMark", WRITE_BUFFER_LOW_WATERMARK);
//bootstrap.setOption("writeBufferHighWaterMark", WRITE_BUFFER_HIGH_WATERMARK);
// TODO: IMPORTANT: If the threadpool is supplied as null, ExecutionHandler would
// not be present in pipeline. If the load increases and ordering is required ,
// use OrderedMemoryAwareThreadPoolExecutor as argument instead of null
execHandler = new OrderedMemoryAwareThreadPoolExecutor(
OMATPE_CORE_POOL_SIZE,
OMATPE_PER_CHANNEL_SIZE,
OMATPE_POOL_WIDE_SIZE,
OMATPE_THREAD_KEEP_ALIVE_IN_MILLISECONDS,
TimeUnit.MILLISECONDS);
ChannelPipelineFactory pfact =
new OpenflowPipelineFactory(controller, execHandler);
bootstrap.setPipelineFactory(pfact);
InetSocketAddress sa =
(openFlowHost == null)
? new InetSocketAddress(openFlowPort)
: new InetSocketAddress(openFlowHost, openFlowPort);
final ChannelGroup cg = new DefaultChannelGroup();
cg.add(bootstrap.bind(sa));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private ServerBootstrap createServerBootStrap() {
if (workerThreads == 0) {
return new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
} else {
return new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool(), workerThreads));
}
}
ハードウェア構成 クアッド コア Intel i5 vPro と Ubuntu 11.x
明らかな何かが欠けている場合はお知らせください