1*2d9fd380Sjfb8856606#!/usr/bin/env python3 2d30ea906Sjfb8856606# SPDX-License-Identifier: BSD-3-Clause 3d30ea906Sjfb8856606# Copyright(c) 2010-2014 Intel Corporation 45af785ecSfengbojiang(姜凤波)# Copyright(c) 2017 Cavium, Inc. All rights reserved. 5d30ea906Sjfb8856606 62bfe3f2eSlogwangsockets = [] 72bfe3f2eSlogwangcores = [] 82bfe3f2eSlogwangcore_map = {} 92bfe3f2eSlogwangbase_path = "/sys/devices/system/cpu" 102bfe3f2eSlogwangfd = open("{}/kernel_max".format(base_path)) 112bfe3f2eSlogwangmax_cpus = int(fd.read()) 122bfe3f2eSlogwangfd.close() 13*2d9fd380Sjfb8856606for cpu in range(max_cpus + 1): 142bfe3f2eSlogwang try: 152bfe3f2eSlogwang fd = open("{}/cpu{}/topology/core_id".format(base_path, cpu)) 162bfe3f2eSlogwang except IOError: 172bfe3f2eSlogwang continue 182bfe3f2eSlogwang core = int(fd.read()) 192bfe3f2eSlogwang fd.close() 202bfe3f2eSlogwang fd = open("{}/cpu{}/topology/physical_package_id".format(base_path, cpu)) 212bfe3f2eSlogwang socket = int(fd.read()) 222bfe3f2eSlogwang fd.close() 232bfe3f2eSlogwang if core not in cores: 242bfe3f2eSlogwang cores.append(core) 252bfe3f2eSlogwang if socket not in sockets: 262bfe3f2eSlogwang sockets.append(socket) 272bfe3f2eSlogwang key = (socket, core) 282bfe3f2eSlogwang if key not in core_map: 292bfe3f2eSlogwang core_map[key] = [] 302bfe3f2eSlogwang core_map[key].append(cpu) 312bfe3f2eSlogwang 322bfe3f2eSlogwangprint(format("=" * (47 + len(base_path)))) 332bfe3f2eSlogwangprint("Core and Socket Information (as reported by '{}')".format(base_path)) 342bfe3f2eSlogwangprint("{}\n".format("=" * (47 + len(base_path)))) 352bfe3f2eSlogwangprint("cores = ", cores) 362bfe3f2eSlogwangprint("sockets = ", sockets) 372bfe3f2eSlogwangprint("") 382bfe3f2eSlogwang 392bfe3f2eSlogwangmax_processor_len = len(str(len(cores) * len(sockets) * 2 - 1)) 402bfe3f2eSlogwangmax_thread_count = len(list(core_map.values())[0]) 412bfe3f2eSlogwangmax_core_map_len = (max_processor_len * max_thread_count) \ 422bfe3f2eSlogwang + len(", ") * (max_thread_count - 1) \ 432bfe3f2eSlogwang + len('[]') + len('Socket ') 442bfe3f2eSlogwangmax_core_id_len = len(str(max(cores))) 452bfe3f2eSlogwang 462bfe3f2eSlogwangoutput = " ".ljust(max_core_id_len + len('Core ')) 472bfe3f2eSlogwangfor s in sockets: 482bfe3f2eSlogwang output += " Socket %s" % str(s).ljust(max_core_map_len - len('Socket ')) 492bfe3f2eSlogwangprint(output) 502bfe3f2eSlogwang 512bfe3f2eSlogwangoutput = " ".ljust(max_core_id_len + len('Core ')) 522bfe3f2eSlogwangfor s in sockets: 532bfe3f2eSlogwang output += " --------".ljust(max_core_map_len) 542bfe3f2eSlogwang output += " " 552bfe3f2eSlogwangprint(output) 562bfe3f2eSlogwang 572bfe3f2eSlogwangfor c in cores: 582bfe3f2eSlogwang output = "Core %s" % str(c).ljust(max_core_id_len) 592bfe3f2eSlogwang for s in sockets: 602bfe3f2eSlogwang if (s, c) in core_map: 612bfe3f2eSlogwang output += " " + str(core_map[(s, c)]).ljust(max_core_map_len) 622bfe3f2eSlogwang else: 632bfe3f2eSlogwang output += " " * (max_core_map_len + 1) 642bfe3f2eSlogwang print(output) 65