This extends the IperfMeasurementGenerator with parallel_perf_processes_cpus
parameter. This parameter specifies a list of cpus where each cpu in this
list will be used to pin one process of the processes specified by
the perf_parallel_process parameter. If there are more processes than
the number of cpus in the parameter, the assignment will continue from
beginning of the list.
The original cpupin parameter has a different meaning. That is being able
to pin one or more iperf processes to a cpu (currently only one cpu is
supported, but this could be changed to a list of cpus in the future).
So, one iperf process can be eventually pinned to multiple cpus.
On the other hand, the perf_parallel_processes_cpus is a list from which
only ONE cpu is assigned to one iperf process.
Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
---
.../Perf/Measurements/BaseFlowMeasurement.py | 9 ++++++++-
.../IperfMeasurementGenerator.py | 17 +++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
index 6973ae73..6183d249 100644
--- a/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
+++ b/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
@@ -11,7 +11,9 @@ class Flow(object):
type,
generator, generator_bind, generator_nic,
receiver, receiver_bind, receiver_nic,
- msg_size, duration, parallel_streams, parallel_processes, cpupin):
+ msg_size, duration, parallel_streams,
+ parallel_processes, parallel_processes_cpus,
+ cpupin):
self._type = type
self._generator = generator
@@ -25,6 +27,7 @@ class Flow(object):
self._duration = duration
self._parallel_streams = parallel_streams
self._parallel_processes = parallel_processes
+ self._parallel_processes_cpus = parallel_processes_cpus
self._cpupin = cpupin
@property
@@ -71,6 +74,10 @@ class Flow(object):
def parallel_processes(self):
return self._parallel_processes
+ @property
+ def parallel_processes_cpus(self):
+ return self._parallel_processes_cpus
+
@property
def cpupin(self):
return self._cpupin
diff --git a/lnst/Recipes/ENRT/MeasurementGenerators/IperfMeasurementGenerator.py
b/lnst/Recipes/ENRT/MeasurementGenerators/IperfMeasurementGenerator.py
index 9d757ca5..b2afec06 100644
--- a/lnst/Recipes/ENRT/MeasurementGenerators/IperfMeasurementGenerator.py
+++ b/lnst/Recipes/ENRT/MeasurementGenerators/IperfMeasurementGenerator.py
@@ -57,6 +57,7 @@ class IperfMeasurementGenerator(BaseMeasurementGenerator):
perf_iterations = IntParam(default=5)
perf_parallel_streams = IntParam(default=1)
perf_parallel_processes = IntParam(default=1)
+ perf_parallel_processes_cpus = ListParam(mandatory=False)
perf_msg_sizes = ListParam(default=[123])
net_perf_tool = Param(default=IperfFlowMeasurement)
@@ -140,6 +141,22 @@ class IperfMeasurementGenerator(BaseMeasurementGenerator):
duration=self.params.perf_duration,
parallel_streams=self.params.perf_parallel_streams,
parallel_processes=self.params.perf_parallel_processes,
+ # TODO: this is a new parameter,
+ # the purpose is to be able to provide a list of cpus where
+ # each cpu in this list will be used to pin one process from
+ # parallel_processes, if there are more processes the
+ # assignment will continue from beginning of the list
+ # NOTE: the original cpupin should have a different meaning
+ # that is being able to pin one (or more iperf processes) to
+ # a set of cpus (currently only one value is supported, but
+ # could be changed to a list in the future), whereas
+ # parallel_processes_cpus is a list from which only ONE
+ # cpu is assigned to an iperf process
+ parallel_processes_cpus=(
+ self.params.perf_parallel_processes_cpus
+ if "perf_parallel_processes_cpus" in self.params
+ else None
+ ),
cpupin=(
self.params.perf_tool_cpu
if "perf_tool_cpu" in self.params
--
2.26.2