4
Written by Jeffrey Lane <jeffrey.lane@canonical.com>
12
Class to get and handle information from /proc/cpuinfo
13
Creates a dictionary of data gleaned from that file.
17
cpu_fh = open('/proc/cpuinfo', 'r')
19
temp = cpu_fh.readlines()
24
if i.startswith('processor'):
25
key = 'cpu' + (i.split(':')[1].strip())
26
self.cpuinfo[key] = {'core_id':'', 'physical_package_id':''}
27
elif i.startswith('core id'):
28
self.cpuinfo[key].update({'core_id': i.split(':')[1].strip()})
29
elif i.startswith('physical id'):
30
self.cpuinfo[key].update({'physical_package_id':
31
i.split(':')[1].strip()})
38
Class to get and handle information from sysfs as relates to CPU topology
39
Creates an informational class to present information on various CPUs
42
def __init__(self, proc):
44
self.path = '/sys/devices/system/cpu/' + proc + '/topology'
45
items = ['core_id', 'physical_package_id']
47
syscpu_fh = open(os.path.join(self.path, i), 'r')
49
self.syscpu[i] = syscpu_fh.readline().strip()
54
def compare(proc_cpu, sys_cpu):
57
If there is only 1 CPU the test don't look for core_id
58
and physical_package_id because those information are absent in
59
/proc/cpuinfo on singlecore system
61
for key in proc_cpu.keys():
62
if 'cpu1' not in proc_cpu:
65
for subkey in proc_cpu[key].keys():
66
if proc_cpu[key][subkey] == sys_cpu[key][subkey]:
74
cpuinfo = proc_cpuinfo()
76
keys = cpuinfo.cpuinfo.keys()
78
sys_cpu[k] = sysfs_cpu(k).syscpu
79
cpu_map = compare(cpuinfo.cpuinfo, sys_cpu)
80
if False in cpu_map.values() or len(cpu_map) < 1:
81
print("FAIL: CPU Topology is incorrect", file=sys.stderr)
82
print("-" * 52, file=sys.stderr)
83
print("{0}{1}".format("/proc/cpuinfo".center(30), "sysfs".center(25)),
85
print("{0}{1}{2}{3}{1}{2}".format(
87
"Physical ID".center(13),
89
"|".center(3)), file=sys.stderr)
90
for key in sorted(sys_cpu.keys()):
91
print("{0}{1}{2}{3}{4}{5}".format(
93
cpuinfo.cpuinfo[key]['physical_package_id'].center(13),
94
cpuinfo.cpuinfo[key]['core_id'].center(9),
96
sys_cpu[key]['physical_package_id'].center(13),
97
sys_cpu[key]['core_id'].center(9)), file=sys.stderr)
102
if __name__ == '__main__':