All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] tracing/hwlat: Replace sched_setaffinity with set_cpus_allowed_ptr
@ 2023-03-16 14:45 Costa Shulyupin
  2023-03-16 17:15 ` Daniel Bristot de Oliveira
  0 siblings, 1 reply; 2+ messages in thread
From: Costa Shulyupin @ 2023-03-16 14:45 UTC (permalink / raw)
  To: Steven Rostedt, Daniel Bristot de Oliveira, Masami Hiramatsu,
	open list:TRACING, open list:TRACING
  Cc: bwensley, constantine.shulyupin, Costa Shulyupin

There is a problem with the behavior of hwlat in a container,
resulting in incorrect output. A warning message is generated:
"cpumask changed while in round-robin mode, switching to mode none",
and the tracing_cpumask is ignored. This issue arises because
the kernel thread, hwlatd, is not a part of the container, and
the function sched_setaffinity is unable to locate it using its PID.
Additionally, the task_struct of hwlatd is already known.
Ultimately, the function set_cpus_allowed_ptr achieves
the same outcome as sched_setaffinity, but employs task_struct
instead of PID.

Test case:

  # cd /sys/kernel/tracing
  # echo 0 > tracing_on
  # echo round-robin > hwlat_detector/mode
  # echo hwlat > current_tracer
  # unshare --fork --pid bash -c 'echo 1 > tracing_on'
  # dmesg -c

Actual behavior:

[573502.809060] hwlat_detector: cpumask changed while in round-robin mode, switching to mode none

Signed-off-by: Costa Shulyupin <costa.shul@redhat.com>
---
 kernel/trace/trace_hwlat.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c
index d440ddd5fd8b..444dfc31f258 100644
--- a/kernel/trace/trace_hwlat.c
+++ b/kernel/trace/trace_hwlat.c
@@ -339,7 +339,7 @@ static void move_to_next_cpu(void)
 	cpumask_clear(current_mask);
 	cpumask_set_cpu(next_cpu, current_mask);
 
-	sched_setaffinity(0, current_mask);
+	set_cpus_allowed_ptr(current, current_mask);
 	return;
 
  change_mode:
@@ -446,7 +446,7 @@ static int start_single_kthread(struct trace_array *tr)
 
 	}
 
-	sched_setaffinity(kthread->pid, current_mask);
+	set_cpus_allowed_ptr(kthread, current_mask);
 
 	kdata->kthread = kthread;
 	wake_up_process(kthread);
-- 
2.39.2


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

* Re: [PATCH] tracing/hwlat: Replace sched_setaffinity with set_cpus_allowed_ptr
  2023-03-16 14:45 [PATCH] tracing/hwlat: Replace sched_setaffinity with set_cpus_allowed_ptr Costa Shulyupin
@ 2023-03-16 17:15 ` Daniel Bristot de Oliveira
  0 siblings, 0 replies; 2+ messages in thread
From: Daniel Bristot de Oliveira @ 2023-03-16 17:15 UTC (permalink / raw)
  To: Costa Shulyupin, Steven Rostedt, Masami Hiramatsu,
	open list:TRACING, open list:TRACING
  Cc: bwensley, constantine.shulyupin

On 3/16/23 15:45, Costa Shulyupin wrote:
> There is a problem with the behavior of hwlat in a container,
> resulting in incorrect output. A warning message is generated:
> "cpumask changed while in round-robin mode, switching to mode none",
> and the tracing_cpumask is ignored. This issue arises because
> the kernel thread, hwlatd, is not a part of the container, and
> the function sched_setaffinity is unable to locate it using its PID.
> Additionally, the task_struct of hwlatd is already known.
> Ultimately, the function set_cpus_allowed_ptr achieves
> the same outcome as sched_setaffinity, but employs task_struct
> instead of PID.
> 
> Test case:
> 
>   # cd /sys/kernel/tracing
>   # echo 0 > tracing_on
>   # echo round-robin > hwlat_detector/mode
>   # echo hwlat > current_tracer
>   # unshare --fork --pid bash -c 'echo 1 > tracing_on'
>   # dmesg -c
> 
> Actual behavior:
> 
> [573502.809060] hwlat_detector: cpumask changed while in round-robin mode, switching to mode none
> 
> Signed-off-by: Costa Shulyupin <costa.shul@redhat.com>

I tested it and... it works.

Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>

Thanks
-- Daniel

> ---
>  kernel/trace/trace_hwlat.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c
> index d440ddd5fd8b..444dfc31f258 100644
> --- a/kernel/trace/trace_hwlat.c
> +++ b/kernel/trace/trace_hwlat.c
> @@ -339,7 +339,7 @@ static void move_to_next_cpu(void)
>  	cpumask_clear(current_mask);
>  	cpumask_set_cpu(next_cpu, current_mask);
>  
> -	sched_setaffinity(0, current_mask);
> +	set_cpus_allowed_ptr(current, current_mask);
>  	return;
>  
>   change_mode:
> @@ -446,7 +446,7 @@ static int start_single_kthread(struct trace_array *tr)
>  
>  	}
>  
> -	sched_setaffinity(kthread->pid, current_mask);
> +	set_cpus_allowed_ptr(kthread, current_mask);
>  
>  	kdata->kthread = kthread;
>  	wake_up_process(kthread);


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

end of thread, other threads:[~2023-03-16 17:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-16 14:45 [PATCH] tracing/hwlat: Replace sched_setaffinity with set_cpus_allowed_ptr Costa Shulyupin
2023-03-16 17:15 ` Daniel Bristot de Oliveira

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.