make python scripts PEP8 compliant
[dpdk.git] / tools / cpu_layout.py
1 #! /usr/bin/python
2 #
3 #   BSD LICENSE
4 #
5 #   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
6 #   All rights reserved.
7 #
8 #   Redistribution and use in source and binary forms, with or without
9 #   modification, are permitted provided that the following conditions
10 #   are met:
11 #
12 #     * Redistributions of source code must retain the above copyright
13 #       notice, this list of conditions and the following disclaimer.
14 #     * Redistributions in binary form must reproduce the above copyright
15 #       notice, this list of conditions and the following disclaimer in
16 #       the documentation and/or other materials provided with the
17 #       distribution.
18 #     * Neither the name of Intel Corporation nor the names of its
19 #       contributors may be used to endorse or promote products derived
20 #       from this software without specific prior written permission.
21 #
22 #   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 #   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 #   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 #   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 #   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 #   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 #   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 #   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 #   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 #   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 #   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #
34
35 import sys
36
37 sockets = []
38 cores = []
39 core_map = {}
40
41 fd = open("/proc/cpuinfo")
42 lines = fd.readlines()
43 fd.close()
44
45 core_details = []
46 core_lines = {}
47 for line in lines:
48     if len(line.strip()) != 0:
49         name, value = line.split(":", 1)
50         core_lines[name.strip()] = value.strip()
51     else:
52         core_details.append(core_lines)
53         core_lines = {}
54
55 for core in core_details:
56     for field in ["processor", "core id", "physical id"]:
57         if field not in core:
58             print "Error getting '%s' value from /proc/cpuinfo" % field
59             sys.exit(1)
60         core[field] = int(core[field])
61
62     if core["core id"] not in cores:
63         cores.append(core["core id"])
64     if core["physical id"] not in sockets:
65         sockets.append(core["physical id"])
66     key = (core["physical id"], core["core id"])
67     if key not in core_map:
68         core_map[key] = []
69     core_map[key].append(core["processor"])
70
71 print "============================================================"
72 print "Core and Socket Information (as reported by '/proc/cpuinfo')"
73 print "============================================================\n"
74 print "cores = ", cores
75 print "sockets = ", sockets
76 print ""
77
78 max_processor_len = len(str(len(cores) * len(sockets) * 2 - 1))
79 max_core_map_len = max_processor_len * 2 + len('[, ]') + len('Socket ')
80 max_core_id_len = len(str(max(cores)))
81
82 print " ".ljust(max_core_id_len + len('Core ')),
83 for s in sockets:
84     print "Socket %s" % str(s).ljust(max_core_map_len - len('Socket ')),
85 print ""
86
87 print " ".ljust(max_core_id_len + len('Core ')),
88 for s in sockets:
89     print "--------".ljust(max_core_map_len),
90 print ""
91
92 for c in cores:
93     print "Core %s" % str(c).ljust(max_core_id_len),
94     for s in sockets:
95         print str(core_map[(s, c)]).ljust(max_core_map_len),
96     print ""