X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=usertools%2Fdpdk-hugepages.py;h=4fdb199744b7950c43e97cc0abd831fa52b8466e;hb=092ffe854dafe98f3e8e4c412211b80f6932315e;hp=70432f9cd74195a3d3d5d606a5148709ed9d1356;hpb=b25f0a7df80b620bab09dcb34bf4547d31ddede1;p=dpdk.git diff --git a/usertools/dpdk-hugepages.py b/usertools/dpdk-hugepages.py index 70432f9cd7..4fdb199744 100755 --- a/usertools/dpdk-hugepages.py +++ b/usertools/dpdk-hugepages.py @@ -29,7 +29,7 @@ def get_memsize(arg): '''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 == "": @@ -43,6 +43,13 @@ def is_numa(): 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: @@ -50,20 +57,21 @@ def get_hugepages(path): 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)) - if get_hugepages(path) != pages: - sys.exit('Unable to reserve required pages.') + 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(): @@ -248,6 +256,8 @@ To a complete setup of with 2 Gigabyte of 1G huge pages: 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()