netty: Swap to UniformStreamByteDistributor (#11954)

This commit is contained in:
MV Shiva 2025-03-11 22:39:54 +05:30 committed by GitHub
parent 2191557582
commit 2f52a00364
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 6 deletions

View File

@ -50,6 +50,7 @@ abstract class AbstractNettyHandler extends GrpcHttp2ConnectionHandler {
private final Ticker ticker; private final Ticker ticker;
private static final long BDP_MEASUREMENT_PING = 1234; private static final long BDP_MEASUREMENT_PING = 1234;
protected static final int MIN_ALLOCATED_CHUNK = 16 * 1024;
AbstractNettyHandler( AbstractNettyHandler(
ChannelPromise channelUnused, ChannelPromise channelUnused,

View File

@ -78,7 +78,7 @@ import io.netty.handler.codec.http2.Http2Settings;
import io.netty.handler.codec.http2.Http2Stream; import io.netty.handler.codec.http2.Http2Stream;
import io.netty.handler.codec.http2.Http2StreamVisitor; import io.netty.handler.codec.http2.Http2StreamVisitor;
import io.netty.handler.codec.http2.StreamBufferingEncoder; import io.netty.handler.codec.http2.StreamBufferingEncoder;
import io.netty.handler.codec.http2.WeightedFairQueueByteDistributor; import io.netty.handler.codec.http2.UniformStreamByteDistributor;
import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LogLevel;
import io.perfmark.PerfMark; import io.perfmark.PerfMark;
import io.perfmark.Tag; import io.perfmark.Tag;
@ -169,8 +169,8 @@ class NettyClientHandler extends AbstractNettyHandler {
Http2HeadersEncoder.NEVER_SENSITIVE, false, 16, Integer.MAX_VALUE); Http2HeadersEncoder.NEVER_SENSITIVE, false, 16, Integer.MAX_VALUE);
Http2FrameWriter frameWriter = new DefaultHttp2FrameWriter(encoder); Http2FrameWriter frameWriter = new DefaultHttp2FrameWriter(encoder);
Http2Connection connection = new DefaultHttp2Connection(false); Http2Connection connection = new DefaultHttp2Connection(false);
WeightedFairQueueByteDistributor dist = new WeightedFairQueueByteDistributor(connection); UniformStreamByteDistributor dist = new UniformStreamByteDistributor(connection);
dist.allocationQuantum(16 * 1024); // Make benchmarks fast again. dist.minAllocationChunk(MIN_ALLOCATED_CHUNK); // Increased for benchmarks performance.
DefaultHttp2RemoteFlowController controller = DefaultHttp2RemoteFlowController controller =
new DefaultHttp2RemoteFlowController(connection, dist); new DefaultHttp2RemoteFlowController(connection, dist);
connection.remote().flowController(controller); connection.remote().flowController(controller);

View File

@ -87,7 +87,7 @@ import io.netty.handler.codec.http2.Http2OutboundFrameLogger;
import io.netty.handler.codec.http2.Http2Settings; import io.netty.handler.codec.http2.Http2Settings;
import io.netty.handler.codec.http2.Http2Stream; import io.netty.handler.codec.http2.Http2Stream;
import io.netty.handler.codec.http2.Http2StreamVisitor; import io.netty.handler.codec.http2.Http2StreamVisitor;
import io.netty.handler.codec.http2.WeightedFairQueueByteDistributor; import io.netty.handler.codec.http2.UniformStreamByteDistributor;
import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LogLevel;
import io.netty.util.AsciiString; import io.netty.util.AsciiString;
import io.netty.util.ReferenceCountUtil; import io.netty.util.ReferenceCountUtil;
@ -243,8 +243,8 @@ class NettyServerHandler extends AbstractNettyHandler {
maxMessageSize); maxMessageSize);
final Http2Connection connection = new DefaultHttp2Connection(true); final Http2Connection connection = new DefaultHttp2Connection(true);
WeightedFairQueueByteDistributor dist = new WeightedFairQueueByteDistributor(connection); UniformStreamByteDistributor dist = new UniformStreamByteDistributor(connection);
dist.allocationQuantum(16 * 1024); // Make benchmarks fast again. dist.minAllocationChunk(MIN_ALLOCATED_CHUNK); // Increased for benchmarks performance.
DefaultHttp2RemoteFlowController controller = DefaultHttp2RemoteFlowController controller =
new DefaultHttp2RemoteFlowController(connection, dist); new DefaultHttp2RemoteFlowController(connection, dist);
connection.remote().flowController(controller); connection.remote().flowController(controller);