Message ID | 20200910140428.751193-1-ncardwell@google.com |
---|---|
Headers | show |
Series | tcp: increase flexibility of EBPF congestion control initialization | expand |
On Thu, Sep 10, 2020 at 10:04:23AM -0400, Neal Cardwell wrote: > This patch series reorganizes TCP congestion control initialization so that if > EBPF code called by tcp_init_transfer() sets the congestion control algorithm > by calling setsockopt(TCP_CONGESTION) then the TCP stack initializes the > congestion control module immediately, instead of having tcp_init_transfer() > later initialize the congestion control module. > > This increases flexibility for the EBPF code that runs at connection > establishment time, and simplifies the code. > > This has the following benefits: > > (1) This allows CC module customizations made by the EBPF called in > tcp_init_transfer() to persist, and not be wiped out by a later > call to tcp_init_congestion_control() in tcp_init_transfer(). > > (2) Does not flip the order of EBPF and CC init, to avoid causing bugs > for existing code upstream that depends on the current order. > > (3) Does not cause 2 initializations for for CC in the case where the > EBPF called in tcp_init_transfer() wants to set the CC to a new CC > algorithm. > > (4) Allows follow-on simplifications to the code in net/core/filter.c > and net/ipv4/tcp_cong.c, which currently both have some complexity > to special-case CC initialization to avoid double CC > initialization if EBPF sets the CC. > > changes in v2: > > o rebase onto bpf-next > > o add another follow-on simplification suggested by Martin KaFai Lau: > "tcp: simplify tcp_set_congestion_control() load=false case" Acked-by: Martin KaFai Lau <kafai@fb.com>