All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aaron Lu <aaron.lu@intel.com>
To: David Rientjes <rientjes@google.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Huang Ying <ying.huang@intel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Kemi Wang <kemi.wang@intel.com>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>, Michal Hocko <mhocko@suse.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	Mel Gorman <mgorman@techsingularity.net>,
	Matthew Wilcox <willy@infradead.org>
Subject: Re: [PATCH v3 2/3] mm/free_pcppages_bulk: do not hold lock when picking pages to free
Date: Tue, 27 Feb 2018 11:17:07 +0800	[thread overview]
Message-ID: <20180227031707.GB28977@intel.com> (raw)
In-Reply-To: <20180227020058.GB9141@intel.com>

On Tue, Feb 27, 2018 at 10:00:58AM +0800, Aaron Lu wrote:
> On Mon, Feb 26, 2018 at 01:53:10PM -0800, David Rientjes wrote:
> > On Mon, 26 Feb 2018, Aaron Lu wrote:
> > 
> > > @@ -1144,26 +1142,31 @@ static void free_pcppages_bulk(struct zone *zone, int count,
> > >  			batch_free = count;
> > >  
> > >  		do {
> > > -			int mt;	/* migratetype of the to-be-freed page */
> > > -
> > >  			page = list_last_entry(list, struct page, lru);
> > >  			/* must delete as __free_one_page list manipulates */
> > 
> > Looks good in general, but I'm not sure how I reconcile this comment with 
> > the new implementation that later links page->lru again.
> 
> Thanks for pointing this out.
> 
> I think the comment is useless now since there is a list_add_tail right
> below so it's obvious we need to take the page off its original list.
> I'll remove the comment in an update.

Thinking again, I think I'll change the comment to:

-			/* must delete as __free_one_page list manipulates */
+			/* must delete to avoid corrupting pcp list */
 			list_del(&page->lru);
 			pcp->count--;
 
Meanwhile, I'll add one more comment about why list_for_each_entry_safe
is used:

+	/*
+	 * Use safe version since after __free_one_page(),
+	 * page->lru.next will not point to original list.
+	 */
+	list_for_each_entry_safe(page, tmp, &head, lru) {
+		int mt = get_pcppage_migratetype(page);
+		/* MIGRATE_ISOLATE page should not go to pcplists */
+		VM_BUG_ON_PAGE(is_migrate_isolate(mt), page);
+		/* Pageblock could have been isolated meanwhile */
+		if (unlikely(isolated_pageblocks))
+			mt = get_pageblock_migratetype(page);
+
+		__free_one_page(page, page_to_pfn(page), zone, 0, mt);
+		trace_mm_page_pcpu_drain(page, 0, mt);
+	}
 	spin_unlock(&zone->lock);
 }

--
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: Aaron Lu <aaron.lu@intel.com>
To: David Rientjes <rientjes@google.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Huang Ying <ying.huang@intel.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Kemi Wang <kemi.wang@intel.com>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>, Michal Hocko <mhocko@suse.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	Mel Gorman <mgorman@techsingularity.net>,
	Matthew Wilcox <willy@infradead.org>
Subject: Re: [PATCH v3 2/3] mm/free_pcppages_bulk: do not hold lock when picking pages to free
Date: Tue, 27 Feb 2018 11:17:07 +0800	[thread overview]
Message-ID: <20180227031707.GB28977@intel.com> (raw)
In-Reply-To: <20180227020058.GB9141@intel.com>

On Tue, Feb 27, 2018 at 10:00:58AM +0800, Aaron Lu wrote:
> On Mon, Feb 26, 2018 at 01:53:10PM -0800, David Rientjes wrote:
> > On Mon, 26 Feb 2018, Aaron Lu wrote:
> > 
> > > @@ -1144,26 +1142,31 @@ static void free_pcppages_bulk(struct zone *zone, int count,
> > >  			batch_free = count;
> > >  
> > >  		do {
> > > -			int mt;	/* migratetype of the to-be-freed page */
> > > -
> > >  			page = list_last_entry(list, struct page, lru);
> > >  			/* must delete as __free_one_page list manipulates */
> > 
> > Looks good in general, but I'm not sure how I reconcile this comment with 
> > the new implementation that later links page->lru again.
> 
> Thanks for pointing this out.
> 
> I think the comment is useless now since there is a list_add_tail right
> below so it's obvious we need to take the page off its original list.
> I'll remove the comment in an update.

Thinking again, I think I'll change the comment to:

-			/* must delete as __free_one_page list manipulates */
+			/* must delete to avoid corrupting pcp list */
 			list_del(&page->lru);
 			pcp->count--;
 
Meanwhile, I'll add one more comment about why list_for_each_entry_safe
is used:

+	/*
+	 * Use safe version since after __free_one_page(),
+	 * page->lru.next will not point to original list.
+	 */
+	list_for_each_entry_safe(page, tmp, &head, lru) {
+		int mt = get_pcppage_migratetype(page);
+		/* MIGRATE_ISOLATE page should not go to pcplists */
+		VM_BUG_ON_PAGE(is_migrate_isolate(mt), page);
+		/* Pageblock could have been isolated meanwhile */
+		if (unlikely(isolated_pageblocks))
+			mt = get_pageblock_migratetype(page);
+
+		__free_one_page(page, page_to_pfn(page), zone, 0, mt);
+		trace_mm_page_pcpu_drain(page, 0, mt);
+	}
 	spin_unlock(&zone->lock);
 }

  reply	other threads:[~2018-02-27  3:16 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-26 13:53 [PATCH v3 0/3] mm: improve zone->lock scalability Aaron Lu
2018-02-26 13:53 ` Aaron Lu
2018-02-26 13:53 ` [PATCH v3 1/3] mm/free_pcppages_bulk: update pcp->count inside Aaron Lu
2018-02-26 13:53   ` Aaron Lu
2018-02-26 21:48   ` David Rientjes
2018-02-26 21:48     ` David Rientjes
2018-02-27  1:56     ` Aaron Lu
2018-02-27  1:56       ` Aaron Lu
2018-02-27  3:12       ` Aaron Lu
2018-02-27  3:12         ` Aaron Lu
2018-02-26 13:53 ` [PATCH v3 2/3] mm/free_pcppages_bulk: do not hold lock when picking pages to free Aaron Lu
2018-02-26 13:53   ` Aaron Lu
2018-02-26 21:53   ` David Rientjes
2018-02-26 21:53     ` David Rientjes
2018-02-27  2:00     ` Aaron Lu
2018-02-27  2:00       ` Aaron Lu
2018-02-27  3:17       ` Aaron Lu [this message]
2018-02-27  3:17         ` Aaron Lu
2018-02-26 13:53 ` [PATCH v3 3/3] mm/free_pcppages_bulk: prefetch buddy while not holding lock Aaron Lu
2018-02-26 13:53   ` Aaron Lu

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=20180227031707.GB28977@intel.com \
    --to=aaron.lu@intel.com \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=dave.hansen@intel.com \
    --cc=kemi.wang@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@suse.com \
    --cc=rientjes@google.com \
    --cc=tim.c.chen@linux.intel.com \
    --cc=vbabka@suse.cz \
    --cc=willy@infradead.org \
    --cc=ying.huang@intel.com \
    /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.