Merge "Add prox test case for OvS-DPDK & 4 Port"
[yardstick.git] / yardstick / network_services / vnf_generic / vnf / sample_vnf.py
index a09f2a7..b2c5a98 100644 (file)
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import logging
+import decimal
 from multiprocessing import Queue, Value, Process
 import os
 import posixpath
@@ -21,7 +22,6 @@ import uuid
 import subprocess
 import time
 
-import six
 
 from trex_stl_lib.trex_stl_client import LoggerApi
 from trex_stl_lib.trex_stl_client import STLClient
@@ -113,19 +113,6 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
         self.used_drivers = None
         self.dpdk_bind_helper = DpdkBindHelper(ssh_helper)
 
-    def _setup_hugepages(self):
-        meminfo = utils.read_meminfo(self.ssh_helper)
-        hp_size_kb = int(meminfo['Hugepagesize'])
-        hugepages_gb = self.scenario_helper.all_options.get('hugepages_gb', 16)
-        nr_hugepages = int(abs(hugepages_gb * 1024 * 1024 / hp_size_kb))
-        self.ssh_helper.execute('echo %s | sudo tee %s' %
-                                (nr_hugepages, self.NR_HUGEPAGES_PATH))
-        hp = six.BytesIO()
-        self.ssh_helper.get_file_obj(self.NR_HUGEPAGES_PATH, hp)
-        nr_hugepages_set = int(hp.getvalue().decode('utf-8').splitlines()[0])
-        LOG.info('Hugepages size (kB): %s, number claimed: %s, number set: %s',
-                 hp_size_kb, nr_hugepages, nr_hugepages_set)
-
     def build_config(self):
         vnf_cfg = self.scenario_helper.vnf_cfg
         task_path = self.scenario_helper.task_path
@@ -238,7 +225,8 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
 
     def _setup_dpdk(self):
         """Setup DPDK environment needed for VNF to run"""
-        self._setup_hugepages()
+        hugepages_gb = self.scenario_helper.all_options.get('hugepages_gb', 16)
+        utils.setup_hugepages(self.ssh_helper, hugepages_gb * 1024 * 1024)
         self.dpdk_bind_helper.load_dpdk_driver()
 
         exit_status = self.dpdk_bind_helper.check_dpdk_driver()
@@ -499,6 +487,7 @@ class Rfc2544ResourceHelper(object):
         self._rfc2544 = None
         self._tolerance_low = None
         self._tolerance_high = None
+        self._tolerance_precision = None
 
     @property
     def rfc2544(self):
@@ -518,6 +507,12 @@ class Rfc2544ResourceHelper(object):
             self.get_rfc_tolerance()
         return self._tolerance_high
 
+    @property
+    def tolerance_precision(self):
+        if self._tolerance_precision is None:
+            self.get_rfc_tolerance()
+        return self._tolerance_precision
+
     @property
     def correlated_traffic(self):
         if self._correlated_traffic is None:
@@ -537,9 +532,13 @@ class Rfc2544ResourceHelper(object):
 
     def get_rfc_tolerance(self):
         tolerance_str = self.get_rfc2544('allowed_drop_rate', self.DEFAULT_TOLERANCE)
-        tolerance_iter = iter(sorted(float(t.strip()) for t in tolerance_str.split('-')))
-        self._tolerance_low = next(tolerance_iter)
-        self._tolerance_high = next(tolerance_iter, self.tolerance_low)
+        tolerance_iter = iter(sorted(
+            decimal.Decimal(t.strip()) for t in tolerance_str.split('-')))
+        tolerance_low = next(tolerance_iter)
+        tolerance_high = next(tolerance_iter, tolerance_low)
+        self._tolerance_precision = abs(tolerance_high.as_tuple().exponent)
+        self._tolerance_high = float(tolerance_high)
+        self._tolerance_low = float(tolerance_low)
 
 
 class SampleVNFDeployHelper(object):