Re: [PATCH v2] mm: terminate shrink_slab loop if signal is pending

From: Michal Hocko
Date: Fri Dec 08 2017 - 03:22:26 EST


On Thu 07-12-17 17:23:05, Suren Baghdasaryan wrote:
> Slab shrinkers can be quite time consuming and when signal
> is pending they can delay handling of the signal. If fatal
> signal is pending there is no point in shrinking that process
> since it will be killed anyway.

The thing is that we are _not_ shrinking _that_ process. We are
shrinking globally shared objects and the fact that the memory pressure
is so large that the kswapd doesn't keep pace with it means that we have
to throttle all allocation sites by doing this direct reclaim. I agree
that expediting killed task is a good thing in general because such a
process should free at least some memory.

> This change checks for pending
> fatal signals inside shrink_slab loop and if one is detected
> terminates this loop early.

This changelog doesn't really address my previous review feedback, I am
afraid. You should mention more details about problems you are seeing
and what causes them. If we have a shrinker which takes considerable
amount of time them we should be addressing that. If that is not
possible then it should be documented at least.

The changelog also should describe how does this play along with the
rest of the allocation path.

The patch is not mergeable in this form I am afraid.

> Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>
>
> ---
> V2:
> Sergey Senozhatsky:
> - Fix missing parentheses
> ---
> mm/vmscan.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index c02c850ea349..28e4bdc72c16 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -486,6 +486,13 @@ static unsigned long shrink_slab(gfp_t gfp_mask, int nid,
> .memcg = memcg,
> };
>
> + /*
> + * We are about to die and free our memory.
> + * Stop shrinking which might delay signal handling.
> + */
> + if (unlikely(fatal_signal_pending(current)))
> + break;
> +
> /*
> * If kernel memory accounting is disabled, we ignore
> * SHRINKER_MEMCG_AWARE flag and call all shrinkers
> --
> 2.15.1.424.g9478a66081-goog
>

--
Michal Hocko
SUSE Labs