Merge pull request #3044 from chrisgardner/solaris_facts

Solaris facts
This commit is contained in:
Michael DeHaan 2013-05-31 13:15:58 -07:00
commit 291cd0b0c4

View file

@ -668,13 +668,45 @@ class SunOSHardware(Hardware):
return self.facts return self.facts
def get_cpu_facts(self): def get_cpu_facts(self):
rc, out, err = module.run_command("/usr/sbin/psrinfo -v") physid = 0
sockets = {}
rc, out, err = module.run_command("/usr/bin/kstat cpu_info")
self.facts['processor'] = [] self.facts['processor'] = []
for line in out.split('\n'): for line in out.split('\n'):
if 'processor operates' in line: if len(line) < 1:
continue
data = line.split(None, 1)
key = data[0].strip()
# "brand" works on Solaris 10 & 11. "implementation" for Solaris 9.
if key == 'module:':
brand = ''
elif key == 'brand':
brand = data[1].strip()
elif key == 'clock_MHz':
clock_mhz = data[1].strip()
elif key == 'implementation':
processor = brand or data[1].strip()
# Add clock speed to description for SPARC CPU
if self.facts['machine'] != 'i86pc':
processor += " @ " + clock_mhz + "MHz"
if 'processor' not in self.facts: if 'processor' not in self.facts:
self.facts['processor'] = [] self.facts['processor'] = []
self.facts['processor'].append(line.strip()) self.facts['processor'].append(processor)
elif key == 'chip_id':
physid = data[1].strip()
if physid not in sockets:
sockets[physid] = 1
else:
sockets[physid] += 1
# Counting cores on Solaris can be complicated.
# https://blogs.oracle.com/mandalika/entry/solaris_show_me_the_cpu
# Treat 'processor_count' as physical sockets and 'processor_cores' as
# virtual CPUs visisble to Solaris. Not a true count of cores for modern SPARC as
# these processors have: sockets -> cores -> threads/virtual CPU.
if len(sockets) > 0:
self.facts['processor_count'] = len(sockets)
self.facts['processor_cores'] = reduce(lambda x, y: x + y, sockets.values())
else:
self.facts['processor_cores'] = 'NA' self.facts['processor_cores'] = 'NA'
self.facts['processor_count'] = len(self.facts['processor']) self.facts['processor_count'] = len(self.facts['processor'])