def test_bytes_from_string(self): self.assertEqual(strutils.bytes_from_string('3K'), 3072) self.assertEqual(strutils.bytes_from_string('3KB'), 3072) self.assertEqual(strutils.bytes_from_string('3M'), 3145728) self.assertEqual(strutils.bytes_from_string('3MB'), 3145728) self.assertEqual(strutils.bytes_from_string('3G'), 3221225472) self.assertEqual(strutils.bytes_from_string('3GB'), 3221225472) self.assertEqual(strutils.bytes_from_string('3T'), 3298534883328) self.assertEqual(strutils.bytes_from_string('3TB'), 3298534883328) self.assertEqual(strutils.bytes_from_string('3P'), 3377699720527872) self.assertEqual(strutils.bytes_from_string('3PB'), 3377699720527872) self.assertRaises(ValueError, strutils.bytes_from_string, None) self.assertRaises(ValueError, strutils.bytes_from_string, 'foo')
def hugepage_support(user, group='hugetlb', nr_hugepages=256, max_map_count=65536, mnt_point='/run/hugepages/kvm', pagesize='2MB', mount=True, set_shmmax=False): """Enable hugepages on system. Args: user (str) -- Username to allow access to hugepages to group (str) -- Group name to own hugepages nr_hugepages (int) -- Number of pages to reserve max_map_count (int) -- Number of Virtual Memory Areas a process can own mnt_point (str) -- Directory to mount hugepages on pagesize (str) -- Size of hugepages mount (bool) -- Whether to Mount hugepages """ group_info = add_group(group) gid = group_info.gr_gid add_user_to_group(user, group) if max_map_count < 2 * nr_hugepages: max_map_count = 2 * nr_hugepages sysctl_settings = { 'vm.nr_hugepages': nr_hugepages, 'vm.max_map_count': max_map_count, 'vm.hugetlb_shm_group': gid, } if set_shmmax: shmmax_current = int(check_output(['sysctl', '-n', 'kernel.shmmax'])) shmmax_minsize = bytes_from_string(pagesize) * nr_hugepages if shmmax_minsize > shmmax_current: sysctl_settings['kernel.shmmax'] = shmmax_minsize sysctl.create(yaml.dump(sysctl_settings), '/etc/sysctl.d/10-hugepage.conf') mkdir(mnt_point, owner='root', group='root', perms=0o755, force=False) lfstab = fstab.Fstab() fstab_entry = lfstab.get_entry_by_attr('mountpoint', mnt_point) if fstab_entry: lfstab.remove_entry(fstab_entry) entry = lfstab.Entry('nodev', mnt_point, 'hugetlbfs', 'mode=1770,gid={},pagesize={}'.format(gid, pagesize), 0, 0) lfstab.add_entry(entry) if mount: fstab_mount(mnt_point)
def __call__(self): ctxt = {'disk_formats': config('disk-formats')} if config('container-formats'): ctxt['container_formats'] = config('container-formats') image_size_cap = config('image-size-cap') if image_size_cap: try: ctxt['image_size_cap'] = bytes_from_string( image_size_cap.replace(' ', '').upper()) except (ValueError, KeyError): juju_log('Unable to parse value for image-size-cap ({}), ' 'see config.yaml for information about valid ' 'formatting'.format(config('image-size-cap')), level=ERROR) raise return ctxt
def hugepage_support(user, group='hugetlb', nr_hugepages=256, max_map_count=65536, mnt_point='/run/hugepages/kvm', pagesize='2MB', mount=True, set_shmmax=False): """Enable hugepages on system. Args: user (str) -- Username to allow access to hugepages to group (str) -- Group name to own hugepages nr_hugepages (int) -- Number of pages to reserve max_map_count (int) -- Number of Virtual Memory Areas a process can own mnt_point (str) -- Directory to mount hugepages on pagesize (str) -- Size of hugepages mount (bool) -- Whether to Mount hugepages """ group_info = add_group(group) gid = group_info.gr_gid add_user_to_group(user, group) if max_map_count < 2 * nr_hugepages: max_map_count = 2 * nr_hugepages sysctl_settings = { 'vm.nr_hugepages': nr_hugepages, 'vm.max_map_count': max_map_count, 'vm.hugetlb_shm_group': gid, } if set_shmmax: shmmax_current = int(check_output(['sysctl', '-n', 'kernel.shmmax'])) shmmax_minsize = bytes_from_string(pagesize) * nr_hugepages if shmmax_minsize > shmmax_current: sysctl_settings['kernel.shmmax'] = shmmax_minsize sysctl.create(yaml.dump(sysctl_settings), '/etc/sysctl.d/10-hugepage.conf') mkdir(mnt_point, owner='root', group='root', perms=0o755, force=False) lfstab = fstab.Fstab() fstab_entry = lfstab.get_entry_by_attr('mountpoint', mnt_point) if fstab_entry: lfstab.remove_entry(fstab_entry) entry = lfstab.Entry('nodev', mnt_point, 'hugetlbfs', 'mode=1770,gid={},pagesize={}'.format(gid, pagesize), 0, 0) lfstab.add_entry(entry) if mount: fstab_mount(mnt_point)
def _parse_block_device(block_device): ''' Parse a block device string and return either the full path to the block device, or the path to a loopback device and its size :param: block_device: str: Block device as provided in configuration :returns: (str, int): Full path to block device and 0 OR Full path to loopback device and required size ''' _none = ['None', 'none', None] if block_device in _none: return (None, 0) if block_device.startswith('/dev/'): return (block_device, 0) elif block_device.startswith('/'): _bd = block_device.split('|') if len(_bd) == 2: bdev, size = _bd else: bdev = block_device size = DEFAULT_LOOPBACK_SIZE return (bdev, bytes_from_string(str(size))) else: return ('/dev/{}'.format(block_device), 0)
def _parse_block_device(block_device): ''' Parse a block device string and return either the full path to the block device, or the path to a loopback device and its size :param: block_device: str: Block device as provided in configuration :returns: (str, int): Full path to block device and 0 OR Full path to loopback device and required size ''' _none = ['None', 'none', None] if block_device in _none: return (None, 0) if block_device.startswith('/dev/'): return (block_device, 0) elif block_device.startswith('/'): _bd = block_device.split('|') if len(_bd) == 2: bdev, size = _bd else: bdev = block_device size = DEFAULT_LOOPBACK_SIZE return (bdev, bytes_from_string(str(size))) else: return ('/dev/{}'.format(block_device), 0)