'''Convert memory size with suffix to kB'''
match = re.match(r'(\d+)([' + BINARY_PREFIX + r']?)$', arg.upper())
if match is None:
- sys.exit('{} is not a valid page size'.format(arg))
+ sys.exit('{} is not a valid size'.format(arg))
num = float(match.group(1))
suffix = match.group(2)
if suffix == "":
return os.path.exists('/sys/devices/system/node')
+def get_valid_page_sizes(path):
+ '''Extract valid hugepage sizes'''
+ dir = os.path.dirname(path)
+ pg_sizes = (d.split("-")[1] for d in os.listdir(dir))
+ return " ".join(pg_sizes)
+
+
def get_hugepages(path):
'''Read number of reserved pages'''
with open(path + '/nr_hugepages') as nr_hugepages:
return 0
-def set_hugepages(path, pages):
+def set_hugepages(path, reqpages):
'''Write the number of reserved huge pages'''
filename = path + '/nr_hugepages'
try:
with open(filename, 'w') as nr_hugepages:
- nr_hugepages.write('{}\n'.format(pages))
+ nr_hugepages.write('{}\n'.format(reqpages))
except PermissionError:
sys.exit('Permission denied: need to be root!')
except FileNotFoundError:
- filename = os.path.basename(path)
- size = filename[10:]
- sys.exit('{} is not a valid system huge page size'.format(size))
+ sys.exit("Invalid page size. Valid page sizes: {}".format(
+ get_valid_page_sizes(path)))
+ gotpages = get_hugepages(path)
+ if gotpages != reqpages:
+ sys.exit('Unable to set pages ({} instead of {} in {}).'.format(
+ gotpages, reqpages, filename))
def show_numa_pages():
for numa_path in glob.glob('/sys/devices/system/node/node*'):
node = numa_path[29:] # slice after /sys/devices/system/node/node
path = numa_path + '/hugepages'
+ if not os.path.exists(path):
+ continue
for hdir in os.listdir(path):
pages = get_hugepages(path + '/' + hdir)
if pages > 0:
pagesize_kb = get_memsize(args.pagesize)
else:
pagesize_kb = default_pagesize()
+ if not pagesize_kb:
+ sys.exit("Invalid page size: {}kB".format(pagesize_kb))
if args.clear:
clear_pages()