comparison src/event/quic/ngx_event_quic_ack.c @ 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 f3331deed357
children da112e7f8de6
comparison
equal deleted inserted replaced
8883:404de224517e 8884:1798acc01970
221 qc = ngx_quic_get_connection(c); 221 qc = ngx_quic_get_connection(c);
222 222
223 st->max_pn = NGX_TIMER_INFINITE; 223 st->max_pn = NGX_TIMER_INFINITE;
224 found = 0; 224 found = 0;
225 225
226 q = ngx_queue_last(&ctx->sent); 226 q = ngx_queue_head(&ctx->sent);
227 227
228 while (q != ngx_queue_sentinel(&ctx->sent)) { 228 while (q != ngx_queue_sentinel(&ctx->sent)) {
229 229
230 f = ngx_queue_data(q, ngx_quic_frame_t, queue); 230 f = ngx_queue_data(q, ngx_quic_frame_t, queue);
231 q = ngx_queue_prev(q); 231 q = ngx_queue_next(q);
232 232
233 if (f->pnum >= min && f->pnum <= max) { 233 if (f->pnum > max) {
234 break;
235 }
236
237 if (f->pnum >= min) {
234 ngx_quic_congestion_ack(c, f); 238 ngx_quic_congestion_ack(c, f);
235 239
236 switch (f->type) { 240 switch (f->type) {
237 case NGX_QUIC_FT_ACK: 241 case NGX_QUIC_FT_ACK:
238 case NGX_QUIC_FT_ACK_ECN: 242 case NGX_QUIC_FT_ACK_ECN: