Martin Polednik has uploaded a new change for review. Change subject: caps: refactor cpuinfo parsing ......................................................................
caps: refactor cpuinfo parsing The cpuinfo file parsing gathers information such as CPU model name, frequency and supported flags. Current code parses whole file, keeping all the CPU information. This is not effective as the values are duplicates - therefore allowing us to parse only the essential information and discard the rest. Change-Id: Ib705bba4789bd1938bf26ae387af72b079020ce7 Signed-off-by: Martin Polednik <[email protected]> --- M vdsm/caps.py 1 file changed, 32 insertions(+), 28 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/23/51523/1 diff --git a/vdsm/caps.py b/vdsm/caps.py index 98cd543..998f283 100644 --- a/vdsm/caps.py +++ b/vdsm/caps.py @@ -29,6 +29,7 @@ import glob import re import xml.etree.ElementTree as ET +from collections import namedtuple from distutils.version import LooseVersion import libvirt @@ -91,45 +92,48 @@ class CpuInfo(object): def __init__(self, cpuinfo='/proc/cpuinfo'): """Parse /proc/cpuinfo""" - self._info = {} - p = {} - self._arch = platform.machine() + self.arch = cpuarch.real() + self.required_fields_for_platform = { + cpuarch.X86_64: ('flags', 'cpu MHz', 'model name'), + cpuarch.PPC64: ('flags', 'clock', 'cpu'), + cpuarch.PPC64LE: ('flags', 'clock', 'cpu')} + self.parsed_fields = {field: None for field in + self.required_fields_for_platform[self.arch]} + + if cpuarch.is_ppc(self.arch): + self.parsed_fields['flags'] = ['powernv'] with open(cpuinfo) as info: for line in info: - if line.strip() == '': - p = {} + if not line.strip(): continue + key, value = map(str.strip, line.split(':', 1)) - if key == 'processor': - self._info[value] = p - else: - p[key] = value + + try: + index = self.required_fields_for_platform[ + self.arch].index(key) + except ValueError: + continue + + self.parsed_fields[self.required_fields_for_platform[ + self.arch][index]] = value + + if (len(filter(None, self.parsed_fields.values())) == + len(self.required_fields_for_platform[self.arch])): + break def flags(self): - if cpuarch.is_x86(self._arch): - return self._info.itervalues().next()['flags'].split() - elif cpuarch.is_ppc(self._arch): - return ['powernv'] - else: - raise RuntimeError('Unsupported architecture') + return self.parsed_fields[ + self.required_fields_for_platform[self.arch][0]].split() def mhz(self): - if cpuarch.is_x86(self._arch): - return self._info.itervalues().next()['cpu MHz'] - elif cpuarch.is_ppc(self._arch): - clock = self._info.itervalues().next()['clock'] - return clock[:-3] - else: - raise RuntimeError('Unsupported architecture') + return self.parsed_fields[ + self.required_fields_for_platform[self.arch][1]] def model(self): - if cpuarch.is_x86(self._arch): - return self._info.itervalues().next()['model name'] - elif cpuarch.is_ppc(self._arch): - return self._info.itervalues().next()['cpu'] - else: - raise RuntimeError('Unsupported architecture') + return self.parsed_fields[ + self.required_fields_for_platform[self.arch][2]] class CpuTopology(object): -- To view, visit https://gerrit.ovirt.org/51523 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib705bba4789bd1938bf26ae387af72b079020ce7 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Martin Polednik <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
