update Intel copyright years to 2014
[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 for s in sockets:
79         print "\tSocket %s" % s,
80 print ""
81 for s in sockets:
82         print "\t---------",
83 print ""
84
85 for c in cores:
86         print "Core %s" % c,
87         for s in sockets:
88                 print "\t", core_map[(s,c)],
89         print "\n"