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()
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'])
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)
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)
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'])
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, [])
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, [])