Streaming: Reduce immediate ack delay

This commit is contained in:
zzz
2021-07-07 08:31:17 -04:00
parent 9c74cafd92
commit 373924e650

View File

@@ -31,7 +31,7 @@ class ConnectionPacketHandler {
public static final int MAX_SLOW_START_WINDOW = 64; public static final int MAX_SLOW_START_WINDOW = 64;
// see tickets 1939 and 2584 // see tickets 1939 and 2584
private static final int IMMEDIATE_ACK_DELAY = 150; private static final int IMMEDIATE_ACK_DELAY = 120;
public ConnectionPacketHandler(I2PAppContext context) { public ConnectionPacketHandler(I2PAppContext context) {
_context = context; _context = context;
@@ -128,7 +128,8 @@ class ConnectionPacketHandler {
con.packetReceived(); con.packetReceived();
boolean choke = false; boolean choke = false;
if (packet.isFlagSet(Packet.FLAG_DELAY_REQUESTED)) { boolean delayReq = packet.isFlagSet(Packet.FLAG_DELAY_REQUESTED);
if (delayReq) {
if (packet.getOptionalDelay() >= Packet.MIN_DELAY_CHOKE) { if (packet.getOptionalDelay() >= Packet.MIN_DELAY_CHOKE) {
// requested choke // requested choke
choke = true; choke = true;
@@ -217,19 +218,19 @@ class ConnectionPacketHandler {
con.incrementUnackedPacketsReceived(); con.incrementUnackedPacketsReceived();
con.incrementBytesReceived(packet.getPayloadSize()); con.incrementBytesReceived(packet.getPayloadSize());
if (packet.isFlagSet(Packet.FLAG_DELAY_REQUESTED) && (packet.getOptionalDelay() <= 0) ) { if (delayReq && packet.getOptionalDelay() <= 0) {
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("Scheduling immediate ack for " + packet); _log.debug("Scheduling immediate ack for " + packet);
//con.setNextSendTime(_context.clock().now() + con.getOptions().getSendAckDelay()); //con.setNextSendTime(_context.clock().now() + con.getOptions().getSendAckDelay());
// honor request "almost" immediately // honor request "almost" immediately
// TODO the 250 below _may_ be a big limiter in how fast local "loopback" connections // Note: the delay below _may_ be a big limiter in how fast local "loopback" connections
// can go, however if it goes too fast then we start choking which causes // can go, however if it goes too fast then we start choking which causes
// frequent stalls anyway. // frequent stalls anyway.
// see tickets 1939 and 2584 // see tickets 1939 and 2584
con.setNextSendTime(_context.clock().now() + IMMEDIATE_ACK_DELAY); con.setNextSendTime(_context.clock().now() + Math.min(IMMEDIATE_ACK_DELAY, con.getOptions().getRTT() / 8));
} else { } else {
int delay; int delay;
if (packet.isFlagSet(Packet.FLAG_DELAY_REQUESTED)) // delayed ACK requested if (delayReq) // delayed ACK requested
delay = packet.getOptionalDelay(); delay = packet.getOptionalDelay();
else else
delay = con.getOptions().getSendAckDelay(); delay = con.getOptions().getSendAckDelay();