﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	uname	nginx_version
2505	A question about the way of rttvar calculation in QUIC	yangfurong@…		"Hi Nginx folks,

In the ngx_quic_rtt_sample function (ngx_event_quic_ack.c), nginx strictly follows the way defined in RFC9002 to compute smoothed_rtt and rtt_var. However, this may lead to an underestimation of rtt_var, as it uses the updated smoothed_rtt to calculate rtt_var. In some other QUIC implementations (e.g. MSQUIC), they update rtt_var before updating smoothed_rtt, which is also how the Linux Kernel TCP implementation updates rtt_var.

I would like to know if it is better to change the order of updating smoothed_rtt and rtt_var. The modification is as follows. 
---------------
rttvar_sample = ngx_abs((ngx_msec_int_t) (qc->avg_rtt - adjusted_rtt));
qc->avg_rtt += (adjusted_rtt >> 3) - (qc->avg_rtt >> 3);
qc->rttvar += (rttvar_sample >> 2) - (qc->rttvar >> 2);
---------------

Best,
Furong"	enhancement	closed	minor		other	1.23.x	fixed	rttvar, quic		Linux aserver-dev011122072160.na131 4.19.91-012.ali4000.alios7.x86_64 #1 SMP Wed Sep 15 17:27:09 CST 2021 x86_64 x86_64 x86_64 GNU/Linux 	"Tengine version: Tengine/2.0.1 (nginx/1.23.0)
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.1.1h  22 Sep 2020
TLS SNI support enabled
nginx: loaded modules:
nginx:     ngx_core_module (static)
nginx:     ngx_errlog_module (static)
nginx:     ngx_conf_module (static)
nginx:     ngx_openssl_module (static)
nginx:     ngx_regex_module (static)
nginx:     ngx_syslog_module (static)
nginx:     ngx_procs_module (static)
nginx:     ngx_proc_core_module (static)
nginx:     ngx_proc_sl_resend_module (static)
nginx:     ngx_proc_node_status_module (static)
nginx:     ngx_tmd_config_procs_module (static)
nginx:     ngx_events_module (static)
nginx:     ngx_event_core_module (static)
nginx:     ngx_epoll_module (static)
nginx:     ngx_tcp_module (static)
nginx:     ngx_tcp_core_module (static)
nginx:     ngx_tcp_upstream_module (static)
nginx:     ngx_tcp_proxy_module (static)
nginx:     ngx_tcp_websocket_module (static)
nginx:     ngx_tcp_upstream_ip_hash_module (static)
nginx:     ngx_tcp_upstream_busyness_module (static)
nginx:     ngx_tcp_debug_module (static)
nginx:     ngx_tcp_ssl_module (static)
nginx:     ngx_tcp_keyless_module (static)
nginx:     ngx_tcp_lurk_module (static)
nginx:     ngx_limit_tcp_module (static)
nginx:     ngx_quic_module (static)
nginx:     ngx_quic_bpf_module (static)
nginx:     ngx_http_module (static)
nginx:     ngx_http_core_module (static)
nginx:     ngx_http_log_module (static)
nginx:     ngx_http_upstream_module (static)
nginx:     ngx_http_v2_module (static)
nginx:     ngx_http_v2_stat_module (static)
nginx:     ngx_http_v2_proxy_module (static)
nginx:     ngx_http_spdy_module (static)
nginx:     ngx_http_v3_module (static)
nginx:     ngx_http_static_module (static)
nginx:     ngx_http_gzip_static_module (static)
nginx:     ngx_http_dav_module (static)
nginx:     ngx_http_autoindex_module (static)
nginx:     ngx_http_index_module (static)
nginx:     ngx_http_random_index_module (static)
nginx:     ngx_http_mirror_module (static)
nginx:     ngx_http_try_files_module (static)
nginx:     ngx_http_concat_module (static)
nginx:     ngx_http_auth_basic_module (static)
nginx:     ngx_http_access_module (static)
nginx:     ngx_http_limit_conn_module (static)
nginx:     ngx_http_limit_req_module (static)
nginx:     ngx_http_realip_module (static)
nginx:     ngx_http_geo_module (static)
nginx:     ngx_http_map_module (static)
nginx:     ngx_http_split_clients_module (static)
nginx:     ngx_http_referer_module (static)
nginx:     ngx_http_rewrite_module (static)
nginx:     ngx_http_ssl_lurk_module (static)
nginx:     ngx_http_ssl_module (static)
nginx:     ngx_http_proxy_module (static)
nginx:     ngx_http_fastcgi_module (static)
nginx:     ngx_http_scgi_module (static)
nginx:     ngx_http_grpc_module (static)
nginx:     ngx_http_browser_module (static)
nginx:     ngx_http_user_agent_module (static)
nginx:     ngx_http_secure_link_module (static)
nginx:     ngx_http_sysguard_module (static)
nginx:     ngx_http_flv_module (static)
nginx:     ngx_http_upstream_hash_module (static)
nginx:     ngx_http_upstream_ip_hash_module (static)
nginx:     ngx_http_upstream_consistent_hash_module (static)
nginx:     ngx_http_upstream_check_module (static)
nginx:     ngx_http_upstream_least_conn_module (static)
nginx:     ngx_http_upstream_random_module (static)
nginx:     ngx_http_upstream_keepalive_module (static)
nginx:     ngx_http_upstream_zone_module (static)
nginx:     ngx_http_stub_status_module (static)
nginx:     ngx_http_addrs_keepalive_module (static)
nginx:     ngx_http_quic_status_module (static)
nginx:     ngx_http_quic_log_module (static)
nginx:     ngx_http_malloc_stat_module (static)
nginx:     ndk_http_module (static)
nginx:     ngx_http_diamond_module (static)
nginx:     ngx_http_tbpass_module (static)
nginx:     ngx_http_hourglass_module (static)
nginx:     ngx_http_tair_module (static)
nginx:     ngx_http_etair_module (static)
nginx:     ngx_reqstat_module (static)
nginx:     ngx_http_cookie_pass_module (static)
nginx:     ngx_http_referer_acl_module (static)
nginx:     ngx_http_scroll_log_module (static)
nginx:     ngx_http_sl_upstream_module (static)
nginx:     ngx_http_slu_master_slave_module (static)
nginx:     ngx_http_slu_round_robin_module (static)
nginx:     ngx_http_bucket_id_module (static)
nginx:     ngx_http_copy_module (static)
nginx:     ngx_http_eagleeye_module (static)
nginx:     ngx_http_reqstat_module (static)
nginx:     ngx_http_wireless_variable_module (static)
nginx:     ngx_http_p2pqos_module (static)
nginx:     ngx_http_slow_log_module (static)
nginx:     ngx_http_admin_module (static)
nginx:     ngx_http_loop_detect_module (static)
nginx:     ngx_http_req_auth_module (static)
nginx:     ngx_http_cookie_auth_module (static)
nginx:     ngx_http_dynamic_route_module (static)
nginx:     ngx_http_unified_code_module (static)
nginx:     ngx_http_backend_proxy_module (static)
nginx:     ngx_http_backend_module (static)
nginx:     ngx_http_backend_check_module (static)
nginx:     ngx_http_backend_keepalive_module (static)
nginx:     ngx_http_backend_ip_hash_module (static)
nginx:     ngx_http_backend_least_conn_module (static)
nginx:     ngx_http_backend_addrs_keepalive_module (static)
nginx:     ngx_http_backend_consistent_hash_module (static)
nginx:     ngx_http_debug_pool_module (static)
nginx:     ngx_http_debug_conn_module (static)
nginx:     ngx_http_cdn_debug_module (static)
nginx:     ngx_http_xredirect_module (static)
nginx:     ngx_http_slight_ssl_module (static)
nginx:     ngx_http_server_names_module (static)
nginx:     ngx_http_request_monitor_module (static)
nginx:     ngx_http_slab_stat_module (static)
nginx:     ngx_http_limit_rt_module (static)
nginx:     ngx_http_med_module (static)
nginx:     ngx_http_global_traffic_limit_module (static)
nginx:     ngx_http_ssl_proxy_status_module (static)
nginx:     ngx_tcp_upstream_check_status_module (static)
nginx:     ngx_http_limit_speed_module (static)
nginx:     ngx_http_tmd_module (static)
nginx:     ngx_http_proxy_variables_module (static)
nginx:     ngx_http_tbip_module (static)
nginx:     ngx_http_write_filter_module (static)
nginx:     ngx_http_header_filter_module (static)
nginx:     ngx_http_chunked_filter_module (static)
nginx:     ngx_http_v2_filter_module (static)
nginx:     ngx_http_spdy_filter_module (static)
nginx:     ngx_http_v3_filter_module (static)
nginx:     ngx_http_range_header_filter_module (static)
nginx:     ngx_http_gzip_filter_module (static)
nginx:     ngx_http_postpone_filter_module (static)
nginx:     ngx_http_ssi_filter_module (static)
nginx:     ngx_http_charset_filter_module (static)
nginx:     ngx_http_sub_filter_module (static)
nginx:     ngx_http_addition_filter_module (static)
nginx:     ngx_http_footer_filter_module (static)
nginx:     ngx_http_ssl_status_module (static)
nginx:     ngx_http_headers_filter_module (static)
nginx:     ngx_http_upstream_session_sticky_module (static)
nginx:     ngx_http_trim_filter_module (static)
nginx:     ngx_http_beacon_filter_module (static)
nginx:     ngx_http_echo_module (static)
nginx:     ngx_http_trans_filter_module (static)
nginx:     ngx_http_cookie_beacon_filter_module (static)
nginx:     ngx_http_hat_filter_module (static)
nginx:     ngx_http_hot_module (static)
nginx:     ngx_http_video_slice_module (static)
nginx:     ngx_http_video_module (static)
nginx:     ngx_http_video_ts_module (static)
nginx:     ngx_http_cdn_variables_module (static)
nginx:     ngx_http_alibeacon_filter_module (static)
nginx:     ngx_http_gunzip_filter_module (static)
nginx:     ngx_http_slice_file_module (static)
nginx:     ngx_http_content_verify_filter_module (static)
nginx:     ngx_http_headers_more_filter_module (static)
nginx:     ngx_http_tcprt_option_module (static)
nginx:     ngx_http_brotli_filter_module (static)
nginx:     ngx_http_inject_tail_module (static)
nginx:     ngx_http_img_adapt_module (static)
nginx:     ngx_http_tesla_copy_filter_module (static)
nginx:     ngx_http_split_video_module (static)
nginx:     ngx_http_parse_metadata_filter_module (static)
nginx:     ngx_http_limit_rate_gop_filter_module (static)
nginx:     ngx_http_drop_traffic_filter_module (static)
nginx:     ngx_http_asyn_auth_module (static)
nginx:     ngx_http_lua_module (static)
nginx:     ngx_http_copy_filter_module (static)
nginx:     ngx_http_range_body_filter_module (static)
nginx:     ngx_http_not_modified_filter_module (static)
nginx:     ngx_http_slice_filter_module (static)
nginx:     ngx_mail_module (static)
nginx:     ngx_mail_core_module (static)
nginx:     ngx_mail_ssl_module (static)
nginx:     ngx_mail_pop3_module (static)
nginx:     ngx_mail_imap_module (static)
nginx:     ngx_mail_smtp_module (static)
nginx:     ngx_mail_auth_http_module (static)
nginx:     ngx_mail_proxy_module (static)
nginx:     ngx_mail_realip_module (static)
nginx:     ngx_stream_module (static)
nginx:     ngx_stream_core_module (static)
nginx:     ngx_stream_log_module (static)
nginx:     ngx_stream_proxy_module (static)
nginx:     ngx_stream_upstream_module (static)
nginx:     ngx_stream_write_filter_module (static)
nginx:     ngx_stream_limit_conn_module (static)
nginx:     ngx_stream_access_module (static)
nginx:     ngx_stream_geo_module (static)
nginx:     ngx_stream_map_module (static)
nginx:     ngx_stream_split_clients_module (static)
nginx:     ngx_stream_return_module (static)
nginx:     ngx_stream_set_module (static)
nginx:     ngx_stream_upstream_hash_module (static)
nginx:     ngx_stream_upstream_least_conn_module (static)
nginx:     ngx_stream_upstream_random_module (static)
nginx:     ngx_ip_list_module (static)
nginx:     ngx_http_upstream_proxy_protocol_module (static)
"
