From: Jiang Liu <jiang.liu@linux.intel.com>
To: David Rientjes <rientjes@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mgorman@suse.de>,
Mike Galbraith <umgwanakikbuti@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Tang Chen <tangchen@cn.fujitsu.com>, Tejun Heo <tj@kernel.org>,
Tony Luck <tony.luck@intel.com>,
linux-mm@kvack.org, linux-hotplug@vger.kernel.org,
linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [Patch V3 2/9] kernel/profile.c: Replace cpu_to_mem() with cpu_to_node()
Date: Wed, 19 Aug 2015 07:18:59 +0000 [thread overview]
Message-ID: <55D42DE3.2040506@linux.intel.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1508171730260.5527@chino.kir.corp.google.com>
On 2015/8/18 8:31, David Rientjes wrote:
> On Mon, 17 Aug 2015, Jiang Liu wrote:
>
>> Function profile_cpu_callback() allocates memory without specifying
>> __GFP_THISNODE flag, so replace cpu_to_mem() with cpu_to_node()
>> because cpu_to_mem() may cause suboptimal memory allocation if
>> there's no free memory on the node returned by cpu_to_mem().
>>
>
> Why is cpu_to_node() better with regard to free memory and NUMA locality?
Hi David,
Thanks for review. This is a special case pointed out by Tejun.
For the imagined topology, A<->B<->X<->C<->D, where A, B, C, D has
memory and X is memoryless.
Possible fallback lists are:
B: [ B, A, C, D]
X: [ B, C, A, D]
C: [ C, D, B, A]
cpu_to_mem(X) will either return B or C. Let's assume it returns B.
Then we will use "B: [ B, A, C, D]" to allocate memory for X, which
is not the optimal fallback list for X. And cpu_to_node(X) returns
X, and "X: [ B, C, A, D]" is the optimal fallback list for X.
Thanks!
Gerry
>
>> It's safe to use cpu_to_mem() because build_all_zonelists() also
>> builds suitable fallback zonelist for memoryless node.
>>
>
> Why reference that cpu_to_mem() is safe if you're changing away from it?
Sorry, it should be cpu_to_node() instead of cpu_to_mem().
>
>> Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
>> ---
>> kernel/profile.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/kernel/profile.c b/kernel/profile.c
>> index a7bcd28d6e9f..d14805bdcc4c 100644
>> --- a/kernel/profile.c
>> +++ b/kernel/profile.c
>> @@ -336,7 +336,7 @@ static int profile_cpu_callback(struct notifier_block *info,
>> switch (action) {
>> case CPU_UP_PREPARE:
>> case CPU_UP_PREPARE_FROZEN:
>> - node = cpu_to_mem(cpu);
>> + node = cpu_to_node(cpu);
>> per_cpu(cpu_profile_flip, cpu) = 0;
>> if (!per_cpu(cpu_profile_hits, cpu)[1]) {
>> page = alloc_pages_exact_node(node,
WARNING: multiple messages have this Message-ID (diff)
From: Jiang Liu <jiang.liu@linux.intel.com>
To: David Rientjes <rientjes@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mgorman@suse.de>,
Mike Galbraith <umgwanakikbuti@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Tang Chen <tangchen@cn.fujitsu.com>, Tejun Heo <tj@kernel.org>,
Tony Luck <tony.luck@intel.com>,
linux-mm@kvack.org, linux-hotplug@vger.kernel.org,
linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [Patch V3 2/9] kernel/profile.c: Replace cpu_to_mem() with cpu_to_node()
Date: Wed, 19 Aug 2015 15:18:59 +0800 [thread overview]
Message-ID: <55D42DE3.2040506@linux.intel.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1508171730260.5527@chino.kir.corp.google.com>
On 2015/8/18 8:31, David Rientjes wrote:
> On Mon, 17 Aug 2015, Jiang Liu wrote:
>
>> Function profile_cpu_callback() allocates memory without specifying
>> __GFP_THISNODE flag, so replace cpu_to_mem() with cpu_to_node()
>> because cpu_to_mem() may cause suboptimal memory allocation if
>> there's no free memory on the node returned by cpu_to_mem().
>>
>
> Why is cpu_to_node() better with regard to free memory and NUMA locality?
Hi David,
Thanks for review. This is a special case pointed out by Tejun.
For the imagined topology, A<->B<->X<->C<->D, where A, B, C, D has
memory and X is memoryless.
Possible fallback lists are:
B: [ B, A, C, D]
X: [ B, C, A, D]
C: [ C, D, B, A]
cpu_to_mem(X) will either return B or C. Let's assume it returns B.
Then we will use "B: [ B, A, C, D]" to allocate memory for X, which
is not the optimal fallback list for X. And cpu_to_node(X) returns
X, and "X: [ B, C, A, D]" is the optimal fallback list for X.
Thanks!
Gerry
>
>> It's safe to use cpu_to_mem() because build_all_zonelists() also
>> builds suitable fallback zonelist for memoryless node.
>>
>
> Why reference that cpu_to_mem() is safe if you're changing away from it?
Sorry, it should be cpu_to_node() instead of cpu_to_mem().
>
>> Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
>> ---
>> kernel/profile.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/kernel/profile.c b/kernel/profile.c
>> index a7bcd28d6e9f..d14805bdcc4c 100644
>> --- a/kernel/profile.c
>> +++ b/kernel/profile.c
>> @@ -336,7 +336,7 @@ static int profile_cpu_callback(struct notifier_block *info,
>> switch (action) {
>> case CPU_UP_PREPARE:
>> case CPU_UP_PREPARE_FROZEN:
>> - node = cpu_to_mem(cpu);
>> + node = cpu_to_node(cpu);
>> per_cpu(cpu_profile_flip, cpu) = 0;
>> if (!per_cpu(cpu_profile_hits, cpu)[1]) {
>> page = alloc_pages_exact_node(node,
--
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: Jiang Liu <jiang.liu@linux.intel.com>
To: David Rientjes <rientjes@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mgorman@suse.de>,
Mike Galbraith <umgwanakikbuti@gmail.com>,
Peter Zijlstra <peterz@infradead.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Tang Chen <tangchen@cn.fujitsu.com>, Tejun Heo <tj@kernel.org>,
Tony Luck <tony.luck@intel.com>,
linux-mm@kvack.org, linux-hotplug@vger.kernel.org,
linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [Patch V3 2/9] kernel/profile.c: Replace cpu_to_mem() with cpu_to_node()
Date: Wed, 19 Aug 2015 15:18:59 +0800 [thread overview]
Message-ID: <55D42DE3.2040506@linux.intel.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1508171730260.5527@chino.kir.corp.google.com>
On 2015/8/18 8:31, David Rientjes wrote:
> On Mon, 17 Aug 2015, Jiang Liu wrote:
>
>> Function profile_cpu_callback() allocates memory without specifying
>> __GFP_THISNODE flag, so replace cpu_to_mem() with cpu_to_node()
>> because cpu_to_mem() may cause suboptimal memory allocation if
>> there's no free memory on the node returned by cpu_to_mem().
>>
>
> Why is cpu_to_node() better with regard to free memory and NUMA locality?
Hi David,
Thanks for review. This is a special case pointed out by Tejun.
For the imagined topology, A<->B<->X<->C<->D, where A, B, C, D has
memory and X is memoryless.
Possible fallback lists are:
B: [ B, A, C, D]
X: [ B, C, A, D]
C: [ C, D, B, A]
cpu_to_mem(X) will either return B or C. Let's assume it returns B.
Then we will use "B: [ B, A, C, D]" to allocate memory for X, which
is not the optimal fallback list for X. And cpu_to_node(X) returns
X, and "X: [ B, C, A, D]" is the optimal fallback list for X.
Thanks!
Gerry
>
>> It's safe to use cpu_to_mem() because build_all_zonelists() also
>> builds suitable fallback zonelist for memoryless node.
>>
>
> Why reference that cpu_to_mem() is safe if you're changing away from it?
Sorry, it should be cpu_to_node() instead of cpu_to_mem().
>
>> Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
>> ---
>> kernel/profile.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/kernel/profile.c b/kernel/profile.c
>> index a7bcd28d6e9f..d14805bdcc4c 100644
>> --- a/kernel/profile.c
>> +++ b/kernel/profile.c
>> @@ -336,7 +336,7 @@ static int profile_cpu_callback(struct notifier_block *info,
>> switch (action) {
>> case CPU_UP_PREPARE:
>> case CPU_UP_PREPARE_FROZEN:
>> - node = cpu_to_mem(cpu);
>> + node = cpu_to_node(cpu);
>> per_cpu(cpu_profile_flip, cpu) = 0;
>> if (!per_cpu(cpu_profile_hits, cpu)[1]) {
>> page = alloc_pages_exact_node(node,
next prev parent reply other threads:[~2015-08-19 7:18 UTC|newest]
Thread overview: 130+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-17 3:18 [Patch V3 0/9] Enable memoryless node support for x86 Jiang Liu
2015-08-17 3:18 ` Jiang Liu
2015-08-17 3:18 ` Jiang Liu
2015-08-17 3:18 ` [Patch V3 1/9] x86, NUMA, ACPI: Online node earlier when doing CPU hot-addition Jiang Liu
2015-08-17 3:18 ` Jiang Liu
2015-08-17 3:18 ` Jiang Liu
2015-08-17 3:18 ` [Patch V3 2/9] kernel/profile.c: Replace cpu_to_mem() with cpu_to_node() Jiang Liu
2015-08-17 3:18 ` Jiang Liu
2015-08-17 3:18 ` Jiang Liu
2015-08-18 0:31 ` David Rientjes
2015-08-18 0:31 ` David Rientjes
2015-08-18 0:31 ` David Rientjes
2015-08-19 7:18 ` Jiang Liu [this message]
2015-08-19 7:18 ` Jiang Liu
2015-08-19 7:18 ` Jiang Liu
2015-08-20 0:00 ` David Rientjes
2015-08-20 0:00 ` David Rientjes
2015-08-20 0:00 ` David Rientjes
2015-10-09 2:35 ` Jiang Liu
2015-10-09 2:35 ` Jiang Liu
2015-10-09 2:35 ` Jiang Liu
2015-08-17 3:19 ` [Patch V3 3/9] sgi-xp: Replace cpu_to_node() with cpu_to_mem() to support memoryless node Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-18 0:25 ` David Rientjes
2015-08-18 0:25 ` David Rientjes
2015-08-18 0:25 ` David Rientjes
2015-08-19 8:20 ` Jiang Liu
2015-08-19 8:20 ` Jiang Liu
2015-08-19 8:20 ` Jiang Liu
2015-08-20 0:02 ` David Rientjes
2015-08-20 0:02 ` David Rientjes
2015-08-20 0:02 ` David Rientjes
2015-08-20 6:36 ` Jiang Liu
2015-08-20 6:36 ` Jiang Liu
2015-08-20 6:36 ` Jiang Liu
2015-10-09 5:04 ` Jiang Liu
2015-10-09 5:04 ` Jiang Liu
2015-10-09 5:04 ` Jiang Liu
2015-08-19 11:52 ` Robin Holt
2015-08-19 11:52 ` Robin Holt
2015-08-19 11:52 ` Robin Holt
2015-08-19 12:45 ` Jiang Liu
2015-08-19 12:45 ` Jiang Liu
2015-08-19 12:45 ` Jiang Liu
2015-08-17 3:19 ` [Patch V3 4/9] openvswitch: " Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-18 0:14 ` Pravin Shelar
2015-08-18 0:14 ` Pravin Shelar
2015-08-18 0:14 ` Pravin Shelar
2015-08-17 3:19 ` [Intel-wired-lan] [Patch V3 5/9] i40e: Use numa_mem_id() to better " Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-18 0:35 ` [Intel-wired-lan] " David Rientjes
2015-08-18 0:35 ` David Rientjes
2015-08-18 0:35 ` David Rientjes
2015-08-18 0:35 ` David Rientjes
2015-08-19 17:04 ` [Intel-wired-lan] " Bowers, AndrewX
2015-08-19 22:38 ` Patil, Kiran
2015-08-19 22:38 ` Patil, Kiran
2015-08-19 22:38 ` Patil, Kiran
2015-08-20 0:18 ` David Rientjes
2015-08-20 0:18 ` David Rientjes
2015-08-20 0:18 ` David Rientjes
2015-08-20 0:18 ` David Rientjes
2015-08-20 0:18 ` David Rientjes
2015-10-08 20:20 ` Andrew Morton
2015-10-08 20:20 ` Andrew Morton
2015-10-08 20:20 ` Andrew Morton
2015-10-08 20:20 ` Andrew Morton
2015-10-08 20:20 ` Andrew Morton
2015-10-09 5:52 ` Jiang Liu
2015-10-09 5:52 ` Jiang Liu
2015-10-09 5:52 ` Jiang Liu
2015-10-09 5:52 ` Jiang Liu
2015-10-09 5:52 ` Jiang Liu
2015-10-09 9:08 ` Kamezawa Hiroyuki
2015-10-09 9:08 ` Kamezawa Hiroyuki
2015-10-09 9:08 ` Kamezawa Hiroyuki
2015-10-09 9:08 ` Kamezawa Hiroyuki
2015-10-09 9:08 ` Kamezawa Hiroyuki
2015-10-09 9:25 ` Jiang Liu
2015-10-09 9:25 ` Jiang Liu
2015-10-09 9:25 ` Jiang Liu
2015-10-09 9:25 ` Jiang Liu
2015-10-09 9:25 ` Jiang Liu
2015-08-17 3:19 ` [Intel-wired-lan] [Patch V3 6/9] i40evf: " Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 19:03 ` [Intel-wired-lan] " Patil, Kiran
2015-08-17 19:03 ` Patil, Kiran
2015-08-17 19:03 ` Patil, Kiran
2015-08-18 21:34 ` Jeff Kirsher
2015-08-18 21:34 ` Jeff Kirsher
2015-08-17 3:19 ` [Patch V3 7/9] x86, numa: Kill useless code to improve code readability Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` [Patch V3 8/9] mm: Update _mem_id_[] for every possible CPU when memory configuration changes Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` [Patch V3 9/9] mm, x86: Enable memoryless node support to better support CPU/memory hotplug Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-17 3:19 ` Jiang Liu
2015-08-18 6:11 ` Tang Chen
2015-08-18 6:11 ` Tang Chen
2015-08-18 6:11 ` Tang Chen
2015-08-18 6:11 ` Tang Chen
2015-08-18 6:59 ` Jiang Liu
2015-08-18 6:59 ` Jiang Liu
2015-08-18 11:28 ` Tang Chen
2015-08-18 11:28 ` Tang Chen
2015-08-18 11:28 ` Tang Chen
2015-08-18 11:28 ` Tang Chen
2015-08-18 7:31 ` Ingo Molnar
2015-08-18 7:31 ` Ingo Molnar
2015-08-18 7:31 ` Ingo Molnar
2015-08-18 7:31 ` Ingo Molnar
2015-08-17 21:35 ` [Patch V3 0/9] Enable memoryless node support for x86 Andrew Morton
2015-08-17 21:35 ` Andrew Morton
2015-08-17 21:35 ` Andrew Morton
2015-08-18 10:02 ` Tang Chen
2015-08-18 10:02 ` Tang Chen
2015-08-18 10:02 ` Tang Chen
2015-08-19 8:09 ` Jiang Liu
2015-08-19 8:09 ` Jiang Liu
2015-08-19 8:09 ` Jiang Liu
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=55D42DE3.2040506@linux.intel.com \
--to=jiang.liu@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=linux-hotplug@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=peterz@infradead.org \
--cc=rafael.j.wysocki@intel.com \
--cc=rientjes@google.com \
--cc=tangchen@cn.fujitsu.com \
--cc=tj@kernel.org \
--cc=tony.luck@intel.com \
--cc=umgwanakikbuti@gmail.com \
--cc=x86@kernel.org \
/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.