def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ # pylint: disable=line-too-long # Based on https://android.googlesource.com/platform/frameworks/base/+/master/libs/hwui/tests/scripts/prep_ryu.sh # All CPUs have the same scaling settings, so we only need to set it once ''' stop thermal-engine stop perfd echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed ''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the fourth core. This will hopefully produce less heat, allowing # for more consistent results. 3 cores should be enough to run Ganesh, # the graphics driver, and the OS. ''' echo 0 > /sys/devices/system/cpu/cpu3/online''', # lock gpu/emc clocks. ''' chown root:root /sys/devices/57000000.gpu/pstate echo %s > /sys/devices/57000000.gpu/pstate''' % GPU_EMC_PROFILE_ID ])) return self
def sanity_check(self): HardwareAndroid.sanity_check(self) if not self._is_root: return result = self._adb.check_lines('''\ cat /sys/class/power_supply/battery/capacity \ /sys/devices/system/cpu/online \ /sys/class/thermal/thermal_zone14/temp \ /sys/class/thermal/thermal_zone15/temp \ /sys/kernel/debug/clk/oxili_gfx3d_clk/measure \ /sys/kernel/debug/clk/bimc_clk/measure for N in 4 5 6; do cat /sys/devices/system/cpu/cpu$N/cpufreq/scaling_cur_freq done''') expectations = \ [Expectation(int, min_value=30, name='battery', sleeptime=30*60), Expectation(str, exact_value='4-6', name='online cpus'), Expectation(int, max_value=88, name='tsens_tz_sensor13'), Expectation(int, max_value=88, name='tsens_tz_sensor14'), Expectation(long, min_value=(GPU_CLOCK_RATE - 5000), max_value=(GPU_CLOCK_RATE + 5000), name='gpu clock rate'), Expectation(long, min_value=647995000, max_value=648007500, name='ddr clock rate', sleeptime=10)] + \ [Expectation(int, exact_value=CPU_CLOCK_RATE, name='cpu_%i clock rate' %i) for i in range(4, 7)] Expectation.check_all(expectations, result)
def sanity_check(self): HardwareAndroid.sanity_check(self) if not self._is_root: return # only issue one shell command in an attempt to minimize interference. result = self._adb.check_lines('''\ cat /sys/class/power_supply/bq27742-0/capacity \ /sys/class/thermal/thermal_zone7/temp \ /sys/class/thermal/thermal_zone0/temp \ /sys/class/thermal/thermal_zone1/temp \ /sys/class/thermal/thermal_zone7/cdev1/cur_state \ /sys/class/thermal/thermal_zone7/cdev0/cur_state for N in $(seq 0 3); do cat /sys/devices/system/cpu/cpu$N/cpufreq/scaling_cur_freq done cat /sys/devices/57000000.gpu/pstate | grep \*$''') expectations = \ [Expectation(int, min_value=30, name='battery', sleeptime=30*60), Expectation(int, max_value=40000, name='skin temperature'), Expectation(int, max_value=86000, name='cpu temperature'), Expectation(int, max_value=87000, name='gpu temperature'), Expectation(int, exact_value=0, name='cpu throttle'), Expectation(int, exact_value=0, name='gpu throttle')] + \ [Expectation(int, exact_value=CPU_CLOCK_RATE, name='cpu_%i clock rate' % i, sleeptime=30) for i in range(4)] + \ [Expectation(str, exact_value=GPU_EMC_PROFILE, name='gpu/emc profile')] Expectation.check_all(expectations, result)
def sanity_check(self): HardwareAndroid.sanity_check(self) if not self._adb.is_root(): return result = self._adb.check('''\ cat /sys/class/power_supply/battery/capacity \ /sys/devices/system/cpu/online \ /sys/class/thermal/thermal_zone14/temp \ /sys/class/thermal/thermal_zone15/temp \ /sys/kernel/debug/clk/oxili_gfx3d_clk/measure \ /sys/kernel/debug/clk/bimc_clk/measure for N in 4 5 6; do cat /sys/devices/system/cpu/cpu$N/cpufreq/scaling_cur_freq done''') expectations = \ [Expectation(int, min_value=30, name='battery', sleeptime=30*60), Expectation(str, exact_value='4-6', name='online cpus'), Expectation(int, max_value=88, name='tsens_tz_sensor13'), Expectation(int, max_value=88, name='tsens_tz_sensor14'), Expectation(long, min_value=(GPU_CLOCK_RATE - 5000), max_value=(GPU_CLOCK_RATE + 5000), name='gpu clock rate'), Expectation(long, min_value=647995000, max_value=648007500, name='ddr clock rate', sleeptime=10)] + \ [Expectation(int, exact_value=CPU_CLOCK_RATE, name='cpu_%i clock rate' %i) for i in range(4, 7)] Expectation.check_all(expectations, result.splitlines())
def sanity_check(self): HardwareAndroid.sanity_check(self) if not self._adb.is_root(): return # only issue one shell command in an attempt to minimize interference. result = self._adb.check('''\ cat /sys/class/power_supply/bq27742-0/capacity \ /sys/devices/system/cpu/online \ /sys/class/thermal/thermal_zone7/temp \ /sys/class/thermal/thermal_zone0/temp \ /sys/class/thermal/thermal_zone1/temp \ /sys/class/thermal/thermal_zone7/cdev1/cur_state \ /sys/class/thermal/thermal_zone7/cdev0/cur_state for N in 0 1 2; do cat /sys/devices/system/cpu/cpu$N/cpufreq/scaling_cur_freq done cat /sys/devices/57000000.gpu/pstate | grep \*$''') expectations = \ [Expectation(int, min_value=30, name='battery', sleeptime=30*60), Expectation(str, exact_value='0-2', name='online cpus'), Expectation(int, max_value=40000, name='skin temperature'), Expectation(int, max_value=86000, name='cpu temperature'), Expectation(int, max_value=87000, name='gpu temperature'), Expectation(int, exact_value=0, name='cpu throttle'), Expectation(int, exact_value=0, name='gpu throttle')] + \ [Expectation(int, exact_value=CPU_CLOCK_RATE, name='cpu_%i clock rate' % i, sleeptime=30) for i in (0, 1, 2)] + \ [Expectation(str, exact_value=GPU_EMC_PROFILE, name='gpu/emc profile')] Expectation.check_all(expectations, result.splitlines())
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ # turn on and lock the first 3 cores. ''' for N in 0 1 2; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the fourth core. ''' echo 0 > /sys/devices/system/cpu/cpu3/online''', # lock gpu/emc clocks. ''' chown root:root /sys/devices/57000000.gpu/pstate echo %s > /sys/devices/57000000.gpu/pstate''' % GPU_EMC_PROFILE_ID ])) return self
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ # pylint: disable=line-too-long # Based on https://android.googlesource.com/platform/frameworks/base/+/master/libs/hwui/tests/scripts/prep_ryu.sh # All CPUs have the same scaling settings, so we only need to set it once ''' stop thermal-engine stop perfd echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed ''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the fourth core. This will hopefully produce less heat, allowing # for more consistent results. 3 cores should be enough to run Ganesh, # the graphics driver, and the OS. ''' echo 0 > /sys/devices/system/cpu/cpu3/online''', # lock gpu/emc clocks. ''' chown root:root /sys/devices/57000000.gpu/pstate echo %s > /sys/devices/57000000.gpu/pstate''' % GPU_EMC_PROFILE_ID])) return self
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ # turn on and lock the first 3 cores. ''' for N in 0 1 2; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the fourth core. ''' echo 0 > /sys/devices/system/cpu/cpu3/online''', # lock gpu/emc clocks. ''' chown root:root /sys/devices/57000000.gpu/pstate echo %s > /sys/devices/57000000.gpu/pstate''' % GPU_EMC_PROFILE_ID])) return self
def sanity_check(self): HardwareAndroid.sanity_check(self) if not self._adb.is_root(): return result = self._adb.check(' '.join( ['cat', '/sys/class/power_supply/battery/capacity', '/sys/devices/system/cpu/online'] + \ ['/sys/devices/system/cpu/cpu%i/cpufreq/scaling_cur_freq' % i for i in range(2, 4)] + \ ['/sys/kernel/debug/clk/bimc_clk/measure', '/sys/class/thermal/thermal_zone22/temp', '/sys/class/thermal/thermal_zone23/temp'])) expectations = \ [Expectation(int, min_value=30, name='battery', sleeptime=30*60), Expectation(str, exact_value='2-3', name='online cpus')] + \ [Expectation(int, exact_value=CPU_CLOCK_RATE, name='cpu_%i clock rate' %i) for i in range(2, 4)] + \ [Expectation(long, min_value=902390000, max_value=902409999, name='measured ddr clock', sleeptime=10), Expectation(int, max_value=41000, name='pm8994_tz temperature'), Expectation(int, max_value=40, name='msm_therm temperature')] Expectation.check_all(expectations, result.splitlines())
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('''\ stop thermal-engine stop thermald stop perfd stop mpdecision''') # enable and lock 3 of 4 big cores. self._adb.shell('''\ for N in 4 5 6; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3))) # turn off all other cores self._adb.shell('''\ for N in 0 1 2 3 7; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''') # gpu/ddr perf commands from # https://developer.qualcomm.com/qfile/28823/lm80-p0436-11_adb_commands.pdf self._adb.shell('''\ echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split echo 1 > /sys/class/kgsl/kgsl-3d0/force_bus_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_rail_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on echo 1000000 > /sys/class/kgsl/kgsl-3d0/idle_timer echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq echo %i > /sys/class/kgsl/kgsl-3d0/gpuclk''' % tuple(GPU_CLOCK_RATE for _ in range(3))) # ddr perf commands from # https://developer.qualcomm.com/qfile/28823/lm80-p0436-11_adb_commands.pdf self._adb.shell('''\ echo performance > /sys/class/devfreq/qcom,cpubw.32/governor echo 9887 > /sys/class/devfreq/qcom,cpubw.32/max_freq echo 9887 > /sys/class/devfreq/qcom,cpubw.32/min_freq echo performance > /sys/class/devfreq/qcom,gpubw.70/governor echo 9887 > /sys/class/devfreq/qcom,gpubw.70/max_freq echo 9887 > /sys/class/devfreq/qcom,gpubw.70/min_freq''') return self
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ # enable and lock the two fast cores. ''' stop thermal-engine stop perfd for N in 3 2; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the two slow cores ''' for N in 1 0; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''', # pylint: disable=line-too-long # Set GPU bus and idle timer # Set DDR frequency to max # Set GPU to performance mode, 315 MHZ # See https://android.googlesource.com/platform/frameworks/base/+/master/libs/hwui/tests/scripts/prep_marlfish.sh ''' echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on echo 10000 > /sys/class/kgsl/kgsl-3d0/idle_timer echo 13763 > /sys/class/devfreq/soc:qcom,gpubw/min_freq echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq echo 4 > /sys/class/kgsl/kgsl-3d0/max_pwrlevel echo 4 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel''' % tuple(GPU_CLOCK_RATE for _ in range(2)) ])) return self
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join(['''\ stop thermal-engine stop thermald stop perfd stop mpdecision''', # enable and lock the two fast cores. ''' for N in 3 2; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the two slow cores ''' for N in 1 0; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''', # gpu perf commands from # https://developer.qualcomm.com/qfile/28823/lm80-p0436-11_adb_commands.pdf ''' echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split echo 1 > /sys/class/kgsl/kgsl-3d0/force_bus_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_rail_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on echo 1000000 > /sys/class/kgsl/kgsl-3d0/idle_timer echo userspace > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo 2 > /sys/class/kgsl/kgsl-3d0/max_pwrlevel echo 2 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel echo 2 > /sys/class/kgsl/kgsl-3d0/thermal_pwrlevel echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq echo %i > /sys/class/kgsl/kgsl-3d0/max_gpuclk echo %i > /sys/class/kgsl/kgsl-3d0/gpuclk''' % tuple(GPU_CLOCK_RATE for _ in range(4))] + \ self._devfreq_lock_cmds)) return self
def main(): # Delimiter is ',' or ' ', skip if nested inside parens (e.g. gpu(a=b,c=d)). DELIMITER = r'[, ](?!(?:[^(]*\([^)]*\))*[^()]*\))' configs = re.split(DELIMITER, FLAGS.config) skps = _path.find_skps(FLAGS.skps) if FLAGS.adb: adb = Adb(FLAGS.device_serial, echo=(FLAGS.verbosity >= 5)) model = adb.check('getprop ro.product.model').strip() if model == 'Pixel C': from _hardware_pixel_c import HardwarePixelC hardware = HardwarePixelC(adb) elif model == 'Nexus 6P': from _hardware_nexus_6p import HardwareNexus6P hardware = HardwareNexus6P(adb) else: from _hardware_android import HardwareAndroid print( "WARNING: %s: don't know how to monitor this hardware; results " "may be unreliable." % model, file=sys.stderr) hardware = HardwareAndroid(adb) else: hardware = Hardware() with hardware: SKPBench.run_warmup(hardware.warmup_time, configs[0]) if FLAGS.resultsfile: with open(FLAGS.resultsfile, mode='a+') as resultsfile: run_benchmarks(configs, skps, hardware, resultsfile=resultsfile) else: run_benchmarks(configs, skps, hardware)
def filter_line(self, line): JUNK = [ 'NvRmPrivGetChipPlatform: Could not read platform information', 'Expected on kernels without fuse support, using silicon' ] return False if line in JUNK else HardwareAndroid.filter_line( self, line)
def main(): # Delimiter is ',' or ' ', skip if nested inside parens (e.g. gpu(a=b,c=d)). DELIMITER = r'[, ](?!(?:[^(]*\([^)]*\))*[^()]*\))' configs = re.split(DELIMITER, FLAGS.config) skps = _path.find_skps(FLAGS.skps) if FLAGS.adb: adb = Adb(FLAGS.device_serial) model = adb.get_device_model() if model == 'Pixel C': from _hardware_pixel_c import HardwarePixelC hardware = HardwarePixelC(adb) else: from _hardware_android import HardwareAndroid print( "WARNING: %s: don't know how to monitor this hardware; results " "may be unreliable." % model, file=sys.stderr) hardware = HardwareAndroid(adb) else: hardware = Hardware() with hardware: if hardware.kick_in_time: print( "sleeping %i seconds to allow hardware settings to kick in..." % hardware.kick_in_time, file=sys.stderr) time.sleep(hardware.kick_in_time) run_benchmarks(configs, skps, hardware)
def main(): # Delimiter is ',' or ' ', skip if nested inside parens (e.g. gpu(a=b,c=d)). DELIMITER = r'[, ](?!(?:[^(]*\([^)]*\))*[^()]*\))' configs = re.split(DELIMITER, FLAGS.config) skps = _path.find_skps(FLAGS.skps) if FLAGS.adb: adb = Adb(FLAGS.device_serial) model = adb.get_device_model() if model == 'Pixel C': from _hardware_pixel_c import HardwarePixelC hardware = HardwarePixelC(adb) elif model == 'Nexus 6P': from _hardware_nexus_6p import HardwareNexus6P hardware = HardwareNexus6P(adb) else: from _hardware_android import HardwareAndroid print( "WARNING: %s: don't know how to monitor this hardware; results " "may be unreliable." % model, file=sys.stderr) hardware = HardwareAndroid(adb) else: hardware = Hardware() with hardware: SKPBench.run_warmup(hardware.warmup_time) run_benchmarks(configs, skps, hardware)
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ # enable and lock the two fast cores. ''' stop thermal-engine stop perfd for N in 3 2; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the two slow cores ''' for N in 1 0; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''', # pylint: disable=line-too-long # Set GPU bus and idle timer # Set DDR frequency to max # Set GPU to performance mode, 315 MHZ # See https://android.googlesource.com/platform/frameworks/base/+/master/libs/hwui/tests/scripts/prep_marlfish.sh ''' echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on echo 10000 > /sys/class/kgsl/kgsl-3d0/idle_timer echo 13763 > /sys/class/devfreq/soc:qcom,gpubw/min_freq echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq echo 4 > /sys/class/kgsl/kgsl-3d0/max_pwrlevel echo 4 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel''' % tuple(GPU_CLOCK_RATE for _ in range(2))])) return self
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self # enable and lock 3 of 4 big cores. self._adb.shell('''\ for N in 4 5 6; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3))) # turn off all other cores self._adb.shell('''\ for N in 0 1 2 3 7; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''') # gpu/ddr perf commands from # https://developer.qualcomm.com/qfile/28823/lm80-p0436-11_adb_commands.pdf self._adb.shell('''\ echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split echo 1 > /sys/class/kgsl/kgsl-3d0/force_bus_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_rail_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on echo 1000000 > /sys/class/kgsl/kgsl-3d0/idle_timer echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq echo %i > /sys/class/kgsl/kgsl-3d0/gpuclk''' % tuple(GPU_CLOCK_RATE for _ in range(3))) # ddr perf commands from # https://developer.qualcomm.com/qfile/28823/lm80-p0436-11_adb_commands.pdf self._adb.shell('''\ echo performance > /sys/class/devfreq/qcom,cpubw.32/governor echo 9887 > /sys/class/devfreq/qcom,cpubw.32/max_freq echo 9887 > /sys/class/devfreq/qcom,cpubw.32/min_freq echo performance > /sys/class/devfreq/qcom,gpubw.70/governor echo 9887 > /sys/class/devfreq/qcom,gpubw.70/max_freq echo 9887 > /sys/class/devfreq/qcom,gpubw.70/min_freq''') return self
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ # enable and lock the two fast cores. ''' for N in 3 2; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # turn off the two slow cores ''' for N in 1 0; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''', # gpu perf commands from # https://developer.qualcomm.com/qfile/28823/lm80-p0436-11_adb_commands.pdf ''' echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split echo 1 > /sys/class/kgsl/kgsl-3d0/force_bus_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_rail_on echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on echo 1000000 > /sys/class/kgsl/kgsl-3d0/idle_timer echo userspace > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo 2 > /sys/class/kgsl/kgsl-3d0/max_pwrlevel echo 2 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel echo 2 > /sys/class/kgsl/kgsl-3d0/thermal_pwrlevel echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq echo %i > /sys/class/kgsl/kgsl-3d0/max_gpuclk echo %i > /sys/class/kgsl/kgsl-3d0/gpuclk''' % tuple(GPU_CLOCK_RATE for _ in range(4))] + \ self._devfreq_lock_cmds)) return self
def sanity_check(self): HardwareAndroid.sanity_check(self) if not self._adb.is_root(): return result = self._adb.check(' '.join( ['cat', '/sys/class/power_supply/battery/capacity', '/sys/devices/system/cpu/online'] + \ ['/sys/devices/system/cpu/cpu%i/cpufreq/scaling_cur_freq' % i for i in range(4, 7)] + \ # Unfortunately we can't monitor the gpu clock: # # /sys/class/kgsl/kgsl-3d0/devfreq/cur_freq # # It doesn't respect the min_freq/max_freq values when not under load. ['/sys/kernel/debug/clk/bimc_clk/measure', '/sys/class/kgsl/kgsl-3d0/temp', '/sys/class/kgsl/kgsl-3d0/throttling', '/sys/class/thermal/thermal_zone10/temp', '/sys/class/thermal/thermal_zone7/temp'])) expectations = \ [Expectation(int, min_value=30, name='battery', sleeptime=30*60), Expectation(str, exact_value='4-6', name='online cpus')] + \ [Expectation(int, exact_value=CPU_CLOCK_RATE, name='cpu_%i clock rate' %i) for i in range(4, 7)] + \ [Expectation(long, min_value=902390000, max_value=902409999, name='measured ddr clock', sleeptime=10), Expectation(int, max_value=750, name='gpu temperature'), Expectation(int, exact_value=1, name='gpu throttling'), Expectation(int, max_value=75, name='msm_therm temperature'), Expectation(int, max_value=75000, name='pm8998_tz temperature')] Expectation.check_all(expectations, result.splitlines())
def main(): # Delimiter is ',' or ' ', skip if nested inside parens (e.g. gpu(a=b,c=d)). DELIMITER = r'[, ](?!(?:[^(]*\([^)]*\))*[^()]*\))' configs = re.split(DELIMITER, FLAGS.config) srcs = _path.find_skps(FLAGS.srcs) assert srcs if FLAGS.adb: adb = Adb(FLAGS.device_serial, FLAGS.adb_binary, echo=(FLAGS.verbosity >= 5)) from _hardware_android import HardwareAndroid model = adb.check('getprop ro.product.model').strip() if model == 'Pixel C': from _hardware_pixel_c import HardwarePixelC hardware = HardwarePixelC(adb) elif model == 'Pixel' or model == "Pixel XL": from _hardware_pixel import HardwarePixel hardware = HardwarePixel(adb) elif model == 'Pixel 2': from _hardware_pixel2 import HardwarePixel2 hardware = HardwarePixel2(adb) elif model == 'Nexus 6P': from _hardware_nexus_6p import HardwareNexus6P hardware = HardwareNexus6P(adb) else: print( "WARNING: %s: don't know how to monitor this hardware; results " "may be unreliable." % model, file=sys.stderr) hardware = HardwareAndroid(adb) if FLAGS.lock_clocks: hardware.__enter__() print( "Entered benchmarking mode, not running benchmarks. Reboot to restore." ) return if FLAGS.clock_speed: hardware.setDesiredClock(FLAGS.clock_speed) else: hardware = Hardware() if FLAGS.resultsfile: with open(FLAGS.resultsfile, mode='a+') as resultsfile: run_benchmarks(configs, srcs, hardware, resultsfile=resultsfile) else: run_benchmarks(configs, srcs, hardware)
def main(): # Delimiter is ',' or ' ', skip if nested inside parens (e.g. gpu(a=b,c=d)). DELIMITER = r'[, ](?!(?:[^(]*\([^)]*\))*[^()]*\))' configs = re.split(DELIMITER, FLAGS.config) srcs = _path.find_skps(FLAGS.srcs) assert srcs if FLAGS.adb: adb = Adb(FLAGS.device_serial, FLAGS.adb_binary, echo=(FLAGS.verbosity >= 5)) model = adb.check('getprop ro.product.model').strip() if model == 'Pixel C': from _hardware_pixel_c import HardwarePixelC hardware = HardwarePixelC(adb) elif model == 'Pixel': from _hardware_pixel import HardwarePixel hardware = HardwarePixel(adb) elif model == 'Pixel 2': from _hardware_pixel2 import HardwarePixel2 hardware = HardwarePixel2(adb) elif model == 'Nexus 6P': from _hardware_nexus_6p import HardwareNexus6P hardware = HardwareNexus6P(adb) elif FLAGS.force: from _hardware_android import HardwareAndroid print( "WARNING: %s: don't know how to monitor this hardware; results " "may be unreliable." % model, file=sys.stderr) hardware = HardwareAndroid(adb) else: raise Exception("%s: don't know how to monitor this hardware. " "Use --force to bypass this warning." % model) else: hardware = Hardware() if FLAGS.resultsfile: with open(FLAGS.resultsfile, mode='a+') as resultsfile: run_benchmarks(configs, srcs, hardware, resultsfile=resultsfile) else: run_benchmarks(configs, srcs, hardware)
def filter_line(self, line): JUNK = ['NvRmPrivGetChipPlatform: Could not read platform information', 'Expected on kernels without fuse support, using silicon'] return False if line in JUNK else HardwareAndroid.filter_line(self, line)
def __exit__(self, exception_type, exception_value, exception_traceback): HardwareAndroid.__exit__(self, exception_type, exception_value, exception_traceback) self._unlock_clocks()
def __enter__(self): self._lock_clocks() return HardwareAndroid.__enter__(self)
def __init__(self, adb): HardwareAndroid.__init__(self, adb)
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ ''' stop thermal-engine stop perfd''', # turn off the slow cores and one fast core ''' for N in 0 1 2 3 7; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''', # lock 3 fast cores: two for Skia and one for the OS ''' for N in 4 5 6; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # Set GPU bus and idle timer ''' echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split''', # csmartdalton, 4-26-2018: this line hangs my device # echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on ''' echo 10000 > /sys/class/kgsl/kgsl-3d0/idle_timer''', # Set mem frequency to max ''' echo %i > /sys/class/devfreq/soc\:qcom,gpubw/min_freq echo %i > /sys/class/devfreq/soc\:qcom,gpubw/max_freq echo %i > /sys/class/devfreq/soc\:qcom,cpubw/min_freq echo %i > /sys/class/devfreq/soc\:qcom,cpubw/max_freq echo %i > /sys/class/devfreq/soc\:qcom,mincpubw/min_freq echo %i > /sys/class/devfreq/soc\:qcom,mincpubw/max_freq echo %i > /sys/class/devfreq/soc\:qcom,memlat-cpu0/min_freq echo %i > /sys/class/devfreq/soc\:qcom,memlat-cpu0/max_freq''' % tuple(MEM_CLOCK_RATE for _ in range(8)), # Set GPU to performance mode ''' echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq''' % tuple(GPU_CLOCK_RATE for _ in range(2)), # Set GPU power level ''' echo %i > /sys/class/kgsl/kgsl-3d0/max_pwrlevel echo %i > /sys/class/kgsl/kgsl-3d0/min_pwrlevel''' % tuple(GPU_POWER_LEVEL for _ in range(2))])) assert('msm_therm' == self._adb.check(\ 'cat /sys/class/thermal/thermal_zone10/type').strip()) assert('pm8998_tz' == self._adb.check(\ 'cat /sys/class/thermal/thermal_zone7/type').strip()) return self
def __enter__(self): HardwareAndroid.__enter__(self) self._lock_clocks() return self
def __init__(self, adb): HardwareAndroid.__init__(self, adb) self._discover_devfreqs()
def sleep(self, sleeptime): self._unlock_clocks() HardwareAndroid.sleep(self, sleeptime) self._lock_clocks()
def __enter__(self): HardwareAndroid.__enter__(self) if not self._adb.is_root(): return self self._adb.shell('\n'.join([ ''' stop thermal-engine stop perfd''', # turn off the slow cores and one fast core ''' for N in 0 1 2 3 7; do echo 0 > /sys/devices/system/cpu/cpu$N/online done''', # lock 3 fast cores: two for Skia and one for the OS ''' for N in 4 5 6; do echo 1 > /sys/devices/system/cpu/cpu$N/online echo userspace > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_governor echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_max_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_min_freq echo %i > /sys/devices/system/cpu/cpu$N/cpufreq/scaling_setspeed done''' % tuple(CPU_CLOCK_RATE for _ in range(3)), # Set GPU bus and idle timer ''' echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split''', # csmartdalton, 4-26-2018: this line hangs my device # echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on ''' echo 10000 > /sys/class/kgsl/kgsl-3d0/idle_timer''', # Set mem frequency to max ''' echo %i > /sys/class/devfreq/soc\:qcom,gpubw/min_freq echo %i > /sys/class/devfreq/soc\:qcom,gpubw/max_freq echo %i > /sys/class/devfreq/soc\:qcom,cpubw/min_freq echo %i > /sys/class/devfreq/soc\:qcom,cpubw/max_freq echo %i > /sys/class/devfreq/soc\:qcom,mincpubw/min_freq echo %i > /sys/class/devfreq/soc\:qcom,mincpubw/max_freq echo %i > /sys/class/devfreq/soc\:qcom,memlat-cpu0/min_freq echo %i > /sys/class/devfreq/soc\:qcom,memlat-cpu0/max_freq''' % tuple(MEM_CLOCK_RATE for _ in range(8)), # Set GPU to performance mode ''' echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq echo %i > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq''' % tuple(GPU_CLOCK_RATE for _ in range(2)), # Set GPU power level ''' echo %i > /sys/class/kgsl/kgsl-3d0/max_pwrlevel echo %i > /sys/class/kgsl/kgsl-3d0/min_pwrlevel''' % tuple(GPU_POWER_LEVEL for _ in range(2)) ])) assert('msm_therm' == self._adb.check(\ 'cat /sys/class/thermal/thermal_zone10/type').strip()) assert('pm8998_tz' == self._adb.check(\ 'cat /sys/class/thermal/thermal_zone7/type').strip()) return self