Mercurial > hg > nginx
view src/event/quic/ngx_event_quic_migration.h @ 9138:a90f79792b5d
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.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Thu, 27 Jul 2023 16:37:17 +0400 |
parents | fab36e4abf83 |
children | bba136612fe4 |
line wrap: on
line source
/* * Copyright (C) Nginx, Inc. */ #ifndef _NGX_EVENT_QUIC_MIGRATION_H_INCLUDED_ #define _NGX_EVENT_QUIC_MIGRATION_H_INCLUDED_ #include <ngx_config.h> #include <ngx_core.h> #define NGX_QUIC_PATH_RETRIES 3 #define NGX_QUIC_PATH_PROBE 0 #define NGX_QUIC_PATH_ACTIVE 1 #define NGX_QUIC_PATH_BACKUP 2 #define ngx_quic_path_dbg(c, msg, path) \ ngx_log_debug7(NGX_LOG_DEBUG_EVENT, c->log, 0, \ "quic path seq:%uL %s sent:%O recvd:%O state:%s%s%s", \ path->seqnum, msg, path->sent, path->received, \ path->limited ? "L" : "", path->validated ? "V": "N", \ path->validating ? "R": ""); ngx_int_t ngx_quic_handle_path_challenge_frame(ngx_connection_t *c, ngx_quic_header_t *pkt, ngx_quic_path_challenge_frame_t *f); ngx_int_t ngx_quic_handle_path_response_frame(ngx_connection_t *c, ngx_quic_path_challenge_frame_t *f); ngx_quic_path_t *ngx_quic_new_path(ngx_connection_t *c, struct sockaddr *sockaddr, socklen_t socklen, ngx_quic_client_id_t *cid); ngx_int_t ngx_quic_free_path(ngx_connection_t *c, ngx_quic_path_t *path); ngx_int_t ngx_quic_set_path(ngx_connection_t *c, ngx_quic_header_t *pkt); ngx_int_t ngx_quic_handle_migration(ngx_connection_t *c, ngx_quic_header_t *pkt); void ngx_quic_path_validation_handler(ngx_event_t *ev); #endif /* _NGX_EVENT_QUIC_MIGRATION_H_INCLUDED_ */