This patch unifies configuration of cpupin parameter for iperf to reduce
code duplication.
Additionaly the limitation of specifying cpupin parameter together with
perf_parallel_streams has been removed as this should not limit the
user from using such configuration.
Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
---
.../Perf/Measurements/IperfFlowMeasurement.py | 32 +++++++++----------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
index 6e6fd64f..3b24aa58 100644
--- a/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
+++ b/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
@@ -119,14 +119,7 @@ class IperfFlowMeasurement(BaseFlowMeasurement):
server_params = dict(bind = ipaddress(flow.receiver_bind),
oneoff = True)
- if flow.cpupin is not None and flow.cpupin >= 0:
- if flow.parallel_streams == 1:
- server_params["cpu_bind"] = flow.cpupin
- else:
- raise RecipeError("Unsupported combination of single cpupin "
- "with parallel perf streams.")
- elif flow.cpupin is not None:
- raise RecipeError("Negative perf cpupin value provided.")
+ self._set_cpupin_params(server_params, flow.cpupin)
if flow.receiver_port is not None:
server_params["port"] = flow.receiver_port
@@ -149,14 +142,7 @@ class IperfFlowMeasurement(BaseFlowMeasurement):
else:
raise RecipeError("Unsupported flow type
'{}'".format(flow.type))
- if flow.cpupin is not None and flow.cpupin >= 0:
- if flow.parallel_streams == 1:
- client_params["cpu_bind"] = flow.cpupin
- else:
- raise RecipeError("Unsupported combination of single cpupin "
- "with parallel perf streams.")
- elif flow.cpupin is not None:
- raise RecipeError("Negative perf cpupin value provided.")
+ self._set_cpupin_params(client_params, flow.cpupin)
if flow.parallel_streams > 1:
client_params["parallel"] = flow.parallel_streams
@@ -170,6 +156,20 @@ class IperfFlowMeasurement(BaseFlowMeasurement):
return host.prepare_job(IperfClient(**client_params),
job_level=ResultLevel.NORMAL)
+ def _set_cpupin_params(self, params, cpupin):
+ if cpupin is not None:
+ for cpu in cpupin:
+ if cpu < 0:
+ raise RecipeError("Negative perf cpupin value provided.")
+
+ # at the moment iperf does not support pinning to multiple cpus
+ # so pin to the first cpu specified in the list
+ if len(cpupin) > 1:
+ raise RecipeError("Cannot pin iperf to the specified list "\
+ "of cpus due to missing support in iperf.")
+
+ params["cpu_bind"] = cpupin[0]
+
def _parse_job_streams(self, job):
result = ParallelPerfResult()
if not job.passed:
--
2.26.2