From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BDD0AA0521; Wed, 4 Nov 2020 07:53:16 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9AD22BE63; Wed, 4 Nov 2020 07:53:15 +0100 (CET) Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by dpdk.org (Postfix) with ESMTP id CCF77BE61 for ; Wed, 4 Nov 2020 07:53:14 +0100 (CET) Received: by mail-pf1-f193.google.com with SMTP id 133so16498080pfx.11 for ; Tue, 03 Nov 2020 22:53:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OAU4+hS/iPJClx84c7ya6usooElX4eKEIcF5ryVoEpE=; b=eFf6xyARsv8CTnjv2JIFyRdPsaip1BOEnBRxVnSsz5bHQ2PL+yTq3eygUsZyZKFw6F +vSPeKwn4FElpLWdhev4XW7tpUzHT6a85QiYpO0DepyfltYTqm6q+bwXlQr3vb+gxTpK m9bFiniOaFovRWY9F2H9mQ6pF+E9nbESV8GW9n6JJI1kgVMkhRXMOe8oOKRH2sXenweQ bzz7JICx0vTs/yyLekCwo4dhM+Awcg1juotp9aFuKEJ4fQnFCYfYd5PGNl8l3ZxCvrZO p1m7KX2wZpLAAFVckp3ULi1EMPX9g4jSz+jcLThjq3dgs2rUwu3lEF1vsCvXHYLZcmr6 ra/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OAU4+hS/iPJClx84c7ya6usooElX4eKEIcF5ryVoEpE=; b=Ud9w/pBWc0aBIMzFIUB2PyETnBmQg+43MI8VWIOj64G+jbyVoNE6Nz43sS9SO4zLvi gyXah9tmstcvLCAo1bPyjb1uxQdGQfdxImEv1TsvFHWHH1dpKdk743BNG0brTGaLgfpK mbEFov3ROMc3+c5chzQFYtX0rjsn2ixcDVzGV7TQurzJGhoYSsn303IeZIj9lKmhpDwJ Kg2arkc5J6ZoSn6XlaL4g7TSnUdSnorY8r3fBOBf+COK8GsJ3ZHUifZ7j8TLTnaNQZh8 YicaTVZauxF5TZkNWfiYz9TA2OvonefPCljynw5eFCBE0/j8sl683HNxdRrH3KPBReOv HxUg== X-Gm-Message-State: AOAM533JSP4RLzNKTAxwkI+rk2ZYdRifSnKjzZAOaUxMEzk3JwsoFyju MvD5obadbDysR8JznJfMN4ur5T+dxwRS0RaL X-Google-Smtp-Source: ABdhPJxbqGSkD3yI7CKvagpgAVg9Hi4EDMcxEcv5G5WLC6CwoUg/tOuAT729N+h7O7jtsZsGpCHllg== X-Received: by 2002:a65:6493:: with SMTP id e19mr19926828pgv.276.1604472792601; Tue, 03 Nov 2020 22:53:12 -0800 (PST) Received: from hermes.corp.microsoft.com (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id j6sm1085768pgt.77.2020.11.03.22.53.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Nov 2020 22:53:11 -0800 (PST) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Tue, 3 Nov 2020 22:53:04 -0800 Message-Id: <20201104065304.26886-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200906013133.26360-2-stephen@networkplumber.org> References: <20200906013133.26360-2-stephen@networkplumber.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v2] cpu_layout: refactor to meet python standards X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Rearrange code to make it pass python lint totally clean! This includes add a main function, docstring, and some variable name changes. Signed-off-by: Stephen Hemminger --- v2 - rebase to current main usertools/cpu_layout.py | 143 ++++++++++++++++++++++++---------------- 1 file changed, 85 insertions(+), 58 deletions(-) diff --git a/usertools/cpu_layout.py b/usertools/cpu_layout.py index cc39638213d0..1e4577143ac5 100755 --- a/usertools/cpu_layout.py +++ b/usertools/cpu_layout.py @@ -2,65 +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" -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