[PATCH] rteval: Allow user to enter compressed cpu-lists, fix reporting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 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




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux