X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=usertools%2Fdpdk-hugepages.py;h=4fdb199744b7950c43e97cc0abd831fa52b8466e;hb=9b03958aebaaa49fb9492b53886653e91667be86;hp=1be100ca3312420f688541530b0b473a7737ed60;hpb=6e1b58fa84d309fe6e7668ae79d42fd33d2e8f40;p=dpdk.git diff --git a/usertools/dpdk-hugepages.py b/usertools/dpdk-hugepages.py index 1be100ca33..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,18 +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)) + 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(): @@ -70,6 +80,8 @@ 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: @@ -244,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()