> On 27 Jul 2023, at 16:42, Roman Arutyunyan <a...@nginx.com> wrote: > > # HG changeset patch > # User Roman Arutyunyan <a...@nginx.com> > # Date 1690461437 -14400 > # Thu Jul 27 16:37:17 2023 +0400 > # Node ID 2fd16fc76920ef0b8ea2fa64858934e38c4477c5 > # Parent 904c99bede1770d92566b56939c5b6ec85f05b55 > QUIC: optimized ACK delay. > > Previously ACK was not generated if max_ack_delay was not yet expired and the > number of unacknowledged ack-eliciting packets was less than two, as allowed > by > RFC 9000 13.2.1-13.2.2. However this only makes sense to avoid sending > ACK-only > packets, as explained by the RFC: > > On the other hand, reducing the frequency of packets that carry only > acknowledgments reduces packet transmission and processing cost at both > endpoints. > > Now ACK is delayed only if output frame queue is empty. Otherwise ACK is sent > immediately, which significantly improves QUIC performance with certain tests. > > diff --git a/src/event/quic/ngx_event_quic_ack.c > b/src/event/quic/ngx_event_quic_ack.c > --- a/src/event/quic/ngx_event_quic_ack.c > +++ b/src/event/quic/ngx_event_quic_ack.c > @@ -1171,7 +1171,8 @@ ngx_quic_generate_ack(ngx_connection_t * > delay = ngx_current_msec - ctx->ack_delay_start; > qc = ngx_quic_get_connection(c); > > - if (ctx->send_ack < NGX_QUIC_MAX_ACK_GAP > + if (ngx_queue_empty(&ctx->frames) > + && ctx->send_ack < NGX_QUIC_MAX_ACK_GAP > && delay < qc->tp.max_ack_delay) > { > if (!qc->push.timer_set && !qc->closing) {
Looks good. -- Sergey Kandaurov _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel