xref: /f-stack/dpdk/usertools/cpu_layout.py (revision 2d9fd380)
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