Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Power management

3,485 views

Published on

Linux Power Management

Published in: Technology, Lifestyle
  • Be the first to comment

Power management

  1. 1. Power Management Scott Shu
  2. 2. Power Modes • DFS • Halt • Doze • Sleep • Hibernate
  3. 3. Linux PM Framework • CPUIdle – Idle threads trigger sleep states (C0, C1, …) • CPUFreq – CPU Frequency scaling (CPU DFS) • CPU DVFS • CPU Hotplug • DDR DVFS • Peripheral DVFS • Suspend (save to RAM) • Hibernate (save to Disk)
  4. 4. SW-HW PM Mapping
  5. 5. CPUIdle • For UP system, support 2 idle stetes – C0: CPU WFI – C1: CPU WFI and DDR self-refresh • For SMP system, only support 1 idle state – C0: CPU WFI • CPUIdle governors – The menu governor can jump into a deeper state immediately. (C0 -> C2) – The ladder governor enters the lightest state first, and move on to the next deeper state if a sleep was long enough. (C0 -> C1 -> C2) • Driver – drivers/cpuidle/cpuidle-xxxxxx.c
  6. 6. CPUIdle Example # cat /sys/devices/system/cpu/cpu0/cpuidle/state0/desc Wait for interrupt ; Shows the description of the state # cat /sys/devices/system/cpu/cpu0/cpuidle/state0/disable 0 # cat /sys/devices/system/cpu/cpu0/cpuidle/state0/latency 1 ; Shows the wakeup latency for this state. # cat /sys/devices/system/cpu/cpu0/cpuidle/state0/name WFI ; Shows the name of the state # cat /sys/devices/system/cpu/cpu0/cpuidle/state0/power 4294967295 ; Shows the typical power consumed when CPU enters this state in mW # cat /sys/devices/system/cpu/cpu0/cpuidle/state0/time 79420040 ; Shows the amount of time spent in this idle state in usec. # cat /sys/devices/system/cpu/cpu0/cpuidle/state0/usage 14417 ; Shows the count of number of times this idle state has been entered
  7. 7. CPUFreq • CPU Frequency Scaling • CPUFreq governors – Conservative: Dynamically switch between CPU(s) available if at 75% load – Ondemand: Dynamically switch between CPU(s) available if at 95% load – Performance: Run the CPU at maximum frequency – Powersave: Run the CPU at the minimum frequency – Userspace: Run the CPU at user specified frequencies • Driver – drivers/cpufreq/xxxxxx-cpufreq.c
  8. 8. CPUFreq Example # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 800 # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq 100 # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor Userspace # echo 700 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 700 # mhz 700 MHz, 1.4286 nanosec clock
  9. 9. CPU DVFS • CPUFreq + Voltage Layer • Regulator Framework – Regulates the output power from input power • Voltage Control • Current Limiting • Switch output power ON/OFF VDD1 1100 ~ 1200 mV CPU_1V1 VDD2 1350 ~ 1500 mV DRAM_1V5 VIO 3300 mV D.3.3V_G VDDCTRL 1100 mV SOC_1V1 LDO1 1800 mV Reserved LDO2 2500 mV Reserved LDO3 1100 mV SB_1.1V LDO4 1100 mV Reserved LDO5 3300 mV SB_3.3V LDO6 3300 mV Reserved LDO7 2500 mV CHIP_2.5V LDO8 1000 ~ 3300 mV SD_IF_VDD
  10. 10. Regulator Framework • Regulator APIs struct regulator * regulator_get (struct device *dev, const char *id); regulator_put(regulator); int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV); int regulator_get_voltage(struct regulator *regulator); int regulator_enable(regulator); int regulator_disable(regulator); int regulator_force_disable(regulator); int regulator_is_enabled(regulator); Reference: https://www.kernel.org/doc/htmldocs/regulator.html
  11. 11. CPU DVFS Example # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 800 # cat /sys/class/regulator/regulator.3/microvolts 1200000 ; Change CPU speed to 700 MHz # echo 700 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 700 # cat /sys/class/regulator/regulator.3/microvolts 1187500
  12. 12. CPU Hotplug • CPU hotplug is one approach for bring up / shutdown the secondary CPU Cores • The code can be used by kernel “suspend” and “hibernate”. • From a power consumption point of view, the CPU hotplug feature might not be very useful for a SMP system.
  13. 13. CPU Hotplug Example # cat /sys/devices/system/cpu/online 0-2 # cat /sys/devices/system/cpu/offline # echo 0 > /sys/devices/system/cpu/cpu2/online [ 7732.890000] CPU2: shutdown # cat /sys/devices/system/cpu/online 0-1 # cat /sys/devices/system/cpu/offline 2 # echo 1 > /sys/devices/system/cpu/cpu2/online [ 7759.660000] CPU2: Booted secondary processor # cat /sys/devices/system/cpu/online 0-2
  14. 14. DDR DVFS
  15. 15. DevFreq • DVFS framework for non-CPU device • Clock Tree
  16. 16. Clock Tree • Clock APIs • Device • Driver – arch/arm/mach-xxxxxx/clock.c
  17. 17. Suspend
  18. 18. Hibernate
  19. 19. Example • Lightweight Suspend (DOZE Mode) # echo suspend > /sys/power/state • Suspend (SLEEP Mode) # echo mem > /sys/power/state • Hibernate (HIBERNATE Mode) # echo disk > /sys/power/state

×