Merge "Mock time.sleep in slow tests"
[yardstick.git] / yardstick / network_services / vnf_generic / vnf / prox_helpers.py
index e9d8362..aeb4185 100644 (file)
@@ -561,6 +561,41 @@ class ProxSocketHelper(object):
             tsc = int(ret[3])
         return rx, tx, drop, tsc
 
+    def irq_core_stats(self, cores_tasks):
+        """ get IRQ stats per core"""
+
+        stat = {}
+        core = 0
+        task = 0
+        for core, task in cores_tasks:
+            self.put_command("stats task.core({}).task({}).max_irq,task.core({}).task({}).irq(0),"
+                             "task.core({}).task({}).irq(1),task.core({}).task({}).irq(2),"
+                             "task.core({}).task({}).irq(3),task.core({}).task({}).irq(4),"
+                             "task.core({}).task({}).irq(5),task.core({}).task({}).irq(6),"
+                             "task.core({}).task({}).irq(7),task.core({}).task({}).irq(8),"
+                             "task.core({}).task({}).irq(9),task.core({}).task({}).irq(10),"
+                             "task.core({}).task({}).irq(11),task.core({}).task({}).irq(12)"
+                             "\n".format(core, task, core, task, core, task, core, task,
+                                         core, task, core, task, core, task, core, task,
+                                         core, task, core, task, core, task, core, task,
+                                         core, task, core, task))
+            in_data_str = self.get_data().split(",")
+            ret = [try_int(s, 0) for s in in_data_str]
+            key = "core_" + str(core)
+            try:
+                stat[key] = {"cpu": core, "max_irq": ret[0], "bucket_0" : ret[1],
+                             "bucket_1" : ret[2], "bucket_2" : ret[3],
+                             "bucket_3" : ret[4], "bucket_4" : ret[5],
+                             "bucket_5" : ret[6], "bucket_6" : ret[7],
+                             "bucket_7" : ret[8], "bucket_8" : ret[9],
+                             "bucket_9" : ret[10], "bucket_10" : ret[11],
+                             "bucket_11" : ret[12], "bucket_12" : ret[13],
+                             "overflow": ret[10] + ret[11] + ret[12] + ret[13]}
+            except (KeyError, IndexError):
+                LOG.error("Corrupted PACKET %s", in_data_str)
+
+        return stat
+
     def multi_port_stats(self, ports):
         """get counter values from all  ports at once"""
 
@@ -754,7 +789,6 @@ class ProxSocketHelper(object):
         self.put_command("quit_force\n")
         time.sleep(3)
 
-
 _LOCAL_OBJECT = object()
 
 
@@ -836,6 +870,30 @@ class ProxDpdkVnfSetupEnvHelper(DpdkVnfSetupEnvHelper):
         file_str[1] = self.additional_files[base_name]
         return '"'.join(file_str)
 
+    def _make_core_list(self, inputStr):
+
+        my_input = inputStr.split("core ", 1)[1]
+        ok_list = set()
+
+        substrs = [x.strip() for x in my_input.split(',')]
+        for i in substrs:
+            try:
+                ok_list.add(int(i))
+
+            except ValueError:
+                try:
+                    substr = [int(k.strip()) for k in i.split('-')]
+                    if len(substr) > 1:
+                        startstr = substr[0]
+                        endstr = substr[len(substr) - 1]
+                        for z in range(startstr, endstr + 1):
+                            ok_list.add(z)
+                except ValueError:
+                    LOG.error("Error in cores list ... resuming ")
+                    return ok_list
+
+        return ok_list
+
     def generate_prox_config_file(self, config_path):
         sections = []
         prox_config = ConfigParser(config_path, sections)
@@ -855,6 +913,18 @@ class ProxDpdkVnfSetupEnvHelper(DpdkVnfSetupEnvHelper):
                     if section_data[0] == "mac":
                         section_data[1] = "hardware"
 
+        # adjust for range of cores
+        new_sections = []
+        for section_name, section in sections:
+            if section_name.startswith('core') and section_name.find('$') == -1:
+                    core_list = self._make_core_list(section_name)
+                    for core in core_list:
+                        new_sections.append(["core " + str(core), section])
+            else:
+                new_sections.append([section_name, section])
+
+        sections = new_sections
+
         # search for dst mac
         for _, section in sections:
             for section_data in section:
@@ -1076,7 +1146,7 @@ class ProxResourceHelper(ClientResourceHelper):
             self._test_type = self.setup_helper.find_in_section('global', 'name', None)
         return self._test_type
 
-    def run_traffic(self, traffic_profile, *args):
+    def run_traffic(self, traffic_profile):
         self._queue.cancel_join_thread()
         self.lower = 0.0
         self.upper = 100.0
@@ -2067,3 +2137,15 @@ class ProxlwAFTRProfileHelper(ProxProfileHelper):
                 data_helper.latency = self.get_latency()
 
         return data_helper.result_tuple, data_helper.samples
+
+
+class ProxIrqProfileHelper(ProxProfileHelper):
+
+    __prox_profile_type__ = "IRQ Query"
+
+    def __init__(self, resource_helper):
+        super(ProxIrqProfileHelper, self).__init__(resource_helper)
+        self._cores_tuple = None
+        self._ports_tuple = None
+        self.step_delta = 5
+        self.step_time = 0.5