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