All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Hansen <dave.hansen@intel.com>
To: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mgorman@suse.de>,
	David Rientjes <rientjes@google.com>,
	Glauber Costa <glommer@gmail.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	Rik van Riel <riel@redhat.com>, Hugh Dickins <hughd@google.com>,
	Minchan Kim <minchan@kernel.org>,
	Jiang Liu <jiang.liu@huawei.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Joonsoo Kim <js1304@gmail.com>
Subject: Re: [RFC PATCH 1/5] mm, page_alloc: support multiple pages allocation
Date: Wed, 10 Jul 2013 15:52:42 -0700	[thread overview]
Message-ID: <51DDE5BA.9020800@intel.com> (raw)
In-Reply-To: <1372840460-5571-2-git-send-email-iamjoonsoo.kim@lge.com>

On 07/03/2013 01:34 AM, Joonsoo Kim wrote:
> -		if (page)
> +		do {
> +			page = buffered_rmqueue(preferred_zone, zone, order,
> +							gfp_mask, migratetype);
> +			if (!page)
> +				break;
> +
> +			if (!nr_pages) {
> +				count++;
> +				break;
> +			}
> +
> +			pages[count++] = page;
> +			if (count >= *nr_pages)
> +				break;
> +
> +			mark = zone->watermark[alloc_flags & ALLOC_WMARK_MASK];
> +			if (!zone_watermark_ok(zone, order, mark,
> +					classzone_idx, alloc_flags))
> +				break;
> +		} while (1);

I'm really surprised this works as well as it does.  Calling
buffered_rmqueue() a bunch of times enables/disables interrupts a bunch
of times, and mucks with the percpu pages lists a whole bunch.
buffered_rmqueue() is really meant for _single_ pages, not to be called
a bunch of times in a row.

Why not just do a single rmqueue_bulk() call?

--
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: Dave Hansen <dave.hansen@intel.com>
To: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mgorman@suse.de>,
	David Rientjes <rientjes@google.com>,
	Glauber Costa <glommer@gmail.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
	Rik van Riel <riel@redhat.com>, Hugh Dickins <hughd@google.com>,
	Minchan Kim <minchan@kernel.org>,
	Jiang Liu <jiang.liu@huawei.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Joonsoo Kim <js1304@gmail.com>
Subject: Re: [RFC PATCH 1/5] mm, page_alloc: support multiple pages allocation
Date: Wed, 10 Jul 2013 15:52:42 -0700	[thread overview]
Message-ID: <51DDE5BA.9020800@intel.com> (raw)
In-Reply-To: <1372840460-5571-2-git-send-email-iamjoonsoo.kim@lge.com>

On 07/03/2013 01:34 AM, Joonsoo Kim wrote:
> -		if (page)
> +		do {
> +			page = buffered_rmqueue(preferred_zone, zone, order,
> +							gfp_mask, migratetype);
> +			if (!page)
> +				break;
> +
> +			if (!nr_pages) {
> +				count++;
> +				break;
> +			}
> +
> +			pages[count++] = page;
> +			if (count >= *nr_pages)
> +				break;
> +
> +			mark = zone->watermark[alloc_flags & ALLOC_WMARK_MASK];
> +			if (!zone_watermark_ok(zone, order, mark,
> +					classzone_idx, alloc_flags))
> +				break;
> +		} while (1);

I'm really surprised this works as well as it does.  Calling
buffered_rmqueue() a bunch of times enables/disables interrupts a bunch
of times, and mucks with the percpu pages lists a whole bunch.
buffered_rmqueue() is really meant for _single_ pages, not to be called
a bunch of times in a row.

Why not just do a single rmqueue_bulk() call?

  parent reply	other threads:[~2013-07-10 22:53 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-03  8:34 [RFC PATCH 0/5] Support multiple pages allocation Joonsoo Kim
2013-07-03  8:34 ` Joonsoo Kim
2013-07-03  8:34 ` [RFC PATCH 1/5] mm, page_alloc: support " Joonsoo Kim
2013-07-03  8:34   ` Joonsoo Kim
2013-07-03 15:57   ` Christoph Lameter
2013-07-03 15:57     ` Christoph Lameter
2013-07-04  4:29     ` Joonsoo Kim
2013-07-04  4:29       ` Joonsoo Kim
2013-07-10 22:52   ` Dave Hansen [this message]
2013-07-10 22:52     ` Dave Hansen
2013-07-11  1:02     ` Joonsoo Kim
2013-07-11  1:02       ` Joonsoo Kim
2013-07-11  5:38       ` Dave Hansen
2013-07-11  5:38         ` Dave Hansen
2013-07-11  6:12         ` Joonsoo Kim
2013-07-11  6:12           ` Joonsoo Kim
2013-07-11 15:51           ` Dave Hansen
2013-07-11 15:51             ` Dave Hansen
2013-07-16  0:26             ` Joonsoo Kim
2013-07-16  0:26               ` Joonsoo Kim
2013-07-12 16:31           ` Dave Hansen
2013-07-12 16:31             ` Dave Hansen
2013-07-16  0:37             ` Joonsoo Kim
2013-07-16  0:37               ` Joonsoo Kim
2013-07-03  8:34 ` [RFC PATCH 2/5] mm, page_alloc: introduce alloc_pages_exact_node_multiple() Joonsoo Kim
2013-07-03  8:34   ` Joonsoo Kim
2013-07-03  8:34 ` [RFC PATCH 3/5] radix-tree: introduce radix_tree_[next/prev]_present() Joonsoo Kim
2013-07-03  8:34   ` Joonsoo Kim
2013-07-03  8:34 ` [RFC PATCH 4/5] readahead: remove end range check Joonsoo Kim
2013-07-03  8:34   ` Joonsoo Kim
2013-07-03  8:34 ` [RFC PATCH 5/5] readhead: support multiple pages allocation for readahead Joonsoo Kim
2013-07-03  8:34   ` Joonsoo Kim
2013-07-03 15:28 ` [RFC PATCH 0/5] Support multiple pages allocation Michal Hocko
2013-07-03 15:28   ` Michal Hocko
2013-07-03 15:51   ` Zhang Yanfei
2013-07-03 15:51     ` Zhang Yanfei
2013-07-03 16:01     ` Zhang Yanfei
2013-07-03 16:01       ` Zhang Yanfei
2013-07-04  4:24       ` Joonsoo Kim
2013-07-04  4:24         ` Joonsoo Kim
2013-07-04 10:00         ` Michal Hocko
2013-07-04 10:00           ` Michal Hocko
2013-07-10  0:31           ` Joonsoo Kim
2013-07-10  0:31             ` Joonsoo Kim
2013-07-10  1:20             ` Zhang Yanfei
2013-07-10  1:20               ` Zhang Yanfei
2013-07-10  9:56               ` Joonsoo Kim
2013-07-10  9:56                 ` Joonsoo Kim
2013-07-10  9:17             ` Michal Hocko
2013-07-10  9:17               ` Michal Hocko
2013-07-10  9:55               ` Joonsoo Kim
2013-07-10  9:55                 ` Joonsoo Kim
2013-07-10 11:27                 ` Michal Hocko
2013-07-10 11:27                   ` Michal Hocko
2013-07-11  1:05                   ` Joonsoo Kim
2013-07-11  1:05                     ` Joonsoo Kim

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=51DDE5BA.9020800@intel.com \
    --to=dave.hansen@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=glommer@gmail.com \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=jiang.liu@huawei.com \
    --cc=js1304@gmail.com \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=minchan@kernel.org \
    --cc=riel@redhat.com \
    --cc=rientjes@google.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.