bugfix: tc078 have no data stored or dashboard to show results
[yardstick.git] / yardstick / benchmark / scenarios / networking / pktgen.py
index 8ca1ca6..b79b915 100644 (file)
@@ -11,6 +11,7 @@ from __future__ import print_function
 
 import os
 import logging
+import math
 
 import pkg_resources
 from oslo_serialization import jsonutils
@@ -20,6 +21,7 @@ from yardstick.benchmark.scenarios import base
 
 LOG = logging.getLogger(__name__)
 
+SSH_TIMEOUT = 60
 VNIC_TYPE_LIST = ["ovs", "sriov"]
 SRIOV_DRIVER_LIST = ["ixgbevf", "i40evf"]
 
@@ -178,6 +180,9 @@ class Pktgen(base.Scenario):
             return
 
         for i in range(1, queue_number):
+
+            smp_affinity_mask = format(1 << i, 'x')
+
             cmd = "grep 'virtio0-input.%s' /proc/interrupts |" \
                   "awk '{match($0,/ +[0-9]+/)} " \
                   "{print substr($1,RSTART,RLENGTH-1)}'" % (i)
@@ -186,7 +191,7 @@ class Pktgen(base.Scenario):
                 raise RuntimeError(stderr)
 
             cmd = "echo %s | sudo tee /proc/irq/%s/smp_affinity" \
-                % (1 << i, int(stdout))
+                % (smp_affinity_mask, int(stdout))
             status, stdout, stderr = self.server.execute(cmd)
             status, stdout, stderr = self.client.execute(cmd)
             if status:
@@ -200,7 +205,7 @@ class Pktgen(base.Scenario):
                 raise RuntimeError(stderr)
 
             cmd = "echo %s | sudo tee /proc/irq/%s/smp_affinity" \
-                % (1 << i, int(stdout))
+                % (smp_affinity_mask, int(stdout))
             status, stdout, stderr = self.server.execute(cmd)
             status, stdout, stderr = self.client.execute(cmd)
             if status:
@@ -224,6 +229,8 @@ class Pktgen(base.Scenario):
             return
 
         for i in range(1, queue_number):
+            smp_affinity_mask = format(1 << i, 'x')
+
             cmd = "grep '%s-TxRx-%s' /proc/interrupts |" \
                   "awk '{match($0,/ +[0-9]+/)} " \
                   "{print substr($1,RSTART,RLENGTH-1)}'" % (self.vnic_name, i)
@@ -232,7 +239,7 @@ class Pktgen(base.Scenario):
                 raise RuntimeError(stderr)
 
             cmd = "echo %s | sudo tee /proc/irq/%s/smp_affinity" \
-                % (1 << i, int(stdout))
+                % (smp_affinity_mask, int(stdout))
             status, stdout, stderr = self.server.execute(cmd)
             status, stdout, stderr = self.client.execute(cmd)
             if status:
@@ -287,7 +294,7 @@ class Pktgen(base.Scenario):
               "sudo iptables -A INPUT -p udp --dport 1000:%s -j DROP" \
               % (1000 + self.number_of_ports)
         LOG.debug("Executing command: %s", cmd)
-        status, _, stderr = self.server.execute(cmd)
+        status, _, stderr = self.server.execute(cmd, timeout=SSH_TIMEOUT)
         if status:
             raise RuntimeError(stderr)
 
@@ -349,22 +356,22 @@ class Pktgen(base.Scenario):
                duration, queue_number, pps)
 
         LOG.debug("Executing command: %s", cmd)
-        status, stdout, stderr = self.client.execute(cmd)
+        status, stdout, stderr = self.client.execute(cmd, timeout=SSH_TIMEOUT)
 
         if status:
             raise RuntimeError(stderr)
 
         result.update(jsonutils.loads(stdout))
 
-        result['packets_received'] = self._iptables_get_result()
+        received = result['packets_received'] = self._iptables_get_result()
+        sent = result['packets_sent']
         result['packetsize'] = packetsize
+        # compatible with python3 /
+        ppm = math.ceil(1000000.0 * (sent - received) / sent)
+
+        result['ppm'] = ppm
 
         if "sla" in self.scenario_cfg:
-            sent = result['packets_sent']
-            received = result['packets_received']
-            ppm = 1000000 * (sent - received) / sent
-            # if ppm is 1, then 11 out of 10 million is no pass
-            ppm += (sent - received) % sent > 0
             LOG.debug("Lost packets %d - Lost ppm %d", (sent - received), ppm)
             sla_max_ppm = int(self.scenario_cfg["sla"]["max_ppm"])
             assert ppm <= sla_max_ppm, "ppm %d > sla_max_ppm %d; " \