From: Stephen Hemminger <stephen@networkplumber.org> To: dev@dpdk.org Cc: Stephen Hemminger <stephen@networkplumber.org> Subject: [dpdk-dev] [PATCH 01/11] cpu_layout: refactor to meet python standards Date: Sat, 5 Sep 2020 18:31:23 -0700 Message-ID: <20200906013133.26360-2-stephen@networkplumber.org> (raw) In-Reply-To: <20200906013133.26360-1-stephen@networkplumber.org> Rearrange code to make it pass python lint. This includes add a main function, docstring, and some variable name changes. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- usertools/cpu_layout.py | 145 +++++++++++++++++++++++----------------- 1 file changed, 85 insertions(+), 60 deletions(-) diff --git a/usertools/cpu_layout.py b/usertools/cpu_layout.py index 89a48cec463e..1e4577143ac5 100755 --- a/usertools/cpu_layout.py +++ b/usertools/cpu_layout.py @@ -2,67 +2,92 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2010-2014 Intel Corporation # Copyright(c) 2017 Cavium, Inc. All rights reserved. +""" +Show CPU layout +""" +SYS_DEVICES_CPU = "/sys/devices/system/cpu" -import sys - -sockets = [] -cores = [] -core_map = {} -base_path = "/sys/devices/system/cpu" -fd = open("{}/kernel_max".format(base_path)) -max_cpus = int(fd.read()) -fd.close() -for cpu in range(max_cpus + 1): - try: - fd = open("{}/cpu{}/topology/core_id".format(base_path, cpu)) - except IOError: - continue - except: - break - core = int(fd.read()) - fd.close() - fd = open("{}/cpu{}/topology/physical_package_id".format(base_path, cpu)) - socket = int(fd.read()) - fd.close() - if core not in cores: - cores.append(core) - if socket not in sockets: - sockets.append(socket) - key = (socket, core) - if key not in core_map: - core_map[key] = [] - core_map[key].append(cpu) - -print(format("=" * (47 + len(base_path)))) -print("Core and Socket Information (as reported by '{}')".format(base_path)) -print("{}\n".format("=" * (47 + len(base_path)))) -print("cores = ", cores) -print("sockets = ", sockets) -print("") - -max_processor_len = len(str(len(cores) * len(sockets) * 2 - 1)) -max_thread_count = len(list(core_map.values())[0]) -max_core_map_len = (max_processor_len * max_thread_count) \ + +def print_coremap(sockets, cores, core_map): + '''print core, thread, socket mapping''' + max_processor_len = len(str(len(cores) * len(sockets) * 2 - 1)) + max_thread_count = len(list(core_map.values())[0]) + max_core_map_len = (max_processor_len * max_thread_count) \ + len(", ") * (max_thread_count - 1) \ + len('[]') + len('Socket ') -max_core_id_len = len(str(max(cores))) - -output = " ".ljust(max_core_id_len + len('Core ')) -for s in sockets: - output += " Socket %s" % str(s).ljust(max_core_map_len - len('Socket ')) -print(output) - -output = " ".ljust(max_core_id_len + len('Core ')) -for s in sockets: - output += " --------".ljust(max_core_map_len) - output += " " -print(output) - -for c in cores: - output = "Core %s" % str(c).ljust(max_core_id_len) - for s in sockets: - if (s,c) in core_map: - output += " " + str(core_map[(s, c)]).ljust(max_core_map_len) - else: - output += " " * (max_core_map_len + 1) + + max_core_id_len = len(str(max(cores))) + + output = " ".ljust(max_core_id_len + len('Core ')) + for socket in sockets: + output += " Socket %s" % str(socket).ljust(max_core_map_len - + len('Socket ')) + print(output) + + output = " ".ljust(max_core_id_len + len('Core ')) + for socket in sockets: + output += " --------".ljust(max_core_map_len) + output += " " print(output) + + for core in cores: + output = "Core %s" % str(core).ljust(max_core_id_len) + for socket in sockets: + if (socket, core) in core_map: + output += " " + str(core_map[(socket, + core)]).ljust(max_core_map_len) + else: + output += " " * (max_core_map_len + 1) + print(output) + + +def print_header(sockets, cores): + '''print the core socket information header''' + header_len = 47 + len(SYS_DEVICES_CPU) + print(format("=" * header_len)) + print("Core and Socket Information (as reported by '{}')".format( + SYS_DEVICES_CPU)) + print("{}\n".format("=" * header_len)) + print("cores = ", cores) + print("sockets = ", sockets) + print("") + + +def main(): + '''program main function''' + + with open("{}/kernel_max".format(SYS_DEVICES_CPU)) as kernel_max: + max_cpus = int(kernel_max.read()) + + core_map = {} + sockets = [] + cores = [] + + for cpu in range(max_cpus + 1): + topo_path = "{}/cpu{}/topology/".format(SYS_DEVICES_CPU, cpu) + try: + with open(topo_path + "core_id") as core_id: + core = int(core_id.read()) + except FileNotFoundError: + break + except IOError: + continue + + with open(topo_path + "physical_package_id") as package_id: + socket = int(package_id.read()) + + if core not in cores: + cores.append(core) + if socket not in sockets: + sockets.append(socket) + key = (socket, core) + if key not in core_map: + core_map[key] = [] + core_map[key].append(cpu) + + print_header(sockets, cores) + print_coremap(sockets, cores, core_map) + + +if __name__ == "__main__": + main() -- 2.27.0
next prev parent reply other threads:[~2020-09-06 1:31 UTC|newest] Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-06 1:31 [dpdk-dev] [PATCH 00/11] Python script updates Stephen Hemminger 2020-09-06 1:31 ` Stephen Hemminger [this message] 2020-11-04 6:53 ` [dpdk-dev] [PATCH v2] cpu_layout: refactor to meet python standards Stephen Hemminger 2020-11-04 9:21 ` Bruce Richardson 2020-11-04 16:22 ` Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 02/11] dpdk-pmdinfo: replace string.split with split Stephen Hemminger 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 0/7] dpdk-pmdinfo: python lint cleanups Stephen Hemminger 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 1/7] dpdk-pmdinfo: replace string.split with split Stephen Hemminger 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 2/7] dpdk-pmdinfo: replace io.open with open Stephen Hemminger 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 3/7] dpdk-pmdinfo: remove unnecessary paren and else Stephen Hemminger 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 4/7] dpdk-pmdinfo: replace is False and is True Stephen Hemminger 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 5/7] dpdk-pmdinfo: fix indentation Stephen Hemminger 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 6/7] dpdk-pmdinfo: replace deprecated optparse with argparse Stephen Hemminger 2020-11-24 6:35 ` Jiang, YuX 2020-11-04 6:48 ` [dpdk-dev] [PATCH v2 7/7] dpdk-pmdinfo: do not use len(x) to test for empty Stephen Hemminger 2020-11-22 20:54 ` [dpdk-dev] [PATCH v2 0/7] dpdk-pmdinfo: python lint cleanups Thomas Monjalon 2020-09-06 1:31 ` [dpdk-dev] [PATCH 03/11] dpdk-pmdinfo: replace io.open with open Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 04/11] dpdk-pmdinfo: remove dead code Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 05/11] dpdk-pmdinfo: remove unnecessary paren and else Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 06/11] dpdk-pmdinfo: replace is False and is True Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 07/11] dpdk-pmdinfo: fix indentation Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 08/11] dpdk-pmdinfo: replace deprecated optparse with argparse Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 09/11] dpdk-pmdinfo: do not use len(x) to test for empty Stephen Hemminger 2020-09-07 9:03 ` Bruce Richardson 2020-09-07 17:20 ` Stephen Hemminger 2020-09-06 1:31 ` [dpdk-dev] [PATCH 10/11] dpdk-telemetry-client: fix some pylint warnings Stephen Hemminger 2020-09-07 9:05 ` Bruce Richardson 2020-11-04 7:00 ` [dpdk-dev] [PATCH v2] " Stephen Hemminger 2020-11-15 23:06 ` Thomas Monjalon 2020-09-06 1:31 ` [dpdk-dev] [PATCH 11/11] dpdk-devbind: use argparse instead of getopt Stephen Hemminger 2020-11-04 7:03 ` [dpdk-dev] [PATCH v2 0/6] dpdk-devbind: python lint cleanups Stephen Hemminger 2020-11-04 7:03 ` [dpdk-dev] [PATCH v2 1/6] dpdk-devbind: use argparse instead of getopt Stephen Hemminger 2020-11-04 7:03 ` [dpdk-dev] [PATCH v2 2/6] dpdk-devbind: fix indentation Stephen Hemminger 2020-11-04 7:03 ` [dpdk-dev] [PATCH v2 3/6] dpdk-devbind: fix python lint warnings for imports Stephen Hemminger 2020-11-04 7:03 ` [dpdk-dev] [PATCH v2 4/6] dpdk-devbind: do not use len(x) to test for empty Stephen Hemminger 2020-11-04 7:03 ` [dpdk-dev] [PATCH v2 5/6] dpdk-devbind: fix unnecessary else after return Stephen Hemminger 2020-11-04 7:03 ` [dpdk-dev] [PATCH v2 6/6] dpdk-devbind: use in to test for multiple strings Stephen Hemminger 2020-11-04 9:28 ` [dpdk-dev] [PATCH v2 0/6] dpdk-devbind: python lint cleanups Bruce Richardson 2020-11-22 21:03 ` Thomas Monjalon 2020-11-04 16:57 ` Stephen Hemminger
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200906013133.26360-2-stephen@networkplumber.org \ --to=stephen@networkplumber.org \ --cc=dev@dpdk.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git