Re: [PATCH 1/2] mm: clarify __GFP_MEMALLOC usage

From: David Rientjes
Date: Fri Apr 03 2020 - 15:41:15 EST


On Fri, 3 Apr 2020, Michal Hocko wrote:

> From: Michal Hocko <mhocko@xxxxxxxx>
>
> It seems that the existing documentation is not explicit about the
> expected usage and potential risks enough. While it is calls out
> that users have to free memory when using this flag it is not really
> apparent that users have to careful to not deplete memory reserves
> and that they should implement some sort of throttling wrt. freeing
> process.
>
> This is partly based on Neil's explanation [1].
>
> [1] http://lkml.kernel.org/r/877dz0yxoa.fsf@xxxxxxxxxxxxxxxxxxxxxxxx
> Signed-off-by: Michal Hocko <mhocko@xxxxxxxx>
> ---
> include/linux/gfp.h | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/include/linux/gfp.h b/include/linux/gfp.h
> index e5b817cb86e7..e3ab1c0d9140 100644
> --- a/include/linux/gfp.h
> +++ b/include/linux/gfp.h
> @@ -110,6 +110,9 @@ struct vm_area_struct;
> * the caller guarantees the allocation will allow more memory to be freed
> * very shortly e.g. process exiting or swapping. Users either should
> * be the MM or co-ordinating closely with the VM (e.g. swap over NFS).
> + * Users of this flag have to be extremely careful to not deplete the reserve
> + * completely and implement a throttling mechanism which controls the consumption
> + * of the reserve based on the amount of freed memory.
> *
> * %__GFP_NOMEMALLOC is used to explicitly forbid access to emergency reserves.
> * This takes precedence over the %__GFP_MEMALLOC flag if both are set.

Hmm, any guidance that we can offer to users of this flag that aren't
aware of __GFP_MEMALLOC internals? If I were to read this and not be
aware of the implementation, I would ask "how do I know when I'm at risk
of depleting this reserve" especially since the amount of reserve is
controlled by sysctl. How do I know when I'm risking a depletion of this
shared reserve?