Make the CPU facts Hyperthreading aware

This commit is contained in:
Aaron Brady 2013-07-03 16:25:35 +01:00
parent c2a4645349
commit 34617476d0

View file

@ -518,7 +518,9 @@ class LinuxHardware(Hardware):
def get_cpu_facts(self): def get_cpu_facts(self):
i = 0 i = 0
physid = 0 physid = 0
coreid = 0
sockets = {} sockets = {}
cores = {}
if not os.access("/proc/cpuinfo", os.R_OK): if not os.access("/proc/cpuinfo", os.R_OK):
return return
self.facts['processor'] = [] self.facts['processor'] = []
@ -536,14 +538,20 @@ class LinuxHardware(Hardware):
physid = data[1].strip() physid = data[1].strip()
if physid not in sockets: if physid not in sockets:
sockets[physid] = 1 sockets[physid] = 1
elif key == 'core id':
coreid = data[1].strip()
if coreid not in sockets:
cores[coreid] = 1
elif key == 'cpu cores': elif key == 'cpu cores':
sockets[physid] = int(data[1].strip()) sockets[physid] = int(data[1].strip())
if len(sockets) > 0: elif key == 'siblings':
self.facts['processor_count'] = len(sockets) cores[coreid] = int(data[1].strip())
self.facts['processor_cores'] = reduce(lambda x, y: x + y, sockets.values()) self.facts['processor_count'] = sockets and len(sockets) or i
else: self.facts['processor_cores'] = sockets.values() and sockets.values()[0] or 1
self.facts['processor_count'] = i self.facts['processor_threads_per_core'] = ((cores.values() and
self.facts['processor_cores'] = 'NA' cores.values()[0] or 1) / self.facts['processor_cores'])
self.facts['processor_vcpus'] = (self.facts['processor_threads_per_core'] *
self.facts['processor_count'] * self.facts['processor_cores'])
def get_dmi_facts(self): def get_dmi_facts(self):
''' learn dmi facts from system ''' learn dmi facts from system