Re: [RFC PATCH net-next 3/3] sock: Throttle pressure-aware sockets under pressure

From: Shakeel Butt
Date: Mon Sep 18 2023 - 12:30:35 EST


On Mon, Sep 18, 2023 at 12:48 AM Abel Wu <wuyun.abel@xxxxxxxxxxxxx> wrote:
>
> On 9/1/23 2:21 PM, Abel Wu wrote:
> > @@ -3087,8 +3100,20 @@ int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind)
> > if (sk_has_memory_pressure(sk)) {
> > u64 alloc;
> >
> > - if (!sk_under_memory_pressure(sk))
> > + /* Be more conservative if the socket's memcg (or its
> > + * parents) is under reclaim pressure, try to possibly
> > + * avoid further memstall.
> > + */
> > + if (under_memcg_pressure)
> > + goto suppress_allocation;
> > +
> > + if (!sk_under_global_memory_pressure(sk))
> > return 1;
> > +
> > + /* Trying to be fair among all the sockets of same
> > + * protocal under global memory pressure, by allowing
> > + * the ones that under average usage to raise.
> > + */
> > alloc = sk_sockets_allocated_read_positive(sk);
> > if (sk_prot_mem_limits(sk, 2) > alloc *
> > sk_mem_pages(sk->sk_wmem_queued +
>
> I totally agree with what Shakeel said in last reply and will try ebpf-
> based solution to let userspace inject proper strategies. But IMHO the
> above hunk is irrelevant to the idea of this patchset, and is the right
> thing to do, so maybe worth a separate patch?
>
> This hunk originally passes the allocation when this socket is below
> average usage even under global and/or memcg pressure. It makes sense
> to do so under global pressure, as the 'average' is in the scope of
> global, but it's really weird from a memcg's point of view. Actually
> this pass condition was present before memcg pressure was introduced.
>
> Please correct me if I missed something, thanks!
>

Please send the patch 1 and this hunk as separate patches with
relevant motivation and reasoning.

thanks,
Shakeel