From 8aec0b7b8faeea7f22019cb18319e88faeda98b5 Mon Sep 17 00:00:00 2001 From: Patrice Buriez Date: Tue, 21 Aug 2018 20:45:30 +0200 Subject: Decrease Sampling interval - Invalid Port results JIRA: YARDSTICK-1219 The computed in/fwd throughputs displayed on the L2FWD, L3FWD and VPE dashboards. The computed value is likely 4x the expected value. It is required to return sampling information form Generator AND VNF at least every 1 second. Change-Id: I4435fd05ba3116ead836843a4c2fce133b767a28 Signed-off-by: Daniel Martin Buckley Signed-off-by: Emma Foley (cherry picked from commit 2d10b0bf7238f5417d46f89c76b856f7e345f738) Signed-off-by: Patrice Buriez (also picking from commit 68aaa8ce8b20ba39040aa2469b384f59709620a7) --- .../network_services/vnf_generic/vnf/prox_vnf.py | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/yardstick/network_services/vnf_generic/vnf/prox_vnf.py b/yardstick/network_services/vnf_generic/vnf/prox_vnf.py index 9d90ddb47..bc810ecb3 100644 --- a/yardstick/network_services/vnf_generic/vnf/prox_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/prox_vnf.py @@ -15,8 +15,6 @@ import errno import logging import datetime -import time - from yardstick.common.process import check_if_process_failed from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDpdkVnfSetupEnvHelper @@ -45,7 +43,8 @@ class ProxApproxVnf(SampleVNF): self.prev_packets_in = 0 self.prev_packets_sent = 0 - self.prev_time = time.time() + self.prev_tsc = 0 + self.tsc_hz = 0 super(ProxApproxVnf, self).__init__(name, vnfd, setup_env_helper_type, resource_helper_type) @@ -85,6 +84,12 @@ class ProxApproxVnf(SampleVNF): }) return result + if (self.tsc_hz == 0): + self.tsc_hz = float(self.resource_helper.sut.hz()) + LOG.debug("TSC = %f", self.tsc_hz) + if (self.tsc_hz == 0): + raise RuntimeError("Unable to retrieve TSC") + # use all_ports so we only use ports matched in topology port_count = len(self.vnfd_helper.port_pairs.all_ports) if port_count not in {1, 2, 4}: @@ -92,16 +97,18 @@ class ProxApproxVnf(SampleVNF): "1, 2 or 4 ports only supported at this time") all_port_stats = self.vnf_execute('multi_port_stats', range(port_count)) - curr_time = time.time() - rx_total = tx_total = 0 + rx_total = tx_total = tsc = 0 try: for single_port_stats in all_port_stats: rx_total = rx_total + single_port_stats[1] tx_total = tx_total + single_port_stats[2] + tsc = tsc + single_port_stats[5] except (TypeError, IndexError): LOG.error("Invalid data ...") return {} + tsc = tsc / port_count + result.update({ "packets_in": rx_total, "packets_dropped": max((tx_total - rx_total), 0), @@ -111,15 +118,15 @@ class ProxApproxVnf(SampleVNF): "collect_stats": self.resource_helper.collect_collectd_kpi(), }) try: - curr_packets_in = int((rx_total - self.prev_packets_in) - / (curr_time - self.prev_time)) + curr_packets_in = int(((rx_total - self.prev_packets_in) * self.tsc_hz) + / (tsc - self.prev_tsc)) except ZeroDivisionError: LOG.error("Error.... Divide by Zero") curr_packets_in = 0 try: - curr_packets_fwd = int((tx_total - self.prev_packets_sent) - / (curr_time - self.prev_time)) + curr_packets_fwd = int(((tx_total - self.prev_packets_sent) * self.tsc_hz) + / (tsc - self.prev_tsc)) except ZeroDivisionError: LOG.error("Error.... Divide by Zero") curr_packets_fwd = 0 @@ -129,7 +136,7 @@ class ProxApproxVnf(SampleVNF): self.prev_packets_in = rx_total self.prev_packets_sent = tx_total - self.prev_time = curr_time + self.prev_tsc = tsc LOG.debug("%s collect KPIs %s %s", self.APP_NAME, datetime.datetime.now(), result) return result -- cgit 1.2.3-korg