1*3f6f8362SLouise Kilheeney#!/usr/bin/env python3 29c75ffc4SHemant Agrawal# SPDX-License-Identifier: BSD-3-Clause 39c75ffc4SHemant Agrawal# Copyright(c) 2010-2014 Intel Corporation 43abcd29fSJerin Jacob# Copyright(c) 2017 Cavium, Inc. All rights reserved. 59c75ffc4SHemant Agrawal 6c6dab2a8SThomas Monjalonsockets = [] 7c6dab2a8SThomas Monjaloncores = [] 8c6dab2a8SThomas Monjaloncore_map = {} 9deb87e67SAndriy Berestovskyybase_path = "/sys/devices/system/cpu" 10deb87e67SAndriy Berestovskyyfd = open("{}/kernel_max".format(base_path)) 11deb87e67SAndriy Berestovskyymax_cpus = int(fd.read()) 12c6dab2a8SThomas Monjalonfd.close() 13*3f6f8362SLouise Kilheeneyfor cpu in range(max_cpus + 1): 14deb87e67SAndriy Berestovskyy try: 15deb87e67SAndriy Berestovskyy fd = open("{}/cpu{}/topology/core_id".format(base_path, cpu)) 1663985c5fSGowrishankar Muthukrishnan except IOError: 1763985c5fSGowrishankar Muthukrishnan continue 18deb87e67SAndriy Berestovskyy core = int(fd.read()) 19deb87e67SAndriy Berestovskyy fd.close() 20deb87e67SAndriy Berestovskyy fd = open("{}/cpu{}/topology/physical_package_id".format(base_path, cpu)) 21deb87e67SAndriy Berestovskyy socket = int(fd.read()) 22deb87e67SAndriy Berestovskyy fd.close() 23deb87e67SAndriy Berestovskyy if core not in cores: 24deb87e67SAndriy Berestovskyy cores.append(core) 25deb87e67SAndriy Berestovskyy if socket not in sockets: 26deb87e67SAndriy Berestovskyy sockets.append(socket) 27deb87e67SAndriy Berestovskyy key = (socket, core) 28c6dab2a8SThomas Monjalon if key not in core_map: 29c6dab2a8SThomas Monjalon core_map[key] = [] 30deb87e67SAndriy Berestovskyy core_map[key].append(cpu) 31c6dab2a8SThomas Monjalon 32deb87e67SAndriy Berestovskyyprint(format("=" * (47 + len(base_path)))) 33deb87e67SAndriy Berestovskyyprint("Core and Socket Information (as reported by '{}')".format(base_path)) 34deb87e67SAndriy Berestovskyyprint("{}\n".format("=" * (47 + len(base_path)))) 35c6dab2a8SThomas Monjalonprint("cores = ", cores) 36c6dab2a8SThomas Monjalonprint("sockets = ", sockets) 37c6dab2a8SThomas Monjalonprint("") 38c6dab2a8SThomas Monjalon 39c6dab2a8SThomas Monjalonmax_processor_len = len(str(len(cores) * len(sockets) * 2 - 1)) 40c9208f1dSThomas Monjalonmax_thread_count = len(list(core_map.values())[0]) 4163985c5fSGowrishankar Muthukrishnanmax_core_map_len = (max_processor_len * max_thread_count) \ 4263985c5fSGowrishankar Muthukrishnan + len(", ") * (max_thread_count - 1) \ 4363985c5fSGowrishankar Muthukrishnan + len('[]') + len('Socket ') 44c6dab2a8SThomas Monjalonmax_core_id_len = len(str(max(cores))) 45c6dab2a8SThomas Monjalon 46c6dab2a8SThomas Monjalonoutput = " ".ljust(max_core_id_len + len('Core ')) 47c6dab2a8SThomas Monjalonfor s in sockets: 48c6dab2a8SThomas Monjalon output += " Socket %s" % str(s).ljust(max_core_map_len - len('Socket ')) 49c6dab2a8SThomas Monjalonprint(output) 50c6dab2a8SThomas Monjalon 51c6dab2a8SThomas Monjalonoutput = " ".ljust(max_core_id_len + len('Core ')) 52c6dab2a8SThomas Monjalonfor s in sockets: 53c6dab2a8SThomas Monjalon output += " --------".ljust(max_core_map_len) 54c6dab2a8SThomas Monjalon output += " " 55c6dab2a8SThomas Monjalonprint(output) 56c6dab2a8SThomas Monjalon 57c6dab2a8SThomas Monjalonfor c in cores: 58c6dab2a8SThomas Monjalon output = "Core %s" % str(c).ljust(max_core_id_len) 59c6dab2a8SThomas Monjalon for s in sockets: 60c9208f1dSThomas Monjalon if (s, c) in core_map: 61c6dab2a8SThomas Monjalon output += " " + str(core_map[(s, c)]).ljust(max_core_map_len) 6263985c5fSGowrishankar Muthukrishnan else: 6363985c5fSGowrishankar Muthukrishnan output += " " * (max_core_map_len + 1) 64c6dab2a8SThomas Monjalon print(output) 65