mbox series

[net-next,0/3] net: add new socket option SO_RESERVE_MEM

Message ID 20210927182523.2704818-1-weiwan@google.com (mailing list archive)
Headers show
Series net: add new socket option SO_RESERVE_MEM | expand

Message

Wei Wang Sept. 27, 2021, 6:25 p.m. UTC
This patch series introduces a new socket option SO_RESERVE_MEM. 
This socket option provides a mechanism for users to reserve a certain
amount of memory for the socket to use. When this option is set, kernel
charges the user specified amount of memory to memcg, as well as
sk_forward_alloc. This amount of memory is not reclaimable and is
available in sk_forward_alloc for this socket.
With this socket option set, the networking stack spends less cycles
doing forward alloc and reclaim, which should lead to better system
performance, with the cost of an amount of pre-allocated and
unreclaimable memory, even under memory pressure.

The first patch is the implementation of this socket option. The
following 2 patches change the tcp stack to make use of this reserved
memory when under memory pressure. This makes the tcp stack behavior
more flexible when under memory pressure, and provides a way for user to
control the distribution of the memory among its sockets.

Wei Wang (3):
  net: add new socket option SO_RESERVE_MEM
  tcp: adjust sndbuf according to sk_reserved_mem
  tcp: adjust rcv_ssthresh according to sk_reserved_mem

 include/net/sock.h                | 44 +++++++++++++++++---
 include/net/tcp.h                 | 11 +++++
 include/uapi/asm-generic/socket.h |  2 +
 net/core/sock.c                   | 69 +++++++++++++++++++++++++++++++
 net/core/stream.c                 |  2 +-
 net/ipv4/af_inet.c                |  2 +-
 net/ipv4/tcp_input.c              | 26 ++++++++++--
 net/ipv4/tcp_output.c             |  3 +-
 8 files changed, 146 insertions(+), 13 deletions(-)

Comments

Jakub Kicinski Sept. 28, 2021, 12:50 a.m. UTC | #1
On Mon, 27 Sep 2021 11:25:20 -0700 Wei Wang wrote:
> This patch series introduces a new socket option SO_RESERVE_MEM. 
> This socket option provides a mechanism for users to reserve a certain
> amount of memory for the socket to use. When this option is set, kernel
> charges the user specified amount of memory to memcg, as well as
> sk_forward_alloc. This amount of memory is not reclaimable and is
> available in sk_forward_alloc for this socket.
> With this socket option set, the networking stack spends less cycles
> doing forward alloc and reclaim, which should lead to better system
> performance, with the cost of an amount of pre-allocated and
> unreclaimable memory, even under memory pressure.

Does not apply cleanly - would you mind rebasing/resending?

Would you be able to share what order of magnitude improvements you see?

Thanks!
Wei Wang Sept. 28, 2021, 3:33 a.m. UTC | #2
On Mon, Sep 27, 2021 at 5:50 PM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Mon, 27 Sep 2021 11:25:20 -0700 Wei Wang wrote:
> > This patch series introduces a new socket option SO_RESERVE_MEM.
> > This socket option provides a mechanism for users to reserve a certain
> > amount of memory for the socket to use. When this option is set, kernel
> > charges the user specified amount of memory to memcg, as well as
> > sk_forward_alloc. This amount of memory is not reclaimable and is
> > available in sk_forward_alloc for this socket.
> > With this socket option set, the networking stack spends less cycles
> > doing forward alloc and reclaim, which should lead to better system
> > performance, with the cost of an amount of pre-allocated and
> > unreclaimable memory, even under memory pressure.
>
> Does not apply cleanly - would you mind rebasing/resending?
>
Sure. Will do. Sorry about that.

> Would you be able to share what order of magnitude improvements you see?
>
OK. Will share some results from a synthetic benchmark.

> Thanks!