On Tue, Jul 21, 2020 at 2:17 AM Kuniyuki Iwashima <kun...@amazon.co.jp> wrote: > > Currently, SO_REUSEPORT does not work well if connected sockets are in a > UDP reuseport group. > > Then reuseport_has_conns() returns true and the result of > reuseport_select_sock() is discarded. Also, unconnected sockets have the > same score, hence only does the first unconnected socket in udp_hslot > always receive all packets sent to unconnected sockets. > > So, the result of reuseport_select_sock() should be used for load > balancing. > > The noteworthy point is that the unconnected sockets placed after > connected sockets in sock_reuseport.socks will receive more packets than > others because of the algorithm in reuseport_select_sock(). > > index | connected | reciprocal_scale | result > --------------------------------------------- > 0 | no | 20% | 40% > 1 | no | 20% | 20% > 2 | yes | 20% | 0% > 3 | no | 20% | 40% > 4 | yes | 20% | 0% > > If most of the sockets are connected, this can be a problem, but it still > works better than now. > > Fixes: acdcecc61285 ("udp: correct reuseport selection with connected > sockets") > CC: Willem de Bruijn <will...@google.com> > Reviewed-by: Benjamin Herrenschmidt <b...@amazon.com> > Signed-off-by: Kuniyuki Iwashima <kun...@amazon.co.jp>
Acked-by: Willem de Bruijn <will...@google.com>