base_utils.py: Use get_cpuinfo() to read /proc/cpuinfo; reorganize Use get_cpuinfo() to read and parse /proc/cpuinfo where possible. Move all cpu information functions together. TEST=none BUG=none Change-Id: I988570b9be74875dfc02cd7ea701c3b71bfa6954 Reviewed-on: https://chromium-review.googlesource.com/260101 Reviewed-by: Simon Que <[email protected]> Tested-by: David Sharp <[email protected]> Commit-Queue: David Sharp <[email protected]>
diff --git a/client/bin/base_utils.py b/client/bin/base_utils.py index c847a75..5384bdb 100644 --- a/client/bin/base_utils.py +++ b/client/bin/base_utils.py
@@ -288,6 +288,7 @@ _CPUINFO_RE = re.compile(r'^(?P<key>[^\t]*)\t*: ?(?P<value>.*)$') + def get_cpuinfo(): """Read /proc/cpuinfo and convert to a list of dicts.""" cpuinfo = [] @@ -306,6 +307,7 @@ cpuinfo.append(cpu) return cpuinfo + def get_cpu_arch(): """Work out which CPU architecture we're running on""" f = open('/proc/cpuinfo', 'r') @@ -330,6 +332,7 @@ else: return 'i386' + def get_arm_soc_family(): """Work out which ARM SoC we're running on""" f = open('/proc/cpuinfo', 'r') @@ -343,6 +346,7 @@ return 'rockchip' return 'arm' + def get_cpu_soc_family(): """Like get_cpu_arch, but for ARM, returns the SoC family name""" family = get_cpu_arch() @@ -350,6 +354,7 @@ family = get_arm_soc_family() return family + INTEL_UARCH_TABLE = { '06_36': 'Atom', '06_26': 'Atom', @@ -380,6 +385,7 @@ '06_0D': 'Dothan', } + def get_intel_cpu_uarch(numeric=False): """Return the Intel microarchitecture we're running on, or None. @@ -419,15 +425,43 @@ except Exception as e: logging.exception('can not get cpu count from' ' multiprocessing.cpu_count()') - - f = file('/proc/cpuinfo', 'r') - cpus = 0 - for line in f.readlines(): - # Matches lines like "processor : 0" - if re.search(r'^processor\s*:\s*[0-9]+$', line): - cpus += 1 + cpuinfo = get_cpuinfo() # Returns at least one cpu. Check comment #1 in crosbug.com/p/9582. - return cpus if cpus > 0 else 1 + return len(cpuinfo) or 1 + + +def cpu_online_map(): + """ + Check out the available cpu online map + """ + cpuinfo = get_cpuinfo() + cpus = [] + for cpu in cpuinfo: + cpus.append(cpu['processor']) # grab cpu number + return cpus + + +def get_cpu_family(): + cpuinfo = get_cpuinfo()[0] + return int(cpuinfo['cpu_family']) + + +def get_cpu_vendor(): + cpuinfo = get_cpuinfo() + vendors = [cpu['vendor_id'] for cpu in cpuinfo] + for v in vendors[1:]: + if v != vendors[0]: + raise error.TestError('multiple cpu vendors found: ' + str(vendors)) + return vendors[0] + + +def probe_cpus(): + """ + This routine returns a list of cpu devices found under + /sys/devices/system/cpu. + """ + cmd = 'find /sys/devices/system/cpu/ -maxdepth 1 -type d -name cpu*' + return utils.system_output(cmd).splitlines() # Returns total memory in kb @@ -617,17 +651,6 @@ raise ValueError("Kernel doesn't have a %s feature" % (feature)) -def cpu_online_map(): - """ - Check out the available cpu online map - """ - cpus = [] - for line in open('/proc/cpuinfo', 'r').readlines(): - if line.startswith('processor'): - cpus.append(line.split()[2]) # grab cpu number - return cpus - - def check_glibc_ver(ver): glibc_ver = commands.getoutput('ldd --version').splitlines()[0] glibc_ver = re.search(r'(\d+\.\d+(\.\d+)?)', glibc_ver).group() @@ -724,16 +747,6 @@ return os.statvfs(path).f_bsize -def get_cpu_family(): - procinfo = utils.system_output('cat /proc/cpuinfo') - CPU_FAMILY_RE = re.compile(r'^cpu family\s+:\s+(\S+)', re.M) - matches = CPU_FAMILY_RE.findall(procinfo) - if matches: - return int(matches[0]) - else: - raise error.TestError('Could not get valid cpu family data') - - def get_disks(): df_output = utils.system_output('df') disk_re = re.compile(r'^(/dev/hd[a-z]+)3', re.M) @@ -955,24 +968,6 @@ utils.system('/sbin/sysctl vm.nr_hugepages=%d' % num) -def get_cpu_vendor(): - cpuinfo = open('/proc/cpuinfo').read() - vendors = re.findall(r'(?m)^vendor_id\s*:\s*(\S+)\s*$', cpuinfo) - for i in xrange(1, len(vendors)): - if vendors[i] != vendors[0]: - raise error.TestError('multiple cpu vendors found: ' + str(vendors)) - return vendors[0] - - -def probe_cpus(): - """ - This routine returns a list of cpu devices found under - /sys/devices/system/cpu. - """ - cmd = 'find /sys/devices/system/cpu/ -maxdepth 1 -type d -name cpu*' - return utils.system_output(cmd).splitlines() - - def ping_default_gateway(): """Ping the default gateway."""