from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
 from yardstick.common import exceptions
+from yardstick.common import utils as common_utils
 from yardstick.network_services import utils
 from yardstick.network_services.utils import get_nsb_option
 
 
     def check_ovs_dpdk_env(self):
         self.cleanup_ovs_dpdk_env()
-        self._check_hugepages()
 
         version = self.ovs_properties.get("version", {})
         ovs_ver = version.get("ovs", self.DEFAULT_OVS)
 
         self.configure_nics_for_ovs_dpdk()
 
+        hp_total_mb = int(self.vm_flavor.get('ram', '4096')) * len(self.servers)
+        common_utils.setup_hugepages(self.connection, hp_total_mb * 1024)
+
+        self._check_hugepages()
+
         for index, (key, vnf) in enumerate(collections.OrderedDict(
                 self.servers).items()):
             cfg = '/tmp/vm_ovs_%d.xml' % index
 
 from yardstick.benchmark import contexts
 from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
+from yardstick.common import utils
 from yardstick.network_services.utils import get_nsb_option
 from yardstick.network_services.utils import PciAddress
 
         #   1 : modprobe host_driver with num_vfs
         self.configure_nics_for_sriov()
 
+        hp_total_mb = int(self.vm_flavor.get('ram', '4096')) * len(self.servers)
+        utils.setup_hugepages(self.connection, hp_total_mb * 1024)
+
         for index, (key, vnf) in enumerate(collections.OrderedDict(
                 self.servers).items()):
             cfg = '/tmp/vm_sriov_%s.xml' % str(index)
 
     return output
 
 
+def setup_hugepages(ssh_client, size_kb):
+    """Setup needed number of hugepages for the size specified"""
+
+    NR_HUGEPAGES_PATH = '/proc/sys/vm/nr_hugepages'
+    meminfo = read_meminfo(ssh_client)
+    hp_size_kb = int(meminfo['Hugepagesize'])
+    hp_number = int(abs(size_kb / hp_size_kb))
+    ssh_client.execute(
+        'echo %s | sudo tee %s' % (hp_number, NR_HUGEPAGES_PATH))
+    hp = six.BytesIO()
+    ssh_client.get_file_obj(NR_HUGEPAGES_PATH, hp)
+    hp_number_set = int(hp.getvalue().decode('utf-8').splitlines()[0])
+    logger.info('Hugepages size (kB): %s, number claimed: %s, number set: %s',
+                hp_size_kb, hp_number, hp_number_set)
+    return hp_size_kb, hp_number, hp_number_set
+
+
 def find_relative_file(path, task_path):
     """
     Find file in one of places: in abs of path or relative to a directory path,
 
 import subprocess
 import time
 
-import six
 
 from trex_stl_lib.trex_stl_client import LoggerApi
 from trex_stl_lib.trex_stl_client import STLClient
         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
 
     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()
 
 from yardstick.benchmark.contexts.standalone import model
 from yardstick.benchmark.contexts.standalone import ovs_dpdk
 from yardstick.common import exceptions
+from yardstick.common import utils as common_utils
 from yardstick.network_services import utils
 
 
        self.ovs_dpdk.wait_for_vswitchd = 0
        self.assertIsNone(self.ovs_dpdk.cleanup_ovs_dpdk_env())
 
-    @mock.patch.object(ovs_dpdk.OvsDpdkContext, '_check_hugepages')
     @mock.patch.object(utils, 'get_nsb_option')
     @mock.patch.object(model.OvsDeploy, 'ovs_deploy')
-    def test_check_ovs_dpdk_env(self, mock_ovs_deploy, mock_get_nsb_option,
-                                mock_check_hugepages):
+    def test_check_ovs_dpdk_env(self, mock_ovs_deploy, mock_get_nsb_option):
         self.ovs_dpdk.connection = mock.Mock()
         self.ovs_dpdk.connection.execute = mock.Mock(
             return_value=(1, 0, 0))
 
         self.ovs_dpdk.check_ovs_dpdk_env()
         mock_ovs_deploy.assert_called_once()
-        mock_check_hugepages.assert_called_once()
         mock_get_nsb_option.assert_called_once_with('bin_path')
 
-    @mock.patch.object(ovs_dpdk.OvsDpdkContext, '_check_hugepages')
-    def test_check_ovs_dpdk_env_wrong_version(self, mock_check_hugepages):
+    def test_check_ovs_dpdk_env_wrong_version(self):
         self.ovs_dpdk.connection = mock.Mock()
         self.ovs_dpdk.connection.execute = mock.Mock(
             return_value=(1, 0, 0))
 
         with self.assertRaises(exceptions.OVSUnsupportedVersion):
             self.ovs_dpdk.check_ovs_dpdk_env()
-        mock_check_hugepages.assert_called_once()
 
     @mock.patch('yardstick.ssh.SSH')
     def test_deploy(self, *args):
             'fake_path', 0, self.NETWORKS['private_0']['vpci'],
             self.NETWORKS['private_0']['mac'], 'test')
 
+    @mock.patch.object(ovs_dpdk.OvsDpdkContext, '_check_hugepages')
+    @mock.patch.object(common_utils, 'setup_hugepages')
     @mock.patch.object(model.StandaloneContextHelper, 'check_update_key')
     @mock.patch.object(model.Libvirt, 'write_file')
     @mock.patch.object(model.Libvirt, 'build_vm_xml')
     @mock.patch.object(model.Libvirt, 'check_if_vm_exists_and_delete')
     @mock.patch.object(model.Libvirt, 'virsh_create_vm')
-    def test_setup_ovs_dpdk_context(self, mock_create_vm, mock_check_if_exists, mock_build_xml,
-                                    mock_write_file, mock_check_update_key):
+    def test_setup_ovs_dpdk_context(self, mock_create_vm, mock_check_if_exists,
+                                    mock_build_xml, mock_write_file,
+                                    mock_check_update_key,
+                                    mock_setup_hugepages,
+                                    mock__check_hugepages):
         self.ovs_dpdk.vm_deploy = True
         self.ovs_dpdk.connection = mock.Mock()
         self.ovs_dpdk.vm_names = ['vm-0', 'vm-1']
         }
         self.ovs_dpdk.networks = self.NETWORKS
         self.ovs_dpdk.host_mgmt = {}
-        self.ovs_dpdk.flavor = {}
+        self.ovs_dpdk.vm_flavor = {'ram': '1024'}
         self.ovs_dpdk.file_path = '/var/lib/libvirt/images/cdrom-0.img'
         self.ovs_dpdk.configure_nics_for_ovs_dpdk = mock.Mock(return_value="")
         self.ovs_dpdk._name_task_id = 'fake_name'
 
         self.assertEqual([vnf_instance_2],
                          self.ovs_dpdk.setup_ovs_dpdk_context())
+        mock_setup_hugepages.assert_called_once_with(self.ovs_dpdk.connection, 1024 * 1024)
+        mock__check_hugepages.assert_called_once()
         mock_create_vm.assert_called_once_with(
             self.ovs_dpdk.connection, '/tmp/vm_ovs_0.xml')
         mock_check_if_exists.assert_called_once_with(
 
 from yardstick.benchmark.contexts import base
 from yardstick.benchmark.contexts.standalone import model
 from yardstick.benchmark.contexts.standalone import sriov
+from yardstick.common import utils
 
 
 class SriovContextTestCase(unittest.TestCase):
         mock_add_sriov.assert_called_once_with(
             '0000:00:0a.0', 0, self.NETWORKS['private_0']['mac'], 'test')
 
+    @mock.patch.object(utils, 'setup_hugepages')
     @mock.patch.object(model.StandaloneContextHelper, 'check_update_key')
     @mock.patch.object(model.Libvirt, 'build_vm_xml')
     @mock.patch.object(model.Libvirt, 'check_if_vm_exists_and_delete')
     @mock.patch.object(model.Libvirt, 'write_file')
     @mock.patch.object(model.Libvirt, 'virsh_create_vm')
-    def test_setup_sriov_context(self, mock_create_vm, mock_write_file, mock_check,
-                                 mock_build_vm_xml, mock_check_update_key):
+    def test_setup_sriov_context(self, mock_create_vm, mock_write_file,
+                                 mock_check, mock_build_vm_xml,
+                                 mock_check_update_key, mock_setup_hugepages):
         self.sriov.servers = {
             'vnf_0': {
                 'network_ports': {
         connection = mock.Mock()
         self.sriov.connection = connection
         self.sriov.host_mgmt = {'ip': '1.2.3.4'}
-        self.sriov.vm_flavor = 'flavor'
+        self.sriov.vm_flavor = {'ram': '1024'}
         self.sriov.networks = 'networks'
         self.sriov.configure_nics_for_sriov = mock.Mock()
         self.sriov._name_task_id = 'fake_name'
             mock_vnf_node.generate_vnf_instance = mock.Mock(
                 return_value='node_1')
             nodes_out = self.sriov.setup_sriov_context()
+        mock_setup_hugepages.assert_called_once_with(connection, 1024*1024)
         mock_check_update_key.assert_called_once_with(connection, 'node_1', vm_name,
                                                       self.sriov._name_task_id, cdrom_img,
                                                       mac)
         self.assertEqual(['node_2'], nodes_out)
         mock_vnf_node.generate_vnf_instance.assert_called_once_with(
-            'flavor', 'networks', '1.2.3.4', 'vnf_0',
+            self.sriov.vm_flavor, 'networks', '1.2.3.4', 'vnf_0',
             self.sriov.servers['vnf_0'], '00:00:00:00:00:01')
         mock_build_vm_xml.assert_called_once_with(
-            connection, 'flavor', vm_name, 0, cdrom_img)
+            connection, self.sriov.vm_flavor, vm_name, 0, cdrom_img)
         mock_create_vm.assert_called_once_with(connection, cfg)
         mock_check.assert_called_once_with(vm_name, connection)
         mock_write_file.assert_called_once_with(cfg, 'out_xml')
 
 
     def test_default_value(self):
         self.assertEqual(0, utils.safe_cast('', 'int', 0))
+
+
+class SetupHugepagesTestCase(unittest.TestCase):
+
+    @mock.patch.object(six, 'BytesIO', return_value=six.BytesIO(b'5\n'))
+    @mock.patch.object(utils, 'read_meminfo',
+                       return_value={'Hugepagesize': '1024'})
+    def test_setup_hugepages(self, mock_meminfo, *args):
+        ssh = mock.Mock()
+        ssh.execute = mock.Mock()
+        hp_size_kb, hp_number, hp_number_set = utils.setup_hugepages(ssh, 10 * 1024)
+        mock_meminfo.assert_called_once_with(ssh)
+        ssh.execute.assert_called_once_with(
+            'echo 10 | sudo tee /proc/sys/vm/nr_hugepages')
+        self.assertEqual(hp_size_kb, 1024)
+        self.assertEqual(hp_number, 10)
+        self.assertEqual(hp_number_set, 5)
 
 
 import unittest
 import mock
-import six
 
 from yardstick.common import exceptions as y_exceptions
 from yardstick.common import utils
         result = DpdkVnfSetupEnvHelper._update_traffic_type(ip_pipeline_cfg, traffic_options)
         self.assertEqual(result, expected)
 
-    @mock.patch.object(six, 'BytesIO', return_value=six.BytesIO(b'100\n'))
-    @mock.patch.object(utils, 'read_meminfo',
-                       return_value={'Hugepagesize': '2048'})
-    def test__setup_hugepages_no_hugepages_defined(self, mock_meminfo, *args):
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        scenario_helper.all_options = {}
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(
-            mock.ANY, ssh_helper, scenario_helper)
-        with mock.patch.object(sample_vnf.LOG, 'info') as mock_info:
-            dpdk_setup_helper._setup_hugepages()
-            mock_info.assert_called_once_with(
-                'Hugepages size (kB): %s, number claimed: %s, number set: '
-                '%s', 2048, 8192, 100)
-        mock_meminfo.assert_called_once_with(ssh_helper)
-
-    @mock.patch.object(six, 'BytesIO', return_value=six.BytesIO(b'100\n'))
-    @mock.patch.object(utils, 'read_meminfo',
-                       return_value={'Hugepagesize': '1048576'})
-    def test__setup_hugepages_8gb_hugepages_defined(self, mock_meminfo, *args):
-        ssh_helper = mock.Mock()
-        scenario_helper = mock.Mock()
-        scenario_helper.all_options = {'hugepages_gb': 8}
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(
-            mock.ANY, ssh_helper, scenario_helper)
-        with mock.patch.object(sample_vnf.LOG, 'info') as mock_info:
-            dpdk_setup_helper._setup_hugepages()
-            mock_info.assert_called_once_with(
-                'Hugepages size (kB): %s, number claimed: %s, number set: '
-                '%s', 1048576, 8, 100)
-        mock_meminfo.assert_called_once_with(ssh_helper)
-
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.open')
     @mock.patch.object(utils, 'find_relative_file')
     @mock.patch('yardstick.network_services.vnf_generic.vnf.sample_vnf.MultiPortConfig')
                 dpdk_vnf_setup_env_helper.setup_vnf_environment(),
                 ResourceProfile)
 
-    def test__setup_dpdk(self):
+    @mock.patch.object(utils, 'setup_hugepages')
+    def test__setup_dpdk(self, mock_setup_hugepages):
         ssh_helper = mock.Mock()
         ssh_helper.execute = mock.Mock()
         ssh_helper.execute.return_value = (0, 0, 0)
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper, mock.ANY)
-        with mock.patch.object(dpdk_setup_helper, '_setup_hugepages') as \
-                mock_setup_hp:
-            dpdk_setup_helper._setup_dpdk()
-        mock_setup_hp.assert_called_once()
+        scenario_helper = mock.Mock()
+        scenario_helper.all_options = {'hugepages_gb': 8}
+        dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper,
+                                                  scenario_helper)
+        dpdk_setup_helper._setup_dpdk()
+        mock_setup_hugepages.assert_called_once_with(ssh_helper, 8*1024*1024)
         ssh_helper.execute.assert_has_calls([
             mock.call('sudo modprobe uio && sudo modprobe igb_uio'),
             mock.call('lsmod | grep -i igb_uio')