1# Copyright 2018 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5 6import logging 7import subprocess 8 9from autotest_lib.client.common_lib import error 10 11cpu_list = { 12 'Intel(R) Celeron(R) 2955U @ 1.40GHz' : 'intel_celeron_2955U', 13 'Intel(R) Celeron(R) 2957U @ 1.40GHz' : 'intel_celeron_2957U', 14 'Intel(R) Celeron(R) CPU 1007U @ 1.50GHz' : 'intel_celeron_1007U', 15 'Intel(R) Celeron(R) CPU 847 @ 1.10GHz' : 'intel_celeron_847', 16 'Intel(R) Celeron(R) CPU 867 @ 1.30GHz' : 'intel_celeron_867', 17 'Intel(R) Celeron(R) CPU 877 @ 1.40GHz' : 'intel_celeron_877', 18 'Intel(R) Celeron(R) CPU B840 @ 1.90GHz' : 'intel_celeron_B840', 19 'Intel(R) Core(TM) i3-4005U CPU @ 1.70GHz': 'intel_i3_4005U', 20 'Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz': 'intel_i3_4010U', 21 'Intel(R) Core(TM) i3-4030U CPU @ 1.90GHz': 'intel_i3_4030U', 22 'Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz': 'intel_i5_2450M', 23 'Intel(R) Core(TM) i5-2467M CPU @ 1.60GHz': 'intel_i5_2467M', 24 'Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz': 'intel_i5_2520M', 25 'Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz': 'intel_i7_3427U', 26 'Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz': 'intel_i7_4600U', 27} 28 29 30def detect(): 31 """ 32 Returns CPU type. That is 'Model name' column of 'lscpu'. 33 For example, 'Intel(R) Core(TM) i5-7Y57 CPU @ 1.20GHz' 34 Raise exception if a processor isn't a known one. 35 36 @returns string: CPU type. 37 """ 38 39 def get_cpu_name(cpu_str): 40 # Check if cpu_str is an expected cpu and return an original name 41 # describing it. Otherwise an exception is thrown. 42 logging.debug('Parse CPU type: %s', cpu_str) 43 return cpu_list[cpu_str] 44 45 try: 46 lscpu_result = subprocess.check_output(['lscpu']) 47 except subprocess.CalledProcessError: 48 logging.exception('lscpu failed.') 49 raise error.TestFail('Fail to execute "lscpu"') 50 51 logging.debug('The result of lscpu.') 52 for cpu_info in lscpu_result.splitlines(): 53 logging.debug(cpu_info) 54 if not ':' in cpu_info: 55 continue 56 key, value = cpu_info.split(':', 1) 57 if key == 'Model name': 58 return get_cpu_name(value.strip()) 59 60 raise error.TestFail("Couldn't get CPU type.") 61