[PATCH 2/7] rteval: Add --cleanup-cpusets flag to remove leftover cpusets

John Kacur <[email protected]> Thu, 30 Apr 2026 15:31:39 -0400
Newsgroups org.kernel.vger.linux-rt-users
Message-ID <[email protected]>
Add a new command-line flag --cleanup-cpusets that removes any
leftover rteval cpusets from previous runs and exits. This is useful
when rteval was killed and didn't clean up properly, or when users
want to manually clean up without starting a new rteval run.

The cleanup function already existed and runs automatically at
startup when using --cpusets, but this flag makes it available
as a standalone utility command.

Changes:
- rteval-cmd: Add --cleanup-cpusets argument and early handler
- rteval/cpusetmanager.py: Change log level to INFO for "no cpusets
  found" message so users get feedback when running --cleanup-cpusets

Example usage:
  sudo ./rteval-cmd --cleanup-cpusets

Assisted-by: Claude Sonnet 4.5 <[email protected]>
Signed-off-by: John Kacur <[email protected]>
---
 rteval-cmd              | 11 +++++++++++
 rteval/cpusetmanager.py |  2 +-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/rteval-cmd b/rteval-cmd
index 57f360dc95b0..eddbe9c97008 100755
--- a/rteval-cmd
+++ b/rteval-cmd
@@ -122,6 +122,9 @@ def parse_options(cfg, parser, cmdargs):
     parser.add_argument("--cpusets", dest="rteval___cpusets",
                       action="store_true", default=False,
                       help="use cgroup v2 cpusets to isolate measurement, load, and housekeeping workloads")
+    parser.add_argument("--cleanup-cpusets", dest="rteval___cleanup_cpusets",
+                      action="store_true", default=False,
+                      help="remove any leftover rteval cpusets from previous runs and exit")
     parser.add_argument("-s", "--sysreport", dest="rteval___sysreport",
                       action="store_true", default=rtevcfg.sysreport,
                       help=f'run sysreport to collect system data (default: {rtevcfg.sysreport})')
@@ -167,6 +170,14 @@ def parse_options(cfg, parser, cmdargs):
         print(f"rteval version {RTEVAL_VERSION}")
         sys.exit(0)
 
+    if cmd_opts.rteval___cleanup_cpusets:
+        from rteval.cpusetmanager import CpusetManager
+        from rteval.Log import Log
+        logger = Log()
+        logger.SetLogVerbosity(Log.INFO)
+        CpusetManager.cleanup_leftover_cpusets(logger)
+        sys.exit(0)
+
     if cmd_opts.rteval___duration:
         mult = 1.0
         v = cmd_opts.rteval___duration.lower()
diff --git a/rteval/cpusetmanager.py b/rteval/cpusetmanager.py
index d015e0130d54..55f57580d5fa 100644
--- a/rteval/cpusetmanager.py
+++ b/rteval/cpusetmanager.py
@@ -41,7 +41,7 @@ class CpusetManager:
         """
         cpuset_dirs = glob.glob('/sys/fs/cgroup/rteval_*/')
         if not cpuset_dirs:
-            logger.log(Log.DEBUG, "No leftover rteval cpusets found")
+            logger.log(Log.INFO, "No leftover rteval cpusets found")
             return
 
         logger.log(Log.INFO, f"Cleaning up {len(cpuset_dirs)} leftover rteval cpusets from previous run")
-- 
2.54.0