All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mel Gorman <mgorman@suse.de>
To: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Linux-MM <linux-mm@kvack.org>,
	Linux-Netdev <netdev@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	David Miller <davem@davemloft.net>, Neil Brown <neilb@suse.de>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Mike Christie <michaelc@cs.wisc.edu>,
	Eric B Munson <emunson@mgebm.net>,
	Eric Dumazet <eric.dumazet@gmail.com>
Subject: Re: [PATCH 04/16] mm: allow PF_MEMALLOC from softirq context
Date: Mon, 9 Jul 2012 11:04:42 +0100	[thread overview]
Message-ID: <20120709100442.GZ14154@suse.de> (raw)
In-Reply-To: <20120708181211.GE2872@breakpoint.cc>

On Sun, Jul 08, 2012 at 08:12:11PM +0200, Sebastian Andrzej Siewior wrote:
> On Wed, Jun 27, 2012 at 09:26:14AM +0100, Mel Gorman wrote:
> > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > > > index b6c0727..5c6d9c6 100644
> > > > --- a/mm/page_alloc.c
> > > > +++ b/mm/page_alloc.c
> > > > @@ -2265,7 +2265,11 @@ gfp_to_alloc_flags(gfp_t gfp_mask)
> > > >  	if (likely(!(gfp_mask & __GFP_NOMEMALLOC))) {
> > > >  		if (gfp_mask & __GFP_MEMALLOC)
> > > >  			alloc_flags |= ALLOC_NO_WATERMARKS;
> > > > -		else if (likely(!(gfp_mask & __GFP_NOMEMALLOC)) && !in_interrupt())
> > > > +		else if (in_serving_softirq() && (current->flags & PF_MEMALLOC))
> > > > +			alloc_flags |= ALLOC_NO_WATERMARKS;
> > > > +		else if (!in_interrupt() &&
> > > > +				((current->flags & PF_MEMALLOC) ||
> > > > +				 unlikely(test_thread_flag(TIF_MEMDIE))))
> > > >  			alloc_flags |= ALLOC_NO_WATERMARKS;
> > > >  	}
> > > 
> > > You allocate in RX path with __GFP_MEMALLOC and your sk->sk_allocation has
> > > also __GFP_MEMALLOC set. That means you should get ALLOC_NO_WATERMARKS in
> > > alloc_flags.
> > 
> > In the cases where they are annotated correctly, yes. It is recordeed if
> > the page gets allocated from the PFMEMALLOC reserves. If the received
> > packet is not SOCK_MEMALLOC and the page was allocated from PFMEMALLOC
> > reserves it is then discarded and the packet must be retransmitted.
> 
> Let me try again:
> - lets assume your allocation happens with alloc_page(), without
>   __GFP_MEMALLOC in GFP_FLAGS and with PF_MEMALLOC in current->flags. Now
>   you may get memory which you wouldn't receive otherwise (without
>   PF_MEMALLOC). Okay, understood. So you don't have to annotate each page
>   allocation in your receive path for instance as long as the process has the
>   flag set.

Yes.

> - lets assume your allocation happens with kmalloc() without __GFP_MEMALLOC
>   and current->flags has PF_MEMALLOC ORed and your SLAB pool is empty. This
>   forces SLAB to allocate more pages from the buddy allocator with it will
>   receive more likely (due to ->current->flags + PF_MEMALLOC) but SLAB will
>   drop this extra memory because the page has ->pf_memory (or something like
>   that) set and the GFP_FLAGS do not have __GFP_MEMALLOC set.
> 

It's recorded if the slab page was allocated from PFMEMALLOC reserves (see
patch 2 from the swap over NBD series). slab will use this page for objects
but only allocate them to callers that pass a gfp_pfmemalloc_allowed() check.
kmalloc() users with either __GFP_MEMALLOC or PF_MEMALLOC will get
the pages they need but they will not "leak" to !_GFP_MEMALLOC users as
that would potentially deadlock.

-- 
Mel Gorman
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Mel Gorman <mgorman@suse.de>
To: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Linux-MM <linux-mm@kvack.org>,
	Linux-Netdev <netdev@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	David Miller <davem@davemloft.net>, Neil Brown <neilb@suse.de>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Mike Christie <michaelc@cs.wisc.edu>,
	Eric B Munson <emunson@mgebm.net>,
	Eric Dumazet <eric.dumazet@gmail.com>
Subject: Re: [PATCH 04/16] mm: allow PF_MEMALLOC from softirq context
Date: Mon, 9 Jul 2012 11:04:42 +0100	[thread overview]
Message-ID: <20120709100442.GZ14154@suse.de> (raw)
In-Reply-To: <20120708181211.GE2872@breakpoint.cc>

On Sun, Jul 08, 2012 at 08:12:11PM +0200, Sebastian Andrzej Siewior wrote:
> On Wed, Jun 27, 2012 at 09:26:14AM +0100, Mel Gorman wrote:
> > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > > > index b6c0727..5c6d9c6 100644
> > > > --- a/mm/page_alloc.c
> > > > +++ b/mm/page_alloc.c
> > > > @@ -2265,7 +2265,11 @@ gfp_to_alloc_flags(gfp_t gfp_mask)
> > > >  	if (likely(!(gfp_mask & __GFP_NOMEMALLOC))) {
> > > >  		if (gfp_mask & __GFP_MEMALLOC)
> > > >  			alloc_flags |= ALLOC_NO_WATERMARKS;
> > > > -		else if (likely(!(gfp_mask & __GFP_NOMEMALLOC)) && !in_interrupt())
> > > > +		else if (in_serving_softirq() && (current->flags & PF_MEMALLOC))
> > > > +			alloc_flags |= ALLOC_NO_WATERMARKS;
> > > > +		else if (!in_interrupt() &&
> > > > +				((current->flags & PF_MEMALLOC) ||
> > > > +				 unlikely(test_thread_flag(TIF_MEMDIE))))
> > > >  			alloc_flags |= ALLOC_NO_WATERMARKS;
> > > >  	}
> > > 
> > > You allocate in RX path with __GFP_MEMALLOC and your sk->sk_allocation has
> > > also __GFP_MEMALLOC set. That means you should get ALLOC_NO_WATERMARKS in
> > > alloc_flags.
> > 
> > In the cases where they are annotated correctly, yes. It is recordeed if
> > the page gets allocated from the PFMEMALLOC reserves. If the received
> > packet is not SOCK_MEMALLOC and the page was allocated from PFMEMALLOC
> > reserves it is then discarded and the packet must be retransmitted.
> 
> Let me try again:
> - lets assume your allocation happens with alloc_page(), without
>   __GFP_MEMALLOC in GFP_FLAGS and with PF_MEMALLOC in current->flags. Now
>   you may get memory which you wouldn't receive otherwise (without
>   PF_MEMALLOC). Okay, understood. So you don't have to annotate each page
>   allocation in your receive path for instance as long as the process has the
>   flag set.

Yes.

> - lets assume your allocation happens with kmalloc() without __GFP_MEMALLOC
>   and current->flags has PF_MEMALLOC ORed and your SLAB pool is empty. This
>   forces SLAB to allocate more pages from the buddy allocator with it will
>   receive more likely (due to ->current->flags + PF_MEMALLOC) but SLAB will
>   drop this extra memory because the page has ->pf_memory (or something like
>   that) set and the GFP_FLAGS do not have __GFP_MEMALLOC set.
> 

It's recorded if the slab page was allocated from PFMEMALLOC reserves (see
patch 2 from the swap over NBD series). slab will use this page for objects
but only allocate them to callers that pass a gfp_pfmemalloc_allowed() check.
kmalloc() users with either __GFP_MEMALLOC or PF_MEMALLOC will get
the pages they need but they will not "leak" to !_GFP_MEMALLOC users as
that would potentially deadlock.

-- 
Mel Gorman
SUSE Labs

  reply	other threads:[~2012-07-09 10:04 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-22 14:30 [PATCH 00/17] Swap-over-NBD without deadlocking V13 Mel Gorman
2012-06-22 14:30 ` Mel Gorman
2012-06-22 14:30 ` [PATCH 01/16] mm: sl[au]b: Add knowledge of PFMEMALLOC reserve pages Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 02/16] mm: slub: Optimise the SLUB fast path to avoid pfmemalloc checks Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 03/16] mm: Introduce __GFP_MEMALLOC to allow access to emergency reserves Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 04/16] mm: allow PF_MEMALLOC from softirq context Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-26 16:55   ` Sebastian Andrzej Siewior
2012-06-26 16:55     ` Sebastian Andrzej Siewior
2012-06-27  8:26     ` Mel Gorman
2012-06-27  8:26       ` Mel Gorman
2012-07-08 18:12       ` Sebastian Andrzej Siewior
2012-07-08 18:12         ` Sebastian Andrzej Siewior
2012-07-09 10:04         ` Mel Gorman [this message]
2012-07-09 10:04           ` Mel Gorman
2012-07-09 16:57           ` Sebastian Andrzej Siewior
2012-07-09 16:57             ` Sebastian Andrzej Siewior
2012-07-10 11:09             ` Mel Gorman
2012-07-10 11:09               ` Mel Gorman
2012-06-22 14:30 ` [PATCH 05/16] mm: Only set page->pfmemalloc when ALLOC_NO_WATERMARKS was used Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 06/16] mm: Ignore mempolicies when using ALLOC_NO_WATERMARK Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 07/16] net: Introduce sk_gfp_atomic() to allow addition of GFP flags depending on the individual socket Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 08/16] netvm: Allow the use of __GFP_MEMALLOC by specific sockets Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 09/16] netvm: Allow skb allocation to use PFMEMALLOC reserves Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-26 15:27   ` Sebastian Andrzej Siewior
2012-06-26 15:27     ` Sebastian Andrzej Siewior
2012-06-26 15:27     ` Sebastian Andrzej Siewior
2012-06-27  8:32     ` Mel Gorman
2012-06-27  8:32       ` Mel Gorman
2012-06-22 14:30 ` [PATCH 10/16] netvm: Propagate page->pfmemalloc to skb Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 11/16] netvm: Propagate page->pfmemalloc from skb_alloc_page " Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-26 20:13   ` Sebastian Andrzej Siewior
2012-06-26 20:13     ` Sebastian Andrzej Siewior
2012-06-27  8:43     ` Mel Gorman
2012-06-27  8:43       ` Mel Gorman
2012-07-09 19:18       ` Sebastian Andrzej Siewior
2012-07-09 19:18         ` Sebastian Andrzej Siewior
2012-07-10 11:12         ` Mel Gorman
2012-07-10 11:12           ` Mel Gorman
2012-06-22 14:30 ` [PATCH 12/16] netvm: Set PF_MEMALLOC as appropriate during SKB processing Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 13/16] mm: Micro-optimise slab to avoid a function call Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 14/16] nbd: Set SOCK_MEMALLOC for access to PFMEMALLOC reserves Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 15/16] mm: Throttle direct reclaimers if PF_MEMALLOC reserves are low and swap is backed by network storage Mel Gorman
2012-06-22 14:30   ` Mel Gorman
2012-06-22 14:30 ` [PATCH 16/16] mm: Account for the number of times direct reclaimers get throttled Mel Gorman
2012-06-22 14:30   ` Mel Gorman
  -- strict thread matches above, loose matches on Subject: below --
2012-06-29 13:32 [PATCH 00/16] Swap-over-NBD without deadlocking V14 Mel Gorman
2012-06-29 13:32 ` [PATCH 04/16] mm: allow PF_MEMALLOC from softirq context Mel Gorman
2012-06-29 13:32   ` Mel Gorman
2012-07-12  6:40 [PATCH 00/16] Swap-over-NBD without deadlocking V15 Mel Gorman
2012-07-12  6:40 ` [PATCH 04/16] mm: allow PF_MEMALLOC from softirq context Mel Gorman
2012-07-12  6:40   ` Mel Gorman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120709100442.GZ14154@suse.de \
    --to=mgorman@suse.de \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=emunson@mgebm.net \
    --cc=eric.dumazet@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=michaelc@cs.wisc.edu \
    --cc=neilb@suse.de \
    --cc=netdev@vger.kernel.org \
    --cc=sebastian@breakpoint.cc \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.