Ejemplo n.º 1
0
 def test_hugepage_support_nodefaults(self):
     self.add_group.return_value = Group()
     self.fstab.Fstab().get_entry_by_attr.return_value = 'old fstab entry'
     self.fstab.Fstab().Entry.return_value = 'new fstab entry'
     hugepage.hugepage_support('nova',
                               group='neutron',
                               nr_hugepages=512,
                               max_map_count=70000,
                               mnt_point='/hugepages',
                               pagesize='1G',
                               mount=False)
     sysctl_expect = {
         'vm.hugetlb_shm_group': '1010',
         'vm.max_map_count': 70000,
         'vm.nr_hugepages': 512,
     }
     sysctl_setting_arg = self.sysctl.create.call_args_list[0][0][0]
     self.assertEqual(yaml.load(sysctl_setting_arg), sysctl_expect)
     self.mkdir.assert_called_with('/hugepages',
                                   owner='root',
                                   group='root',
                                   perms=0o755,
                                   force=False)
     self.fstab.Fstab().remove_entry.assert_called_with('old fstab entry')
     self.fstab.Fstab().Entry.assert_called_with(
         'nodev', '/hugepages', 'hugetlbfs',
         'mode=1770,gid=1010,pagesize=1G', 0, 0)
     self.fstab.Fstab().add_entry.assert_called_with('new fstab entry')
def install_dpdk():
    modprobe(config["dpdk-driver"])
    try:
        modprobe("vfio-pci")
    except:
        pass
    dkms_autoinstall()
    pages = get_hugepages()
    if pages:
        hugepage_support("root", group="root", nr_hugepages=pages,
                         mnt_point="/hugepages")
        service_restart("libvirt-bin")

    configure_vrouter_interface()
    set_dpdk_options()

    if not init_is_systemd():
        os.remove("/etc/init/supervisor-vrouter.override")
        service_start("supervisor-vrouter")
        service_restart("contrail-vrouter-agent")
    else:
        # unmask them first
        for srv in ("contrail-vrouter-agent", "contrail-vrouter-dpdk"):
            try:
                os.remove("/etc/systemd/system/{}.service".format(srv))
            except OSError:
                pass
        service("enable", "contrail-vrouter-dpdk")
        service_start("contrail-vrouter-dpdk")
        service("enable", "contrail-vrouter-agent")
        service_start("contrail-vrouter-agent")

    fix_libvirt()
def install_dpdk():
    modprobe(config["dpdk-driver"])
    try:
        modprobe("vfio-pci")
    except:
        pass
    dkms_autoinstall()
    pages = get_hugepages()
    if pages:
        hugepage_support("root", group="root", nr_hugepages=pages,
                         mnt_point="/hugepages")
        service_restart("libvirt-bin")

    configure_vrouter_interface()
    set_dpdk_coremask()
    write_configs()

    if not init_is_systemd():
        os.remove("/etc/init/supervisor-vrouter.override")
        service_start("supervisor-vrouter")
        service_restart("contrail-vrouter-agent")
    else:
        service("enable", "contrail-vrouter-dpdk")
        service_start("contrail-vrouter-dpdk")
        service("enable", "contrail-vrouter-agent")
        service_start("contrail-vrouter-agent")

    fix_libvirt()
Ejemplo n.º 4
0
def install_hugepages():
    """ Configure hugepages """
    hugepage_config = config('hugepages')
    if hugepage_config:
        # TODO: defaults to 2M - this should probably be configurable
        #       and support multiple pool sizes - e.g. 2M and 1G.
        hugepage_size = 2048
        if hugepage_config.endswith('%'):
            import psutil
            mem = psutil.virtual_memory()
            hugepage_config_pct = hugepage_config.strip('%')
            hugepage_multiplier = float(hugepage_config_pct) / 100
            hugepages = int((mem.total * hugepage_multiplier) / hugepage_size)
        else:
            hugepages = int(hugepage_config)
        mnt_point = '/run/hugepages/kvm'
        hugepage_support(
            'nova',
            mnt_point=mnt_point,
            group='root',
            nr_hugepages=hugepages,
            mount=False,
            set_shmmax=True,
        )
        if subprocess.call(['mountpoint', mnt_point]):
            fstab_mount(mnt_point)
        rsync(
            charm_dir() + '/files/qemu-hugefsdir',
            '/etc/init.d/qemu-hugefsdir'
        )
        subprocess.check_call('/etc/init.d/qemu-hugefsdir')
        subprocess.check_call(['update-rc.d', 'qemu-hugefsdir', 'defaults'])
Ejemplo n.º 5
0
 def test_hugepage_support_set_shmmax(self):
     self.add_group.return_value = Group()
     self.fstab.Fstab().get_entry_by_attr.return_value = None
     self.fstab.Fstab().Entry.return_value = 'new fstab entry'
     self.check_output.return_value = 2000
     hugepage.hugepage_support('nova', mount=False, set_shmmax=True)
     sysctl_expect = {
         'kernel.shmmax': 536870912,
         'vm.hugetlb_shm_group': '1010',
         'vm.max_map_count': 65536,
         'vm.nr_hugepages': 256
     }
     sysctl_setting_arg = self.sysctl.create.call_args_list[0][0][0]
     self.assertEqual(yaml.load(sysctl_setting_arg), sysctl_expect)
Ejemplo n.º 6
0
 def test_hugepage_support_auto_increase_max_map_count(self):
     self.add_group.return_value = Group()
     hugepage.hugepage_support('nova',
                               group='neutron',
                               nr_hugepages=512,
                               max_map_count=200,
                               mnt_point='/hugepages',
                               pagesize='1G',
                               mount=False)
     sysctl_expect = {
         'vm.hugetlb_shm_group': '1010',
         'vm.max_map_count': 1024,
         'vm.nr_hugepages': 512,
     }
     sysctl_setting_arg = self.sysctl.create.call_args_list[0][0][0]
     self.assertEqual(yaml.load(sysctl_setting_arg), sysctl_expect)
Ejemplo n.º 7
0
 def test_hugepage_support(self):
     self.add_group.return_value = Group()
     self.fstab.Fstab().get_entry_by_attr.return_value = 'old fstab entry'
     self.fstab.Fstab().Entry.return_value = 'new fstab entry'
     hugepage.hugepage_support('nova')
     sysctl_expect = ("{vm.hugetlb_shm_group: '1010', "
                      "vm.max_map_count: 65536, vm.nr_hugepages: 256}\n")
     self.sysctl.create.assert_called_with(
         sysctl_expect, '/etc/sysctl.d/10-hugepage.conf')
     self.mkdir.assert_called_with('/run/hugepages/kvm',
                                   owner='root',
                                   group='root',
                                   perms=0o755,
                                   force=False)
     self.fstab.Fstab().remove_entry.assert_called_with('old fstab entry')
     self.fstab.Fstab().Entry.assert_called_with(
         'nodev', '/run/hugepages/kvm', 'hugetlbfs',
         'mode=1770,gid=1010,pagesize=2MB', 0, 0)
     self.fstab.Fstab().add_entry.assert_called_with('new fstab entry')
     self.fstab_mount.assert_called_with('/run/hugepages/kvm')
def install_hugepages():
    """ Configure hugepages """
    hugepage_config = config('hugepages')
    if hugepage_config:
        mnt_point = '/run/hugepages/kvm'
        hugepage_support(
            'nova',
            mnt_point=mnt_point,
            group='root',
            nr_hugepages=get_hugepage_number(),
            mount=False,
            set_shmmax=True,
        )
        # Remove hugepages entry if present due to Bug #1518771
        Fstab.remove_by_mountpoint(mnt_point)
        if subprocess.call(['mountpoint', mnt_point]):
            service_restart('qemu-kvm')
        rsync(charm_dir() + '/files/qemu-hugefsdir',
              '/etc/init.d/qemu-hugefsdir')
        subprocess.check_call('/etc/init.d/qemu-hugefsdir')
        subprocess.check_call(['update-rc.d', 'qemu-hugefsdir', 'defaults'])
def install_hugepages():
    """ Configure hugepages """
    hugepage_config = config('hugepages')
    if hugepage_config:
        mnt_point = '/run/hugepages/kvm'
        hugepage_support(
            'nova',
            mnt_point=mnt_point,
            group='root',
            nr_hugepages=get_hugepage_number(),
            mount=False,
            set_shmmax=True,
        )
        if subprocess.call(['mountpoint', mnt_point]):
            fstab_mount(mnt_point)
        rsync(
            charm_dir() + '/files/qemu-hugefsdir',
            '/etc/init.d/qemu-hugefsdir'
        )
        subprocess.check_call('/etc/init.d/qemu-hugefsdir')
        subprocess.check_call(['update-rc.d', 'qemu-hugefsdir', 'defaults'])
def install_hugepages():
    """ Configure hugepages """
    hugepage_config = config('hugepages')
    if hugepage_config:
        mnt_point = '/run/hugepages/kvm'
        hugepage_support(
            'nova',
            mnt_point=mnt_point,
            group='root',
            nr_hugepages=get_hugepage_number(),
            mount=False,
            set_shmmax=True,
        )
        # Remove hugepages entry if present due to Bug #1518771
        Fstab.remove_by_mountpoint(mnt_point)
        if subprocess.call(['mountpoint', mnt_point]):
            service_restart('qemu-kvm')
        rsync(
            charm_dir() + '/files/qemu-hugefsdir',
            '/etc/init.d/qemu-hugefsdir'
        )
        subprocess.check_call('/etc/init.d/qemu-hugefsdir')
        subprocess.check_call(['update-rc.d', 'qemu-hugefsdir', 'defaults'])
Ejemplo n.º 11
0
 def test_hugepage_support_no_automount(self):
     self.add_group.return_value = Group()
     self.fstab.Fstab().get_entry_by_attr.return_value = None
     self.fstab.Fstab().Entry.return_value = 'new fstab entry'
     hugepage.hugepage_support('nova', mount=False)
     self.assertEqual(self.fstab_mount.call_args_list, [])
Ejemplo n.º 12
0
 def test_hugepage_support_new_mnt(self):
     self.add_group.return_value = Group()
     self.fstab.Fstab().get_entry_by_attr.return_value = None
     self.fstab.Fstab().Entry.return_value = 'new fstab entry'
     hugepage.hugepage_support('nova')
     self.assertEqual(self.fstab.Fstab().remove_entry.call_args_list, [])