mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/2] sched/numa: skip VMA scanning on memory pinned
@ 2025-03-27  0:23 Libo Chen
  2025-03-27  0:23 ` [PATCH v2 1/2] sched/numa: skip VMA scanning on memory pinned to one NUMA node via cpuset.mems Libo Chen
  2025-03-27  0:23 ` [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning Libo Chen
  0 siblings, 2 replies; 11+ messages in thread
From: Libo Chen @ 2025-03-27  0:23 UTC (permalink / raw)
  To: peterz, mgorman, longman; +Cc: linux-kernel, mingo, tj

v1->v2:
1. add perf improvment numbers in commit log. Yet to find perf diff on
will-it-scale, so not included here. Plan to run more workloads.
2. add tracepoint.
3. To peterz's comment, this will make it impossible to attract tasks to
those memory just like other VMA skippings. This is the current
implementation, I think we can improve that in the future, but at the
moment it's probabaly better to keep it consistent.


Libo Chen (2):
  sched/numa: skip VMA scanning on memory pinned to one NUMA node via
    cpuset.mems
  sched/numa: Add tracepoint that tracks the skipping of numa balancing
    due to cpuset memory pinning

 include/trace/events/sched.h | 31 +++++++++++++++++++++++++++++++
 kernel/sched/fair.c          |  9 +++++++++
 2 files changed, 40 insertions(+)

-- 
2.43.5


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 1/2] sched/numa: skip VMA scanning on memory pinned to one NUMA node via cpuset.mems
  2025-03-27  0:23 [PATCH v2 0/2] sched/numa: skip VMA scanning on memory pinned Libo Chen
@ 2025-03-27  0:23 ` Libo Chen
  2025-04-01 13:23   ` Mel Gorman
  2025-03-27  0:23 ` [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning Libo Chen
  1 sibling, 1 reply; 11+ messages in thread
From: Libo Chen @ 2025-03-27  0:23 UTC (permalink / raw)
  To: peterz, mgorman, longman; +Cc: linux-kernel, mingo, tj

When the memory of the current task is pinned to one NUMA node by cgroup,
there is no point in continuing the rest of VMA scanning and hinting page
faults as they will just be overhead. With this change, there will be no
more unnecessary PTE updates or page faults in this scenario.

We have seen up to a 6x improvement on a typical java workload running on
VMs with memory and CPU pinned to one NUMA node via cpuset in a two-socket
AARCH64 system. With the same pinning, on a 18-cores-per-socket Intel
platform, we have seen 20% improvment in a microbench that creates a
30-vCPU selftest KVM guest with 4GB memory, where each vCPU reads 4KB
pages in a fixed number of loops.

Signed-off-by: Libo Chen <libo.chen@oracle.com>
---
 kernel/sched/fair.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index e43993a4e5807..6f405e00c9c7e 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3329,6 +3329,13 @@ static void task_numa_work(struct callback_head *work)
 	if (p->flags & PF_EXITING)
 		return;
 
+	/*
+	 * Memory is pinned to only one NUMA node via cpuset.mems, naturally
+	 * no page can be migrated.
+	 */
+	if (nodes_weight(cpuset_current_mems_allowed) == 1)
+		return;
+
 	if (!mm->numa_next_scan) {
 		mm->numa_next_scan = now +
 			msecs_to_jiffies(sysctl_numa_balancing_scan_delay);
-- 
2.43.5


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning
  2025-03-27  0:23 [PATCH v2 0/2] sched/numa: skip VMA scanning on memory pinned Libo Chen
  2025-03-27  0:23 ` [PATCH v2 1/2] sched/numa: skip VMA scanning on memory pinned to one NUMA node via cpuset.mems Libo Chen
@ 2025-03-27  0:23 ` Libo Chen
  2025-03-27  0:40   ` Libo Chen
  1 sibling, 1 reply; 11+ messages in thread
From: Libo Chen @ 2025-03-27  0:23 UTC (permalink / raw)
  To: peterz, mgorman, longman; +Cc: linux-kernel, mingo, tj

Unlike sched_skip_vma_numa tracepoint which tracks skipped VMAs, this
tracks the task subjected to cpuset.mems pinning and prints out its
allowed memory node mask.
---
 include/trace/events/sched.h | 31 +++++++++++++++++++++++++++++++
 kernel/sched/fair.c          |  4 +++-
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index bfd97cce40a1a..133d9a671734a 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -745,6 +745,37 @@ TRACE_EVENT(sched_skip_vma_numa,
 		  __entry->vm_end,
 		  __print_symbolic(__entry->reason, NUMAB_SKIP_REASON))
 );
+
+TRACE_EVENT(sched_skip_cpuset_numa,
+
+	TP_PROTO(struct task_struct *tsk, nodemask_t *mem_allowed_ptr),
+
+	TP_ARGS(tsk, mem_allowed_ptr),
+
+	TP_STRUCT__entry(
+		__array( char,		comm,		TASK_COMM_LEN		)
+		__field( pid_t,		pid					)
+		__field( pid_t,		tgid					)
+		__field( pid_t,		ngid					)
+		__array( unsigned long, mem_allowed, BITS_TO_LONGS(MAX_NUMNODES))
+	),
+
+	TP_fast_assign(
+		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
+		__entry->pid		 = task_pid_nr(tsk);
+		__entry->tgid		 = task_tgid_nr(tsk);
+		__entry->ngid		 = task_numa_group_id(tsk);
+		memcpy(__entry->mem_allowed, mem_allowed_ptr->bits,
+		       sizeof(__entry->mem_allowed));
+	),
+
+	TP_printk("comm=%s pid=%d tgid=%d ngid=%d mem_node_allowed_mask=%lx",
+		  __entry->comm,
+		  __entry->pid,
+		  __entry->tgid,
+		  __entry->ngid,
+		  __entry->mem_allowed[0])
+);
 #endif /* CONFIG_NUMA_BALANCING */
 
 /*
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 6f405e00c9c7e..a98842a96eda0 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3333,8 +3333,10 @@ static void task_numa_work(struct callback_head *work)
 	 * Memory is pinned to only one NUMA node via cpuset.mems, naturally
 	 * no page can be migrated.
 	 */
-	if (nodes_weight(cpuset_current_mems_allowed) == 1)
+	if (nodes_weight(cpuset_current_mems_allowed) == 1) {
+		trace_sched_skip_cpuset_numa(current, &cpuset_current_mems_allowed);
 		return;
+	}
 
 	if (!mm->numa_next_scan) {
 		mm->numa_next_scan = now +
-- 
2.43.5


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning
  2025-03-27  0:23 ` [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning Libo Chen
@ 2025-03-27  0:40   ` Libo Chen
  2025-03-27  2:06     ` Steven Rostedt
  0 siblings, 1 reply; 11+ messages in thread
From: Libo Chen @ 2025-03-27  0:40 UTC (permalink / raw)
  To: peterz, mgorman, longman, Steven Rostedt; +Cc: linux-kernel, mingo, tj

forgot to add Steven Rostedt.

On 3/26/25 17:23, Libo Chen wrote:
> Unlike sched_skip_vma_numa tracepoint which tracks skipped VMAs, this
> tracks the task subjected to cpuset.mems pinning and prints out its
> allowed memory node mask.
> ---
>  include/trace/events/sched.h | 31 +++++++++++++++++++++++++++++++
>  kernel/sched/fair.c          |  4 +++-
>  2 files changed, 34 insertions(+), 1 deletion(-)
> 
> diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
> index bfd97cce40a1a..133d9a671734a 100644
> --- a/include/trace/events/sched.h
> +++ b/include/trace/events/sched.h
> @@ -745,6 +745,37 @@ TRACE_EVENT(sched_skip_vma_numa,
>  		  __entry->vm_end,
>  		  __print_symbolic(__entry->reason, NUMAB_SKIP_REASON))
>  );
> +
> +TRACE_EVENT(sched_skip_cpuset_numa,
> +
> +	TP_PROTO(struct task_struct *tsk, nodemask_t *mem_allowed_ptr),
> +
> +	TP_ARGS(tsk, mem_allowed_ptr),
> +
> +	TP_STRUCT__entry(
> +		__array( char,		comm,		TASK_COMM_LEN		)
> +		__field( pid_t,		pid					)
> +		__field( pid_t,		tgid					)
> +		__field( pid_t,		ngid					)
> +		__array( unsigned long, mem_allowed, BITS_TO_LONGS(MAX_NUMNODES))
> +	),
> +
> +	TP_fast_assign(
> +		memcpy(__entry->comm, tsk->comm, TASK_COMM_LEN);
> +		__entry->pid		 = task_pid_nr(tsk);
> +		__entry->tgid		 = task_tgid_nr(tsk);
> +		__entry->ngid		 = task_numa_group_id(tsk);
> +		memcpy(__entry->mem_allowed, mem_allowed_ptr->bits,
> +		       sizeof(__entry->mem_allowed));
> +	),
> +
> +	TP_printk("comm=%s pid=%d tgid=%d ngid=%d mem_node_allowed_mask=%lx",


I cannot find a way to print out nodemask_t nicely here with %*pbl.
So I fall back to just raw hex value. Will be grateful if someone
knows a better way to print nodemask nicely in a tracepoint  


> +		  __entry->comm,
> +		  __entry->pid,
> +		  __entry->tgid,
> +		  __entry->ngid,
> +		  __entry->mem_allowed[0])
> +);
>  #endif /* CONFIG_NUMA_BALANCING */
>  
>  /*
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 6f405e00c9c7e..a98842a96eda0 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -3333,8 +3333,10 @@ static void task_numa_work(struct callback_head *work)
>  	 * Memory is pinned to only one NUMA node via cpuset.mems, naturally
>  	 * no page can be migrated.
>  	 */
> -	if (nodes_weight(cpuset_current_mems_allowed) == 1)
> +	if (nodes_weight(cpuset_current_mems_allowed) == 1) {
> +		trace_sched_skip_cpuset_numa(current, &cpuset_current_mems_allowed);
>  		return;
> +	}
>  
>  	if (!mm->numa_next_scan) {
>  		mm->numa_next_scan = now +


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning
  2025-03-27  0:40   ` Libo Chen
@ 2025-03-27  2:06     ` Steven Rostedt
  2025-03-27  4:32       ` Libo Chen
  0 siblings, 1 reply; 11+ messages in thread
From: Steven Rostedt @ 2025-03-27  2:06 UTC (permalink / raw)
  To: Libo Chen; +Cc: peterz, mgorman, longman, linux-kernel, mingo, tj

On Wed, 26 Mar 2025 17:40:02 -0700
Libo Chen <libo.chen@oracle.com> wrote:

> > +	TP_printk("comm=%s pid=%d tgid=%d ngid=%d mem_node_allowed_mask=%lx",  
> 
> 
> I cannot find a way to print out nodemask_t nicely here with %*pbl.
> So I fall back to just raw hex value. Will be grateful if someone
> knows a better way to print nodemask nicely in a tracepoint  

Ug.

I guess I need to add support for that. Both in the boot verifier as well
as in libtraceevent.

-- Steve

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning
  2025-03-27  2:06     ` Steven Rostedt
@ 2025-03-27  4:32       ` Libo Chen
  2025-03-27 14:03         ` Steven Rostedt
  0 siblings, 1 reply; 11+ messages in thread
From: Libo Chen @ 2025-03-27  4:32 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: peterz, mgorman, longman, linux-kernel, mingo, tj



On 3/26/25 19:06, Steven Rostedt wrote:
> On Wed, 26 Mar 2025 17:40:02 -0700
> Libo Chen <libo.chen@oracle.com> wrote:
> 
>>> +	TP_printk("comm=%s pid=%d tgid=%d ngid=%d mem_node_allowed_mask=%lx",  
>>
>>
>> I cannot find a way to print out nodemask_t nicely here with %*pbl.
>> So I fall back to just raw hex value. Will be grateful if someone
>> knows a better way to print nodemask nicely in a tracepoint  
> 
> Ug.
> 
> I guess I need to add support for that. Both in the boot verifier as well
> as in libtraceevent.
> 

That will be fantastic, I think this is quite useful.

Thanks,
Libo

> -- Steve


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning
  2025-03-27  4:32       ` Libo Chen
@ 2025-03-27 14:03         ` Steven Rostedt
  2025-03-28 22:28           ` Libo Chen
  0 siblings, 1 reply; 11+ messages in thread
From: Steven Rostedt @ 2025-03-27 14:03 UTC (permalink / raw)
  To: Libo Chen; +Cc: peterz, mgorman, longman, linux-kernel, mingo, tj

On Wed, 26 Mar 2025 21:32:32 -0700
Libo Chen <libo.chen@oracle.com> wrote:

> On 3/26/25 19:06, Steven Rostedt wrote:
> > On Wed, 26 Mar 2025 17:40:02 -0700
> > Libo Chen <libo.chen@oracle.com> wrote:
> >   
> >>> +	TP_printk("comm=%s pid=%d tgid=%d ngid=%d mem_node_allowed_mask=%lx",    
> >>
> >>
> >> I cannot find a way to print out nodemask_t nicely here with %*pbl.
> >> So I fall back to just raw hex value. Will be grateful if someone
> >> knows a better way to print nodemask nicely in a tracepoint    
> > 
> > Ug.
> > 
> > I guess I need to add support for that. Both in the boot verifier as well
> > as in libtraceevent.
> >   
> 
> That will be fantastic, I think this is quite useful.

I'm curious to what was broken. Just the user space side? Or was the kernel
side broken too?

I notice that i2c_write has "[%*phD]" which means it worked, and also
skipped out on the verification tests. This should be fixed.

But trace-cmd and perf will not be able to print that out either.

Now %*pbl works in the kernel (not checked), but probably doesn't work for
trace-cmd.

-- Steve

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning
  2025-03-27 14:03         ` Steven Rostedt
@ 2025-03-28 22:28           ` Libo Chen
  2025-03-28 23:16             ` Libo Chen
  0 siblings, 1 reply; 11+ messages in thread
From: Libo Chen @ 2025-03-28 22:28 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: peterz, mgorman, longman, linux-kernel, mingo, tj



On 3/27/25 07:03, Steven Rostedt wrote:
> On Wed, 26 Mar 2025 21:32:32 -0700
> Libo Chen <libo.chen@oracle.com> wrote:
> 
>> On 3/26/25 19:06, Steven Rostedt wrote:
>>> On Wed, 26 Mar 2025 17:40:02 -0700
>>> Libo Chen <libo.chen@oracle.com> wrote:
>>>   
>>>>> +	TP_printk("comm=%s pid=%d tgid=%d ngid=%d mem_node_allowed_mask=%lx",    
>>>>
>>>>
>>>> I cannot find a way to print out nodemask_t nicely here with %*pbl.
>>>> So I fall back to just raw hex value. Will be grateful if someone
>>>> knows a better way to print nodemask nicely in a tracepoint    
>>>
>>> Ug.
>>>
>>> I guess I need to add support for that. Both in the boot verifier as well
>>> as in libtraceevent.
>>>   
>>
>> That will be fantastic, I think this is quite useful.
>

Oops just saw this right now, not sure how I missed it.
 
> I'm curious to what was broken. Just the user space side? Or was the kernel
> side broken too?
> 

That's a good point, I originally only tried %*pbl with trace-cmd, but I
tested your patch without trace-cmd. So yeah %*pbl may already be working in
the kernel, I will report back later today.

-- Libo

> I notice that i2c_write has "[%*phD]" which means it worked, and also
> skipped out on the verification tests. This should be fixed.
> 
> But trace-cmd and perf will not be able to print that out either.
> 
> Now %*pbl works in the kernel (not checked), but probably doesn't work for
> trace-cmd.
> 
> -- Steve


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning
  2025-03-28 22:28           ` Libo Chen
@ 2025-03-28 23:16             ` Libo Chen
  0 siblings, 0 replies; 11+ messages in thread
From: Libo Chen @ 2025-03-28 23:16 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: peterz, mgorman, longman, linux-kernel, mingo, tj



On 3/28/25 15:28, Libo Chen wrote:
> 
> 
> On 3/27/25 07:03, Steven Rostedt wrote:
>> On Wed, 26 Mar 2025 21:32:32 -0700
>> Libo Chen <libo.chen@oracle.com> wrote:
>>
>>> On 3/26/25 19:06, Steven Rostedt wrote:
>>>> On Wed, 26 Mar 2025 17:40:02 -0700
>>>> Libo Chen <libo.chen@oracle.com> wrote:
>>>>   
>>>>>> +	TP_printk("comm=%s pid=%d tgid=%d ngid=%d mem_node_allowed_mask=%lx",    
>>>>>
>>>>>
>>>>> I cannot find a way to print out nodemask_t nicely here with %*pbl.
>>>>> So I fall back to just raw hex value. Will be grateful if someone
>>>>> knows a better way to print nodemask nicely in a tracepoint    
>>>>
>>>> Ug.
>>>>
>>>> I guess I need to add support for that. Both in the boot verifier as well
>>>> as in libtraceevent.
>>>>   
>>>
>>> That will be fantastic, I think this is quite useful.
>>
> 
> Oops just saw this right now, not sure how I missed it.
>  
>> I'm curious to what was broken. Just the user space side? Or was the kernel
>> side broken too?
>>
> 
> That's a good point, I originally only tried %*pbl with trace-cmd, but I
> tested your patch without trace-cmd. So yeah %*pbl may already be working in
> the kernel, I will report back later today.
> 
> -- Libo
> 

Okay yes, it does prints out to trace log. Not seeing the output is due to the
userspace tool not the lack of check. 

-- Libo

>> I notice that i2c_write has "[%*phD]" which means it worked, and also
>> skipped out on the verification tests. This should be fixed.
>>
>> But trace-cmd and perf will not be able to print that out either.
>>
>> Now %*pbl works in the kernel (not checked), but probably doesn't work for
>> trace-cmd.
>>
>> -- Steve
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] sched/numa: skip VMA scanning on memory pinned to one NUMA node via cpuset.mems
  2025-03-27  0:23 ` [PATCH v2 1/2] sched/numa: skip VMA scanning on memory pinned to one NUMA node via cpuset.mems Libo Chen
@ 2025-04-01 13:23   ` Mel Gorman
  2025-04-01 17:43     ` Libo Chen
  0 siblings, 1 reply; 11+ messages in thread
From: Mel Gorman @ 2025-04-01 13:23 UTC (permalink / raw)
  To: Libo Chen; +Cc: peterz, longman, linux-kernel, mingo, tj

On Wed, Mar 26, 2025 at 05:23:51PM -0700, Libo Chen wrote:
> When the memory of the current task is pinned to one NUMA node by cgroup,
> there is no point in continuing the rest of VMA scanning and hinting page
> faults as they will just be overhead. With this change, there will be no
> more unnecessary PTE updates or page faults in this scenario.
> 
> We have seen up to a 6x improvement on a typical java workload running on
> VMs with memory and CPU pinned to one NUMA node via cpuset in a two-socket
> AARCH64 system. With the same pinning, on a 18-cores-per-socket Intel
> platform, we have seen 20% improvment in a microbench that creates a
> 30-vCPU selftest KVM guest with 4GB memory, where each vCPU reads 4KB
> pages in a fixed number of loops.
> 
> Signed-off-by: Libo Chen <libo.chen@oracle.com>
> ---
>  kernel/sched/fair.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index e43993a4e5807..6f405e00c9c7e 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -3329,6 +3329,13 @@ static void task_numa_work(struct callback_head *work)
>  	if (p->flags & PF_EXITING)
>  		return;
>  
> +	/*
> +	 * Memory is pinned to only one NUMA node via cpuset.mems, naturally
> +	 * no page can be migrated.
> +	 */
> +	if (nodes_weight(cpuset_current_mems_allowed) == 1)
> +		return;
> +

Check cpusets_enabled() first?

-- 
Mel Gorman
SUSE Labs

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] sched/numa: skip VMA scanning on memory pinned to one NUMA node via cpuset.mems
  2025-04-01 13:23   ` Mel Gorman
@ 2025-04-01 17:43     ` Libo Chen
  0 siblings, 0 replies; 11+ messages in thread
From: Libo Chen @ 2025-04-01 17:43 UTC (permalink / raw)
  To: Mel Gorman; +Cc: peterz, longman, linux-kernel, mingo, tj



On 4/1/25 06:23, Mel Gorman wrote:
> On Wed, Mar 26, 2025 at 05:23:51PM -0700, Libo Chen wrote:
>> When the memory of the current task is pinned to one NUMA node by cgroup,
>> there is no point in continuing the rest of VMA scanning and hinting page
>> faults as they will just be overhead. With this change, there will be no
>> more unnecessary PTE updates or page faults in this scenario.
>>
>> We have seen up to a 6x improvement on a typical java workload running on
>> VMs with memory and CPU pinned to one NUMA node via cpuset in a two-socket
>> AARCH64 system. With the same pinning, on a 18-cores-per-socket Intel
>> platform, we have seen 20% improvment in a microbench that creates a
>> 30-vCPU selftest KVM guest with 4GB memory, where each vCPU reads 4KB
>> pages in a fixed number of loops.
>>
>> Signed-off-by: Libo Chen <libo.chen@oracle.com>
>> ---
>>  kernel/sched/fair.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
>> index e43993a4e5807..6f405e00c9c7e 100644
>> --- a/kernel/sched/fair.c
>> +++ b/kernel/sched/fair.c
>> @@ -3329,6 +3329,13 @@ static void task_numa_work(struct callback_head *work)
>>  	if (p->flags & PF_EXITING)
>>  		return;
>>  
>> +	/*
>> +	 * Memory is pinned to only one NUMA node via cpuset.mems, naturally
>> +	 * no page can be migrated.
>> +	 */
>> +	if (nodes_weight(cpuset_current_mems_allowed) == 1)
>> +		return;
>> +
> 
> Check cpusets_enabled() first?
> 

Hi Mel,

Yeah, can add that but isn't a bit redundant since nodes_weight(cpuset_current_mems_allowed) will just return #nodes which doesn't equal to 1 when !cpusets_enabled() and there are >= 2 numa nodes? 


Libo

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2025-04-01 17:44 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-27  0:23 [PATCH v2 0/2] sched/numa: skip VMA scanning on memory pinned Libo Chen
2025-03-27  0:23 ` [PATCH v2 1/2] sched/numa: skip VMA scanning on memory pinned to one NUMA node via cpuset.mems Libo Chen
2025-04-01 13:23   ` Mel Gorman
2025-04-01 17:43     ` Libo Chen
2025-03-27  0:23 ` [PATCH v2 2/2] sched/numa: Add tracepoint that tracks the skipping of numa balancing due to cpuset memory pinning Libo Chen
2025-03-27  0:40   ` Libo Chen
2025-03-27  2:06     ` Steven Rostedt
2025-03-27  4:32       ` Libo Chen
2025-03-27 14:03         ` Steven Rostedt
2025-03-28 22:28           ` Libo Chen
2025-03-28 23:16             ` Libo Chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®