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>

Reply via email to