All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] rteval: Allow user to enter compressed cpu-lists, fix reporting
@ 2022-08-09 21:47 John Kacur
  0 siblings, 0 replies; only message in thread
From: John Kacur @ 2022-08-09 21:47 UTC (permalink / raw)
  To: RT
  Cc: Clark Williams, Leah Leshchinsky, Valentin Schneider,
	Manasi Godse, John Kacur

Allow user to enter compressed cpu-lists (short form),
that is 0-4 instead of 0,1,2,3,4

Fix reporting, make sure that early reports consider offline cpus
For example
If the user specifies

su -c './rteval-cmd   -d5s --loads-cpulist=2-4 --measurement-cpulist=0,9-11'

but cpu3 has been turned off, then we should see the following

started 3 loads on cores 2,4
started measurement threads on cores 0,9-11

and not
started 3 loads on cores 2-4

So, to summarize the changes here
1. Allow user to input compressed cpulists
2. Fix reporting using the shortened form of the cpulists as well
3. Adds the method online_cpulist(self, cpulist) to SysTopology that
returns the same list after removing offline cpus
4. converts one print to an f-string for --only-loads
5. Adds some more DEBUG messages

Signed-off-by: John Kacur <jkacur@redhat.com>
---
 rteval-cmd            | 37 +++++++++++++++++++++++++++----------
 rteval/systopology.py |  6 +++++-
 2 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/rteval-cmd b/rteval-cmd
index 13fd5c6950b9..6a928362828f 100755
--- a/rteval-cmd
+++ b/rteval-cmd
@@ -49,10 +49,11 @@ from rteval import RtEval, rtevalConfig
 from rteval.modules.loads import LoadModules
 from rteval.modules.measurement import MeasurementModules
 from rteval.version import RTEVAL_VERSION
-from rteval.systopology import CpuList, SysTopology
+from rteval.systopology import CpuList, SysTopology, collapse_cpulist
 from rteval.modules.loads.kcompile import ModuleParameters
 
 compress_cpulist = CpuList.compress_cpulist
+expand_cpulist = CpuList.expand_cpulist
 
 def summarize(repfile, xslt):
     """ Summarize an already existing XML report """
@@ -199,6 +200,11 @@ def parse_options(cfg, parser, cmdargs):
 
     return cmd_args
 
+def remove_offline(cpulist):
+    """ return cpulist in collapsed compressed form with only online cpus """
+    tmplist = expand_cpulist(cpulist)
+    tmplist = SysTopology().online_cpulist(tmplist)
+    return collapse_cpulist(tmplist)
 
 
 if __name__ == '__main__':
@@ -322,17 +328,29 @@ if __name__ == '__main__':
             sys.exit(0)
 
 
-        # if we only specified one set of cpus (loads or measurement)
-        # default the other to the inverse of the specified list
         ldcfg = config.GetSection('loads')
         msrcfg = config.GetSection('measurement')
+        if ldcfg.cpulist and msrcfg.cpulist:
+            ldcfg.cpulist = remove_offline(ldcfg.cpulist)
+            msrcfg.cpulist = remove_offline(msrcfg.cpulist)
+        # if we only specified one set of cpus (loads or measurement)
+        # default the other to the inverse of the specified list
         if not ldcfg.cpulist and msrcfg.cpulist:
-            invlist = SysTopology().invert_cpulist(msrcfg.cpulist)
-            ldcfg.cpulist = compress_cpulist(invlist)
+            tmplist = expand_cpulist(msrcfg.cpulist)
+            tmplist = SysTopology().invert_cpulist(tmplist)
+            ldcfg.cpulist = compress_cpulist(tmplist)
+            msrcfg.cpulist = remove_offline(msrcfg.cpulist)
         if not msrcfg.cpulist and ldcfg.cpulist:
-            invlist = SysTopology().invert_cpulist(ldcfg.cpulist)
-            msrcfg.cpulist = compress_cpulist(invlist)
-
+            tmplist = expand_cpulist(ldcfg.cpulist)
+            tmplist = SysTopology().invert_cpulist(tmplist)
+            msrcfg.cpulist = compress_cpulist(tmplist)
+            ldcfg.cpulist = remove_offline(ldcfg.cpulist)
+
+        if ldcfg.cpulist:
+            logger.log(Log.DEBUG, f"loads cpulist: {ldcfg.cpulist}")
+        # if --onlyload is specified msrcfg.cpulist is unused
+        if msrcfg.cpulist and not rtevcfg.onlyload:
+            logger.log(Log.DEBUG, f"measurement cpulist: {msrcfg.cpulist}")
         logger.log(Log.DEBUG, f"workdir: {rtevcfg.workdir}")
 
         # if --summarize was specified then just parse the XML, print it and exit
@@ -374,8 +392,7 @@ if __name__ == '__main__':
             # No reports will be created.
             loadmods.Start()
             nthreads = loadmods.Unleash()
-            logger.log(Log.INFO, "Started %i load threads - will run for %f seconds" % (
-                nthreads, rtevcfg.duration))
+            logger.log(Log.INFO, f"Started {nthreads} load threads - will run for {rtevcfg.duration} seconds")
             logger.log(Log.INFO, "No measurements will be performed, due to the --onlyload option")
             time.sleep(rtevcfg.duration)
             loadmods.Stop()
diff --git a/rteval/systopology.py b/rteval/systopology.py
index ce8d02cf7318..26332c30bb0e 100644
--- a/rteval/systopology.py
+++ b/rteval/systopology.py
@@ -329,7 +329,11 @@ class SysTopology:
 
     def invert_cpulist(self, cpulist):
         """ return a list of online cpus not in cpulist """
-        return [c for c in self.online_cpus_str() if c not in cpulist]
+        return [c for c in self.online_cpus() if c not in cpulist]
+
+    def online_cpulist(self, cpulist):
+        """ return a list of online cpus in cpulist """
+        return [c for c in self.online_cpus() if c in cpulist]
 
 if __name__ == "__main__":
 
-- 
2.37.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-08-09 21:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-09 21:47 [PATCH] rteval: Allow user to enter compressed cpu-lists, fix reporting John Kacur

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.