changeset 8884:1798acc01970 quic

QUIC: optimized ack range processing. The sent queue is sorted by packet number. It is possible to avoid traversing full queue while handling ack ranges. It makes sense to start traversing from the queue head (i.e. check oldest packets first).
author Vladimir Homutov <vl@nginx.com>
date Fri, 15 Oct 2021 12:26:42 +0300
parents 404de224517e
children da112e7f8de6
files src/event/quic/ngx_event_quic_ack.c
diffstat 1 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic_ack.c
+++ b/src/event/quic/ngx_event_quic_ack.c
@@ -223,14 +223,18 @@ ngx_quic_handle_ack_frame_range(ngx_conn
     st->max_pn = NGX_TIMER_INFINITE;
     found = 0;
 
-    q = ngx_queue_last(&ctx->sent);
+    q = ngx_queue_head(&ctx->sent);
 
     while (q != ngx_queue_sentinel(&ctx->sent)) {
 
         f = ngx_queue_data(q, ngx_quic_frame_t, queue);
-        q = ngx_queue_prev(q);
+        q = ngx_queue_next(q);
 
-        if (f->pnum >= min && f->pnum <= max) {
+        if (f->pnum > max) {
+            break;
+        }
+
+        if (f->pnum >= min) {
             ngx_quic_congestion_ack(c, f);
 
             switch (f->type) {