rtla/timerlat: Do not stop user-space if a cpu is offline
authorDaniel Bristot de Oliveira <bristot@kernel.org>
Fri, 15 Sep 2023 13:02:32 +0000 (15:02 +0200)
committerDaniel Bristot de Oliveira <bristot@kernel.org>
Fri, 22 Sep 2023 12:43:46 +0000 (14:43 +0200)
If no CPU list is passed, timerlat in user-space will dispatch
one thread per sysconf(_SC_NPROCESSORS_CONF). However, not all
CPU might be available, for instance, if HT is disabled.

Currently, rtla timerlat is stopping the session if an user-space
thread cannot set affinity to a CPU, or if a running user-space
thread is killed. However, this is too restrictive.

So, reduce the error to a debug message, and rtla timerlat run as
long as there is at least one user-space thread alive.

Link: https://lore.kernel.org/lkml/59cf2c882900ab7de91c6ee33b382ac7fa6b4ed0.1694781909.git.bristot@kernel.org
Fixes: cdca4f4e5e8e ("rtla/timerlat_top: Add timerlat user-space support")
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
tools/tracing/rtla/src/timerlat_u.c

index 05e310696dd5c68fbfc99e6751dfc60b1ca6908f..01dbf9a6b5a51ed7592e3bed5a6d8d2d26342625 100644 (file)
@@ -45,7 +45,7 @@ static int timerlat_u_main(int cpu, struct timerlat_u_params *params)
 
        retval = sched_setaffinity(gettid(), sizeof(set), &set);
        if (retval == -1) {
-               err_msg("Error setting user thread affinity\n");
+               debug_msg("Error setting user thread affinity %d, is the CPU online?\n", cpu);
                exit(1);
        }
 
@@ -193,7 +193,9 @@ void *timerlat_u_dispatcher(void *data)
                                        procs_count--;
                                }
                        }
-                       break;
+
+                       if (!procs_count)
+                               break;
                }
 
                sleep(1);