diff options
author | Fran�ois-R�gis Menguy <francoisregis.menguy@orange.com> | 2020-11-16 07:00:28 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2020-11-16 07:00:28 +0000 |
commit | f684939fed81471c1381fa4fab6e1b6ea37093da (patch) | |
tree | 2e9764b22ec2e9e5a3bdbffb75fe8d69ef7d5bf2 /nfvbench/traffic_gen | |
parent | 78f547514e54a9332b919734aed7c8ca1390cb48 (diff) | |
parent | bd0cf4ce9c30c8aae9b7a96cf9c8ea073cd9a548 (diff) |
Merge "NFVBENCH-192: Complete/fix hdrh related processings to consider all cases (multiple service chains, distribution n/a with intel VFs)"
Diffstat (limited to 'nfvbench/traffic_gen')
-rw-r--r-- | nfvbench/traffic_gen/traffic_base.py | 30 | ||||
-rw-r--r-- | nfvbench/traffic_gen/trex_gen.py | 4 |
2 files changed, 22 insertions, 12 deletions
diff --git a/nfvbench/traffic_gen/traffic_base.py b/nfvbench/traffic_gen/traffic_base.py index df28772..30aec6e 100644 --- a/nfvbench/traffic_gen/traffic_base.py +++ b/nfvbench/traffic_gen/traffic_base.py @@ -15,10 +15,10 @@ import abc import sys -import bitmath - from nfvbench.log import LOG from . import traffic_utils +from hdrh.histogram import HdrHistogram +from functools import reduce class Latency(object): @@ -34,11 +34,23 @@ class Latency(object): self.avg_usec = 0 self.hdrh = None if latency_list: + hdrh_list = [] for lat in latency_list: if lat.available(): self.min_usec = min(self.min_usec, lat.min_usec) self.max_usec = max(self.max_usec, lat.max_usec) self.avg_usec += lat.avg_usec + if lat.hdrh_available(): + hdrh_list.append(HdrHistogram.decode(lat.hdrh)) + + # aggregate histograms if any + if hdrh_list: + def add_hdrh(x, y): + x.add(y) + return x + decoded_hdrh = reduce(add_hdrh, hdrh_list) + self.hdrh = HdrHistogram.encode(decoded_hdrh).decode('utf-8') + # round to nearest usec self.avg_usec = int(round(float(self.avg_usec) / len(latency_list))) @@ -46,6 +58,9 @@ class Latency(object): """Return True if latency information is available.""" return self.min_usec != sys.maxsize + def hdrh_available(self): + """Return True if latency histogram information is available.""" + return self.hdrh is not None class TrafficGeneratorException(Exception): """Exception for traffic generator.""" @@ -133,15 +148,8 @@ class AbstractTrafficGenerator(object): result = {} - intf_speeds = self.get_port_speed_gbps() - tg_if_speed = bitmath.parse_string(str(intf_speeds[0]) + 'Gb').bits - intf_speed = tg_if_speed - - if hasattr(self.config, 'intf_speed') and self.config.intf_speed is not None: - # in case of limitation due to config, TG speed is not accurate - # value is overridden by conf - if self.config.intf_speed != tg_if_speed: - intf_speed = bitmath.parse_string(self.config.intf_speed.replace('ps', '')).bits + # actual interface speed? (may be a virtual override) + intf_speed = self.config.intf_speed_used if hasattr(self.config, 'user_info') and self.config.user_info is not None: if "extra_encapsulation_bytes" in self.config.user_info: diff --git a/nfvbench/traffic_gen/trex_gen.py b/nfvbench/traffic_gen/trex_gen.py index 21e79ae..d5625eb 100644 --- a/nfvbench/traffic_gen/trex_gen.py +++ b/nfvbench/traffic_gen/trex_gen.py @@ -168,6 +168,8 @@ class TRex(AbstractTrafficGenerator): result["latency"] = in_stats["latency"] # Merge HDRHistogram to have an overall value for all chains and ports + # (provided that the histogram exists in the stats returned by T-Rex) + # Of course, empty histograms will produce an empty (invalid) histogram. try: hdrh_list = [] if ifstats: @@ -186,7 +188,7 @@ class TRex(AbstractTrafficGenerator): x.add(y) return x decoded_hdrh = reduce(add_hdrh, hdrh_list) - result["hdrh"] = HdrHistogram.encode(decoded_hdrh).decode('utf-8') + result["overall_hdrh"] = HdrHistogram.encode(decoded_hdrh).decode('utf-8') except KeyError: pass |