* [PATCH 0/3] rteval: Add cmdline option to run measurements on isolcpus by default
@ 2023-08-10 9:01 Tomas Glozar
2023-08-10 9:01 ` [PATCH 1/3] rteval: Allow arguments specific to module group Tomas Glozar
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Tomas Glozar @ 2023-08-10 9:01 UTC (permalink / raw)
To: linux-rt-users; +Cc: jkacur, Tomas Glozar
A common usecase for rteval is estimating the performance of workloads
running on isolated CPUs. rteval does not run measurement on isolated CPUs by
default (i.e. without --measurement-cpulist specified).
Add option --measurement-run-on-isolcpus that adds isolated CPUs to the default
cpulist together with rteval.conf [measurement] option run-on-isolcpus with
the same effect.
Tomas Glozar (3):
rteval: Allow arguments specific to module group
rteval: Add run_on_isolcpus option to measurements
rteval: Support run-on-isolcpus in cyclictest
rteval/modules/__init__.py | 18 ++++++++++--------
rteval/modules/measurement/__init__.py | 17 ++++++++++++++---
rteval/modules/measurement/cyclictest.py | 12 ++++++++++--
3 files changed, 34 insertions(+), 13 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] rteval: Allow arguments specific to module group
2023-08-10 9:01 [PATCH 0/3] rteval: Add cmdline option to run measurements on isolcpus by default Tomas Glozar
@ 2023-08-10 9:01 ` Tomas Glozar
2023-08-10 9:01 ` [PATCH 2/3] rteval: Add run_on_isolcpus option to measurements Tomas Glozar
2023-08-10 9:01 ` [PATCH 3/3] rteval: Support run-on-isolcpus in cyclictest Tomas Glozar
2 siblings, 0 replies; 5+ messages in thread
From: Tomas Glozar @ 2023-08-10 9:01 UTC (permalink / raw)
To: linux-rt-users; +Cc: jkacur, Tomas Glozar
Return grparser from ModuleContainer.SetupModuleOptions, which allows it
to be used to setup additional options in *Modules class.
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
---
rteval/modules/__init__.py | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/rteval/modules/__init__.py b/rteval/modules/__init__.py
index 794135d..f4fd160 100644
--- a/rteval/modules/__init__.py
+++ b/rteval/modules/__init__.py
@@ -312,7 +312,7 @@ the information provided by the module"""
# Ignore if a section is not found
cfg = None
- grparser = parser.add_argument_group("Options for the %s module" % shortmod)
+ modgrparser = parser.add_argument_group("Options for the %s module" % shortmod)
for (o, s) in list(opts.items()):
descr = 'descr' in s and s['descr'] or ""
metavar = 'metavar' in s and s['metavar'] or None
@@ -327,13 +327,15 @@ the information provided by the module"""
default = 'default' in s and s['default'] or None
- grparser.add_argument('--%s-%s' % (shortmod, o),
- dest="%s___%s" % (shortmod, o),
- action='store',
- help='%s%s' % (descr,
- default and ' (default: %s)' % default or ''),
- default=default,
- metavar=metavar)
+ modgrparser.add_argument('--%s-%s' % (shortmod, o),
+ dest="%s___%s" % (shortmod, o),
+ action='store',
+ help='%s%s' % (descr,
+ default and ' (default: %s)' % default or ''),
+ default=default,
+ metavar=metavar)
+
+ return grparser
def InstantiateModule(self, modname, modcfg, modroot=None):
--
2.41.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] rteval: Add run_on_isolcpus option to measurements
2023-08-10 9:01 [PATCH 0/3] rteval: Add cmdline option to run measurements on isolcpus by default Tomas Glozar
2023-08-10 9:01 ` [PATCH 1/3] rteval: Allow arguments specific to module group Tomas Glozar
@ 2023-08-10 9:01 ` Tomas Glozar
2023-08-10 13:13 ` Tomas Glozar
2023-08-10 9:01 ` [PATCH 3/3] rteval: Support run-on-isolcpus in cyclictest Tomas Glozar
2 siblings, 1 reply; 5+ messages in thread
From: Tomas Glozar @ 2023-08-10 9:01 UTC (permalink / raw)
To: linux-rt-users; +Cc: jkacur, Tomas Glozar
Add option --measurement-run-on-isolcpus for the user to specify to
include isolcpus in the default cpulist (without --measurement-cpulist).
A default value might also be specified in rteval.conf:
[measurement]
run-on-isolcpus: true
Note that values different from true evaluate as false.
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
---
rteval/modules/measurement/__init__.py | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/rteval/modules/measurement/__init__.py b/rteval/modules/measurement/__init__.py
index 0e395be..2472b43 100644
--- a/rteval/modules/measurement/__init__.py
+++ b/rteval/modules/measurement/__init__.py
@@ -146,7 +146,15 @@ measurement profiles, based on their characteristics"""
def SetupModuleOptions(self, parser):
"Sets up all the measurement modules' parameters for the option parser"
- self.__container.SetupModuleOptions(parser, self.__cfg)
+ grparser = self.__container.SetupModuleOptions(parser, self.__cfg)
+
+ # Set up options specific for measurement module group
+ grparser.add_argument("--measurement-run-on-isolcpus",
+ dest="measurement___run_on_isolcpus",
+ action="store_true",
+ default=self.__cfg.GetSection("measurement").setdefault("run-on-isolcpus", False).lower()
+ == "true",
+ help="Include isolated CPUs in default cpulist")
def Setup(self, modparams):
@@ -157,9 +165,10 @@ measurement profiles, based on their characteristics"""
modcfg = self.__cfg.GetSection("measurement")
cpulist = modcfg.cpulist
+ run_on_isolcpus = modcfg.run_on_isolcpus
for (modname, modtype) in modcfg:
- if modtype.lower() == 'module': # Only 'module' will be supported (ds)
+ if isinstance(modtype, str) and modtype.lower() == 'module': # Only 'module' will be supported (ds)
# Extract the measurement modules info
modinfo = self.__container.ModuleInfo(modname)
@@ -179,6 +188,7 @@ measurement profiles, based on their characteristics"""
# Setup this imported module inside the appropriate measurement profile
self.__cfg.AppendConfig(modname, modparams)
self.__cfg.AppendConfig(modname, {'cpulist':cpulist})
+ self.__cfg.AppendConfig(modname, {'run-on-isolcpus':run_on_isolcpus})
mp.Setup(modname)
del self.__container
@@ -190,11 +200,12 @@ measurement profiles, based on their characteristics"""
# Get the reports from all meaurement modules in all measurement profiles
rep_n = libxml2.newNode("Measurements")
cpulist = self.__cfg.GetSection("measurement").cpulist
+ run_on_isolcpus = self.__cfg.GetSection("measurement").run_on_isolcpus
if cpulist:
# Convert str to list and remove offline cpus
cpulist = CpuList(cpulist).cpulist
else:
- cpulist = SysTop().default_cpus()
+ cpulist = SysTop().online_cpus() if run_on_isolcpus else SysTop().default_cpus()
rep_n.newProp("measurecpus", collapse_cpulist(cpulist))
for mp in self.__measureprofiles:
--
2.41.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] rteval: Support run-on-isolcpus in cyclictest
2023-08-10 9:01 [PATCH 0/3] rteval: Add cmdline option to run measurements on isolcpus by default Tomas Glozar
2023-08-10 9:01 ` [PATCH 1/3] rteval: Allow arguments specific to module group Tomas Glozar
2023-08-10 9:01 ` [PATCH 2/3] rteval: Add run_on_isolcpus option to measurements Tomas Glozar
@ 2023-08-10 9:01 ` Tomas Glozar
2 siblings, 0 replies; 5+ messages in thread
From: Tomas Glozar @ 2023-08-10 9:01 UTC (permalink / raw)
To: linux-rt-users; +Cc: jkacur, Tomas Glozar
If --measurement-run-on-isolcpus is enabled, add isolated CPUs to the
cpumask for the case when --measurement-cpulist is not specified. If
both options are specified, display a warning.
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
---
rteval/modules/measurement/cyclictest.py | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/rteval/modules/measurement/cyclictest.py b/rteval/modules/measurement/cyclictest.py
index ace8db4..4d7fcf2 100644
--- a/rteval/modules/measurement/cyclictest.py
+++ b/rteval/modules/measurement/cyclictest.py
@@ -214,6 +214,7 @@ class Cyclictest(rtevalModulePrototype):
self.__cpus = []
self.__cyclicdata = {}
self.__sparse = False
+ self.__run_on_isolcpus = bool(self.__cfg.setdefault('run-on-isolcpus', False))
if self.__cfg.cpulist:
self.__cpulist = self.__cfg.cpulist
@@ -224,14 +225,21 @@ class Cyclictest(rtevalModulePrototype):
self.__cpulist = collapse_cpulist(self.__cpus)
self.__cpus = [str(c) for c in self.__cpus]
self.__sparse = True
+ if self.__run_on_isolcpus:
+ self._log(Log.WARN, "ignoring --measurement-run-on-isolcpus, since cpulist is specified")
else:
self.__cpus = SysTopology().online_cpus_str()
# Get the cpuset from the environment
cpuset = os.sched_getaffinity(0)
# Convert the elements to strings
cpuset = [str(c) for c in cpuset]
- # Only include cpus that are in the cpuset
- self.__cpus = [c for c in self.__cpus if c in cpuset]
+ # Get isolated CPU list
+ isolcpus = [str(c) for c in SysTopology().isolated_cpus()]
+ # Only include cpus that are in the cpuset and isolated CPUs if run_on_isolcpus is enabled
+ self.__cpus = [c for c in self.__cpus if c in cpuset or self.__run_on_isolcpus and c in isolcpus]
+ if self.__run_on_isolcpus:
+ self.__sparse = True
+ self.__cpulist = collapse_cpulist(self.__cpus)
# Sort the list of cpus to align with the order reported by cyclictest
self.__cpus.sort(key=int)
--
2.41.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] rteval: Add run_on_isolcpus option to measurements
2023-08-10 9:01 ` [PATCH 2/3] rteval: Add run_on_isolcpus option to measurements Tomas Glozar
@ 2023-08-10 13:13 ` Tomas Glozar
0 siblings, 0 replies; 5+ messages in thread
From: Tomas Glozar @ 2023-08-10 13:13 UTC (permalink / raw)
To: linux-rt-users; +Cc: jkacur
čt 10. 8. 2023 v 11:01 odesílatel Tomas Glozar <tglozar@redhat.com> napsal:
> @@ -146,7 +146,15 @@ measurement profiles, based on their characteristics"""
>
> def SetupModuleOptions(self, parser):
> "Sets up all the measurement modules' parameters for the option parser"
> - self.__container.SetupModuleOptions(parser, self.__cfg)
> + grparser = self.__container.SetupModuleOptions(parser, self.__cfg)
> +
> + # Set up options specific for measurement module group
> + grparser.add_argument("--measurement-run-on-isolcpus",
> + dest="measurement___run_on_isolcpus",
> + action="store_true",
> + default=self.__cfg.GetSection("measurement").setdefault("run-on-isolcpus", False).lower()
> + == "true",
> + help="Include isolated CPUs in default cpulist")
>
>
This code is broken, it does not work when rteval.conf has no
run-on-isolcpus field:
$ sudo ./rteval-cmd -D --measurement-cpulist=0-7 --loads-cpulist=1,3,5,7
got system topology: 1 node system (8 cores per node)
Traceback (most recent call last):
File "/home/tglozar/dev/rteval/./rteval-cmd", line 297, in <module>
measuremods.SetupModuleOptions(parser)
File "/home/tglozar/dev/rteval/rteval/modules/measurement/__init__.py",
line 155, in SetupModuleOptions
default=self.__cfg.GetSection("measurement").setdefault("run-on-isolcpus",
False).lower()
AttributeError: 'bool' object has no attribute 'lower'
It's trying to lower the boolean value. I'll send a fixed v2 patch.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-08-10 13:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-10 9:01 [PATCH 0/3] rteval: Add cmdline option to run measurements on isolcpus by default Tomas Glozar
2023-08-10 9:01 ` [PATCH 1/3] rteval: Allow arguments specific to module group Tomas Glozar
2023-08-10 9:01 ` [PATCH 2/3] rteval: Add run_on_isolcpus option to measurements Tomas Glozar
2023-08-10 13:13 ` Tomas Glozar
2023-08-10 9:01 ` [PATCH 3/3] rteval: Support run-on-isolcpus in cyclictest Tomas Glozar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).