Embedded Linux power management

Reducing power consumption in embedded Linux systems

Penguin sitting on a batteryLinux is now everywhere, including in places where there are no power outlets. An appropriate design and power management implementation is required though, to allow your system to operate on batteries, solar cells, or just to consume as little power as possible to preserve our environment.

Implementing Power Management

Power consumption reduction is not a feature you implement and just turn on. Power usage has to be managed throughout all the components of your system: kernel, low-level software infrastructure, and applications. Here are the various building blocks we can work on or help you to implement:

  • Implementing CPU frequency control, supporting all the voltage and frequency operating modes supported by your hardware, by plugging into the cpufreq kernel infrastructure.
  • Implementing CPU idle state management. When your CPU is idle, it can switch to deeper and deeper sleep modes, consuming less power. This should be implemented through the cpuidle kernel infrastructure.
  • Implementing clock management. Each clock and each device connected connected to it must be registered to the clock framework. This allows to switch off a clock source when it is no longer in use by any device.
  • Implementing system suspend to RAM and resume, by making sure that your board support code and device drivers all support power management notifications properly. Suspend to disk could also be implemented.
  • Simplifying your low-level scripts and software infrastructure, to make sure they don’t run unnecessary tasks.
  • Implementing userspace governors for cpufreq and cpuidle, according to the requirements of your system and applications.
  • Profiling the whole system (kernel drivers and applications), to find and fix unnecessary wakeups and cpu activity.

Our experience

In particular, we have implemented multiple aspects of Power Management in the Linux kernel for the Marvell Armada ARM SoCs and for Atmel ARM AT91 SoCs. You can see all our contributions to the mainline Linux kernel.

If you need help implementing power management on your embedded Linux system or processor, the best is to contact us. We could have a look at your Linux BSP, highlight the pieces that are incomplete or still missing, and make a cost estimate for their development. We could also profile your system (or help you to do it) and pinpoint power management bugs or possible improvements.

If you are interested in power management, you may also read our Linux power management and Embedded Linux optimizations training materials.