This commit is contained in:
Oliver Kennedy 2023-08-19 21:24:21 -04:00
parent 0a5ba6e45c
commit 011a26a681
Signed by: okennedy
GPG key ID: 3E5F9B3ABD3FDB60

View file

@ -1,4 +1,14 @@
% -*- root: ../main.tex -*-
%!TEX root=../main.tex
Abstract here.
CPU frequency scaling is a critical component of power management on modern mobile phones, as a CPUs can (if not managed properly) represent a significant source of power consumption on the phone.
On Android, a configurable policy (called the governor) dictates the CPU's frequency, and how it trades off performance for energy savings.
Android's existing governors rely on recent CPU usage patterns to make this trade-off: The longer a CPU is active, the faster the governor sets the CPU's frequency.
In this paper, we demonstrate that this assumption is flawed: the lower range of frequency settings on a typical mobile CPU does not actually save energy.
As speeds drop below a (hardware-specific) frequency that we term $\fenergy$, the energy cost of each CPU cycle grows, and it is usually more energy-efficient to complete the work faster and turn the core off.
We further document a class of \emph{adaptive apps} that adjust their computational requirements to available CPU capacity.
We show how adaptive apps present a misleading signal to existing governors, driving the selection of high, energy-inefficient frequencies without necessarily providing user-perceptible benefits in exchange.
We present a range of governors, adapting the Android-default \schedutil, to incorporate an increasing range of these observations.
Our final governor, \systemname, avoids any sort of inference by leveraging already extant performance hints that are used by Android to request performance boosts from \schedutil.
We show that this governor, in addition to being considerably simpler than \schedutil, can both improve performance and reduce energy consumption on a typical Android phone.