Drowsy Power Management - University Of Marylandmlentz/papers/drowsy_sosp2015_slides.pdfResume (Thaw...
Transcript of Drowsy Power Management - University Of Marylandmlentz/papers/drowsy_sosp2015_slides.pdfResume (Thaw...
Drowsy Power Management
Matthew Lentz James Litton Bobby BhattacharjeeUniversity of Maryland
Background Energy Consumption
Fetch Remote Data Communicate with Nearby Device(s) Receive Push Notification Sample Sensor(s) . . .
Mobile devices consume energy without human-interaction
Many (periodic) short-lived events executed:
Power Trace with Events
Power Trace with Events
EventEvent
Event = Pull data from remote server over WiFi
Power Management States
Suspend
Off
On
System in low-power state Memory retains contents
Event
Power Management StatesOnOn
Suspend
Off
On
System in low-power state Memory retains contents
Event
Suspend
Power Management StatesOnOn
Suspend
Off
On
System in low-power state Memory retains contents
Event
Suspend
Power Management States
WiFi Controller Power-Save Mode
… …
OnOn
Suspend
Off
On
System in low-power state Memory retains contents
Event
Suspend
Power Trace with EventsOnOn
EventEvent
Suspend
Power Trace with EventsOnOn
EventEvent
What Happens During a Wakeup?
What Happens During a Wakeup?
Interrupt (from RTC Alarm)
Suspend→On
What Happens During a Wakeup?
Interrupt (from RTC Alarm)
What Happens During a Wakeup?
Suspend→On Event
Interrupt (from RTC Alarm)
What Happens During a Wakeup?
Suspend→On Event
Objects held by applications and drivers When all locks released, can enter Suspend
Wakelocks
Interrupt (from RTC Alarm)
What Happens During a Wakeup?
Suspend→On Event
Interrupt (from RTC Alarm)
What Happens During a Wakeup?
Suspend→On Event On→Suspend
Interrupt (from RTC Alarm)
What Happens During a Wakeup?Acquire wakelockFetch update over WiFiSet future wakeup alarmRelease wakelock
Suspend→On Event On→Suspend
Interrupt (from RTC Alarm)
Transitions are InefficientTransitions account for 75% of total energy consumption!
Suspend→On Event On→Suspend
Transitions are InefficientTransitions account for 75% of total energy consumption!
Transitions for Other Events
RTC Alarm (ALM)Bluetooth Connection (BT2)
Push Notification (PSH)Sample Accelerometer (SEN)
85%32%
23%89%
Suspend→On Event On→Suspend
Transitions are InefficientTransitions account for 75% of total energy consumption!
Suspend→On Event On→Suspend
On → Suspend
On → Suspend
Flush filesystem buffers Freeze all tasks Suspend all devices Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
* Wait for interrupt
5
*
1 2 345
On → Suspend
Flush filesystem buffers Freeze all tasks Suspend all devices Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
* Wait for interrupt
5
*
1 2 3452 3
2
3
Suspend → On
Suspend → On
Enable CPUs Resume all devices Thaw all tasks
1
2
3
2 31
Suspend → On
Enable CPUs Resume all devices Thaw all tasks
1
2
3
2 31
2
3
2 3
Drowsy Power Management
Wake up only what is necessary
Drowsy Power Management
Wake up only what is necessary
{ }Necessary for Pull Data:
Drowsy Power Management
Wake up only what is necessary
{ }Necessary for Pull Data: Alarm Device WiFi Device
System ServicesApplicationa
Drowsy Power Management
Wake up only what is necessary
{ }Necessary for Pull Data: Alarm Device WiFi Device
System ServicesApplicationa
{ }Unnecessary:USB Device
SD Card Device
Calendar App
Bluetooth Device
Power Regulator Devices
Power Regulators
Input Devices
Battery Monitoring Device
…
Drowsy Power Management
Construct minimal “wake set” of tasks and devices
Drowsy Power Management
Construct minimal “wake set” of tasks and devices
Smallest set that maintains correct behavior
Drowsy Power Management
Construct minimal “wake set” of tasks and devices
Expand on-demand as event progresses
Smallest set that maintains correct behavior
Drowsy Power Management
Constraint: No modifications to user-space
Construct minimal “wake set” of tasks and devices
Expand on-demand as event progresses
Smallest set that maintains correct behavior
Transitions To/From Drowsy
Suspend
Drowsy
Resume all devices Enable CPUs
3
2
1
Flush filesystem buffers
Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
5
Freeze all tasks Suspend all devices
Thaw all tasks
Transitions To/From Drowsy
Suspend
Drowsy
Resume all devices Enable CPUs
3
2
1
Flush filesystem buffers
Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
5
3
2
Freeze all tasks Suspend all devices
Thaw previously running tasks
Transitions To/From Drowsy
Suspend
Drowsy
Resume all devices Enable CPUs
3
2
1
Flush filesystem buffers
Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
5
3
2
Freeze all tasks Suspend all devices
Thaw previously running tasks
On CPU or Run Queue
Transitions To/From Drowsy
Suspend
Drowsy
Resume all devices Enable CPUs
3
2
1
Flush filesystem buffers
Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
5
3
2
Freeze all tasks Suspend all devices
Wake Set = { <Prev. Running Tasks> }
Thaw previously running tasks
Transitions To/From Drowsy
Suspend
Drowsy
Resume all devices Enable CPUs
3
2
1
Flush filesystem buffers
Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
5
3
2
Freeze all tasks Suspend all devices
Thaw previously running tasks
Wake Set = { <Prev. Running Tasks> }
Transitions To/From Drowsy
Suspend
Drowsy
Resume all devices Enable CPUs
3
2
1
Flush filesystem buffers
Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
5
3
2
Freeze all tasks Suspend all devices
Thaw previously running tasks
Wake Set = { <Prev. Running Tasks> }
Wake Set = { <Prev. Running Tasks>, Task }
Wake Set = { <Prev. Running Tasks>, Task, Device, … }
Transitions To/From Drowsy
Suspend
Drowsy
Resume all devices Enable CPUs
3
2
1
Flush filesystem buffers
Disable non-boot CPUs Set RAM to self-refresh
1
2
3
4
5
3
2
2
3
Freeze tasks in wake set Suspend devices in wake set
Thaw previously running tasks
Wake Set = { <Prev. Running Tasks> }
Wake Set = { <Prev. Running Tasks>, Task }
Wake Set = { <Prev. Running Tasks>, Task, Device, … }
Constructing the Wake Set
Task A
Tim
e
ioctl() command to device
open() named pipe
read() from pipe
Run (I/O)Run (CPU) Run (Device I/O)Task States:
Constructing the Wake SetBlocked
Blocks waiting on condition to be met
Run (I/O)Run (CPU) Run (Device I/O)Task States:
Task A
Tim
e
open() named pipe
read() from pipe
ioctl() command to deviceioctl()
Constructing the Wake Set
Task B Task A
Satisfies
condition
BlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Tim
e
write() to pipe
Blocks waiting on condition to be met
open() named pipe
read() from pipe
ioctl() command to deviceioctl()
Constructing the Wake Set
Task B Task A
Satisfies
condition
BlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Tim
e
write() to pipe
Blocks waiting on condition to be met
open() named pipe
read() from pipe
Constructing the Wake SetFrozenBlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Tim
e
Task B Task A
Suspended
Constructing the Wake SetFrozenBlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Tim
e
Task B Task A
Suspended
Transition to Suspend (All wakelocks released)
Constructing the Wake SetFrozenBlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Tim
e
Task B Task A
Suspended
Transition to Suspend (All wakelocks released)
Transition to Drowsy
Constructing the Wake Set
Wake Set =
{ Task B, Task A }
{ Task B, Task A, Device }
Task B Task A
Tim
e
FrozenBlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Suspended
Constructing the Wake Set
Wake Set =
{ Task B, Task A }
{ Task B, Task A, Device }
Task B Task A
Tim
e
{ Task B }
FrozenBlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Suspended
Constructing the Wake Set
Wake Set =
{ Task B, Task A }
{ Task B, Task A, Device }
Task B Task A
Tim
e
{ Task B }
FrozenBlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Suspended
Constructing the Wake Set
Wake Set =
{ Task B, Task A }
{ Task B, Task A, Device }
Task B Task A
Tim
e
{ Task B }
FrozenBlockedRun (I/O)Run (CPU) Run (Device I/O)Task States:
Suspended
Drowsy Wake Set: Pull Data
IRQ 48
msm-ssbi.0
IRQ 362 IRQ 479
platform rtc-pm8xxx
/dev/alarm AlarmManager ActivityManager
Benchmark
binder
log_main wlan0
PowerManager
pm8921-coremsmgpio rtc0
alarm
wcnss_wlan.0
mpdecision Worker
Compiler
cpu1
cpu2
cpu3
Binder_1 Binder_1 Binder_2
Binder_3
Binder_4
ServerThread
flush-179:0
flush-0:17
Time (ms)
cpu
0 ms 4 ms 6 ms 26 ms 41 ms 91 ms 98 ms13 ms
DeviceTask Wakeup Chained IRQIRQ
Resume(Thaw Running Tasks)
Suspend(Sync Filesystem Buffers)
IRQ 48
msm-ssbi.0
IRQ 362 IRQ 479
platform rtc-pm8xxx
/dev/alarm AlarmManager ActivityManager
Benchmark
binder
log_main wlan0
PowerManager
pm8921-coremsmgpio rtc0
alarm
wcnss_wlan.0
mpdecision Worker
Compiler
cpu1
cpu2
cpu3
Binder_1 Binder_1 Binder_2
Binder_3
Binder_4
ServerThread
flush-179:0
flush-0:17
Time (ms)
cpu
0 ms 4 ms 6 ms 26 ms 41 ms 91 ms 98 ms13 ms
DeviceTask Wakeup Chained IRQIRQ
Resume(Thaw Running Tasks)
Suspend(Sync Filesystem Buffers)
Drowsy Wake Set: Pull Data
IRQ 48
msm-ssbi.0
IRQ 362 IRQ 479
platform rtc-pm8xxx
/dev/alarm AlarmManager ActivityManager
Benchmark
binder
log_main wlan0
PowerManager
pm8921-coremsmgpio rtc0
alarm
wcnss_wlan.0
mpdecision Worker
Compiler
cpu1
cpu2
cpu3
Binder_1 Binder_1 Binder_2
Binder_3
Binder_4
ServerThread
flush-179:0
flush-0:17
Time (ms)
cpu
0 ms 4 ms 6 ms 26 ms 41 ms 91 ms 98 ms13 ms
DeviceTask Wakeup Chained IRQIRQ
Resume(Thaw Running Tasks)
Suspend(Sync Filesystem Buffers)
IRQ 48
msm-ssbi.0
IRQ 362 IRQ 479
platform rtc-pm8xxx
/dev/alarm AlarmManager ActivityManager
Benchmark
binder
log_main wlan0
PowerManager
pm8921-coremsmgpio rtc0
alarm
wcnss_wlan.0
mpdecision Worker
Compiler
cpu1
cpu2
cpu3
Binder_1 Binder_1 Binder_2
Binder_3
Binder_4
ServerThread
flush-179:0
flush-0:17
Time (ms)
cpu
0 ms 4 ms 6 ms 26 ms 41 ms 91 ms 98 ms13 ms
DeviceTask Wakeup Chained IRQIRQ
Resume(Thaw Running Tasks)
Suspend(Sync Filesystem Buffers)
Drowsy Wake Set: Pull Data
IRQ 48
msm-ssbi.0
IRQ 362 IRQ 479
platform rtc-pm8xxx
/dev/alarm AlarmManager ActivityManager
Benchmark
binder
log_main wlan0
PowerManager
pm8921-coremsmgpio rtc0
alarm
wcnss_wlan.0
mpdecision Worker
Compiler
cpu1
cpu2
cpu3
Binder_1 Binder_1 Binder_2
Binder_3
Binder_4
ServerThread
flush-179:0
flush-0:17
Time (ms)
cpu
0 ms 4 ms 6 ms 26 ms 41 ms 91 ms 98 ms13 ms
DeviceTask Wakeup Chained IRQIRQ
Resume(Thaw Running Tasks)
Suspend(Sync Filesystem Buffers)
IRQ 48
msm-ssbi.0
IRQ 362 IRQ 479
platform rtc-pm8xxx
/dev/alarm AlarmManager ActivityManager
Benchmark
binder
log_main wlan0
PowerManager
pm8921-coremsmgpio rtc0
alarm
wcnss_wlan.0
mpdecision Worker
Compiler
cpu1
cpu2
cpu3
Binder_1 Binder_1 Binder_2
Binder_3
Binder_4
ServerThread
flush-179:0
flush-0:17
Time (ms)
cpu
0 ms 4 ms 6 ms 26 ms 41 ms 91 ms 98 ms13 ms
DeviceTask Wakeup Chained IRQIRQ
Resume(Thaw Running Tasks)
Suspend(Sync Filesystem Buffers)
15 tasks thawed & 16 devices resumed
1.8% 1.9%
Implementation
Implemented Drowsy within Android kernel
Platform: Google Nexus 4 (“Mako”)
SLOC: ~4,600
Version: 4.2.2 (Fork of Linux 3.4)
Instrumenting Android
For determining when to add tasks/devices to wake set
Instrumenting Android
For determining when to add tasks/devices to wake set
Example: file_operations
.open = &drv_open
.read = &drv_read
.write = &drv_write
struct file_operations d_fops:
Example: file_operations
.open = &drv_open
.read = &drv_read
.write
.write_impl = &drv_write= &drowsy_write
struct file_operations d_fops:
Example: file_operations
.open = &drv_open
.read = &drv_read
.write
.write_impl = &drv_write= &drowsy_write
struct file_operations d_fops:
int drowsy_write(File *f, …) Device *d = fileToDevice(f) if(d!state == Suspended)
resumeDevice(d)
f!f_ops.write_impl(f, …)
Evaluation: Benchmarking
Handle I/O Event
Acquire Wakelock
Suspend
Release Wakelock
Suspend
Set a future wakeup alarm Accept incoming Bluetooth connection Fetch weather update (and set alarm) Receive incoming push notification Sample the accelerometer (and set alarm)
ALM BT2 PUL PSH SEN
→On →Drowsy
On→ Drowsy→
Evaluation: Measurement
V Pho
neI Ph
one
IPhone = VShunt / RShunt Time
Evaluation: Measurement
V Pho
neI Ph
one
IPhone = VShunt / RShunt Time
Evaluation: Measurement
V Pho
neI Ph
one
V Pho
toIPhone = VShunt / RShunt Time
Evaluation: MeasurementLED Toggled On
(Software Timestamp)
V Pho
neI Ph
one
V Pho
toIPhone = VShunt / RShunt Time
Improvement: Wakeup Events (1 Core, Powersave)
Plus (1 Core, Powersave) Plus
Improvement: Wakeup Events
Drowsy is 1.5-5x as energy efficient
(1 Core, Powersave) Plus (1 Core, Powersave) Plus
Improvement: Wakeup Events
cpuidle entered deep idle states more often
in the Drowsy state
Drowsy is 1.5-5x as energy efficient
(1 Core, Powersave) Plus (1 Core, Powersave) Plus
Improvement: Wakeup Events (1 Core, Powersave)
Plus (1 Core, Powersave) Plus
Wakeup Cycle: Pull DataAndroid Event
Suspend→OnOn→Suspend
Drowsy Event & Wake Set
Suspend
Drowsy
→
Drowsy
Suspend
→
Wakeup Cycle: Pull DataAndroid Event
Suspend→OnOn→Suspend
Drowsy Event & Wake Set
Suspend
Drowsy
→
Drowsy
Suspend
→
Wakeup Cycle: Pull DataAndroid
WiFi Tail Energy
Event
Suspend→OnOn→Suspend
Improvement: Battery Life
Improvement: Battery Life
Converges to 0% as the interval increases
Improvement: Battery Life
Converges to 0% as the interval increases
Benefits of Drowsy aggregate across all
applications on device
Summary
Source code is available at:
www.cs.umd.edu/projects/drowsy/
Drowsy wakes up the minimal set of tasks and devicesis 1.5 - 5x as energy efficient for short-lived events
Existing power management not optimized for short-lived events