mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-17 19:16:56 +00:00
3a5b28e00c
2 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
|
1fb61475f2 |
[RELEASE] Released version 3.1-dev10
Released version 3.1-dev10 with the following main changes : - BUG/MAJOR: mux-quic: do not crash on empty STREAM frame emission - BUG/MINOR: stats: Fix the name for the total number of streams created - MINOR: quic: strengthen qc_release_frm() - MEDIUM: quic: decount acknowledged data for MUX txbuf window - MINOR: quic: implement dedicated type for out-of-order stream ACK - MEDIUM: quic: merge contiguous/overlapping buffered ack stream range - MEDIUM: quic: decount out-of-order ACK data range for MUX txbuf window - MINOR: log: add do_log() logging helper - MINOR: log: add do_log_parse_act() helper func - MINOR: action: add do-log action - REGTESTS: add some tests for 'do-log' action - BUG/MEDIUM: hlua: make hlua_ctx_renew() safe - BUG/MEDIUM: hlua: properly handle sample func errors in hlua_run_sample_{fetch,conv}() - BUG/MINOR: quic: fix discarding of already stored out-of-order ACK - BUG/MEDIUM: quic: properly decount out-of-order ACK on stream release - MINOR: ssl: disable server side default CRL check with WolfSSL - MEDIUM: sink: implement sink_find_early() - MINOR: trace: postresolve sink names - MINOR: sample: postresolve sink names in debug() converter - BUG/MEDIUM: mux-quic: ensure timeout server is active for short requests - MINOR: cfgparse: simulate long configuration parsing with force-cfg-parser-pause - BUILD: cache: silence an uninitialized warning at -Og with gcc-12.2 - BUG/MINOR: mux-h2/traces: present the correct buffer for trailers errors traces - MINOR: mux-h2/traces: print the size of the DATA frames - CLEANUP: muxes: remove useless inclusion of ebmbtree.h - REORG: buffers: move some of the heavy functions from buf.h to buf.c - MINOR: buffer: add a buffer list type with functions - MINOR: mux-h2: split the amount of rx data from the amount to ack - MINOR: mux-h2: create and initialize an rx offset per stream - MEDIUM: mux-h2: start to update stream when sending WU - MEDIUM: mux-h2: start to introduce the window size in the offset calculation - MINOR: mux-h2: count within a connection, how many streams are receiving data - MINOR: mux-h2: allocate the array of shared rx bufs in the h2c - MINOR: mux-h2: add rxbuf head/tail/count management for h2s - MINOR: mux-h2: move H2_CF_WAIT_IN_LIST flag away from the demux flags - MINOR: mux-h2: simplify the exit code in h2_rcv_buf() - MINOR: mux-h2: simplify the wake up code in h2_rcv_buf() - MINOR: mux-h2: clear up H2_CF_DEM_DFULL and H2_CF_DEM_SHORT_READ ambiguity - MAJOR: mux-h2: make streams use the connection's buffers - MAJOR: mux-h2: permit a stream to allocate as many buffers as desired - MAJOR: mux-h2: make the rxbuf allocation algorithm a bit smarter - MINOR: mux-h2: add tune.h2.be.rxbuf and tune.h2.fe.rxbuf global settings - MEDIUM: mux-h2: change the default initial window to 16kB - DOC: design-thoughts: add diagrams illustrating an rx win groth - MEDIUM: mux-h2: rework h2_restart_reading() to differentiate recv and demux - OPTIM: mux-h2: make h2_send() report more accurate wake up conditions - OPTIM: mux-h2: try to continue reading after demuxing when useful - OPTIM: mux-h2: use tasklet_wakeup_after() in h2s_notify_recv() - MINOR: mux-h2/traces: add missing flags and proxy ID in traces - MINOR: mux-h2/traces: add buffer-related info to h2s and h2c - CI: cirrus-ci: bump FreeBSD image to 14-1 - REGTESTS: fix a reload race in abns_socket.vtc - MINOR: activity/memprofile: always return "other" bin on NULL return address - MINOR: quic: notify connection layer on handshake completion - BUG/MINOR: stream: unblock stream on wait-for-handshake completion - BUG/MEDIUM: quic: support wait-for-handshake - BUG/MEDIUM: server: server stuck in maintenance after FQDN change - BUG/MEDIUM: queue: make sure never to queue when there's no more served conns - DEBUG: mux-h2/flags: add H2_CF_DEM_RXBUF & H2_SF_EXPECT_RXDATA for the decoder - REGTESTS: cli: add delay 0.1 before connect to cli - MINOR: startup: add O_CLOEXEC flag to open /dev/null - MEDIUM: startup: move daemonization fork in init - MINOR: startup: refactor "daemonization" fork - MEDIUM: startup: move PID handling in init() - MAJOR: mworker: move master-worker fork in init() - BUG/MINOR: mworker: fix memory leak due to master-worker fork - REORG: mworker: set nbthread=1 for master after fork - MINOR: init: check MODE_MWORKER before creating master CLI - REORG: mworker: move mworker_create_master_cli in master 'case' - MEDIUM: startup: call chroot() if needed in one place - MEDIUM: startup: do set_identity() if needed in one place - MINOR: startup: only worker gets capabilities from bin - CLEANUP: haproxy: rm no longer used mworker_reexec_waitmode - MINOR: startup: rename exit_on_waitmode_failure to exit_on_failure - MINOR: defaults: update MASTER_MAXCONN description - MEDIUM: startup: remove MODE_MWORKER_WAIT - MINOR: global: add MODE_DISCOVERY flag - MEDIUM: cfgparse: add KWF_DISCOVERY keyword flag - MEDIUM: cfgparse: call some parsers only in MODE_DISCOVERY - MEDIUM: cfgparse-global: parse only KWF_DISCOVERY keywords in MODE_DISCOVERY - MEDIUM: cfgparse: parse only "global" section in MODE_DISCOVERY - MEDIUM: startup: introduce load_cfg and read_cfg - MINOR: cfgparse: fix *thread keywords sensitive to global section position - MINOR: mworker/cli: rename mworker_cli_proxy_new_listener - MINOR: mworker/cli: rename and clean mworker_cli_sockpair_new - MINOR: mworker/cli: create master CLI sockpair before fork - MINOR: mworker/cli: create MASTER proxy before mcli listeners - MINOR: mworker: add and set state PROC_O_INIT for new worker - MEDIUM: mworker/cli: close child and parent fds, setup listeners - MINOR: mworker: mworker_catch_sigchld: use fd_delete instead of close - MINOR: startup: rename and adapt reexec_on_failure - MINOR: mworker: add support for case when new worker dies - MINOR: mworker: simplify the code that sets PROC_O_LEAVING - MINOR: mworker/cli: add _send_status to support state transition - MEDIUM: startup: split sending oldpids_sig logic for standalone and mworker modes - MINOR: startup: split init() into separate initialization routines - MINOR: startup: split main: add step_init_3 - MINOR: startup: simplify check for calling sock_get_old_sockets - MINOR: startup: encapsulate sock_get_old_sockets in a function - MINOR: startup: add bind_listeners - MINOR: startup: split main: add step_init_4 - MINOR: startup: encapsulate master's code in run_master - MINOR: startup: add read_cfg_in_discovery_mode - MINOR: mworker: adapt exit_on_failure for master recovery mode - MEDIUM: mworker: add support of master recovery mode - MINOR: startup: add set_verbosity - MEDIUM: mworker: block reloads - MINOR: mworker: slow load status delivery if worker is starting - MINOR: mworker: readapt program support in mworker_catch_sigchld - MINOR: mworker: deserialize process list before read_cfg_in_discovery_mode - MINOR: mworker: parse program only in MODE_DISCOVERY - MINOR: cfgparse: add support for program section - MINOR: startup: reintroduce program support - MINOR: mworker-prog: stop old programs in mworker_ext_launch_all - MINOR: mworker: reintroduce systemd support - MINOR: mworker: report explicitly when worker exits due to max reloads - MINOR: cfgparse-global: parse *env keywords in MODE_DISCOVERY - MINOR: startup: reintroduce *env keywords support - MINOR: startup: close devnullfd, when daemon mode is applied |
||
|
e057f8367c |
DOC: design-thoughts: add diagrams illustrating an rx win groth
Let's just see on a diagram how the receiver can detect that the window is large enough for the remote sender to fill the link. Here it seems that a first criterion is that data are accumulating in the rxbuf, indicating that the next hop doesn't consume them fast enough. On the diagram it's visible when blue arrows (incoming data) are more frequent than the magenta ones on average (outgoing data), which happens when silence moments are less frequent and don't allow the reader to catch up. It's also visible that there are two phases alternating in the transfer: - measure round trip time (i.e. how long it takes to restart sending after a WU was sent after a long silence) - measure the lowest rxbuf size during the previous round trip It's worth noting that a window size change only has *observable* effect after two RTT: the first RTT is to restart sending (opening or enlarging the window), the second RTT to measure the lowest rxbuf size over the period. By turning the advertised window into an offset and comparing it to the received quantity, it's possible to measure the RTT of the whole chain (including the client possibly producing the data). Note that when multiple streams compete for BW this can become tricky. Limiting the window to available buffers and counting the number of sending streams on a connection could work (i.e. split total buffers into 1+#senders, first one being used for tx). |