Dynamic Voltage and Frequency Scaling (DVFS) describes the use of two power saving techniques (dynamic frequency scaling and dynamic voltage scaling) used to save power in embedded systems including cell phones. This type of power saving is different from what most of us generally think about like standby or hibernate power states. All of these are useful of course. You can reduce the power consumed by your embedded system by lowering the frequency and/or voltage of the CPU and attached peripherals. Why save power? Well the obvious reason your device can run longer on a given battery. I posted earlier on this and included measurements on current draws at different operating frequencies on an i.MX 28 device.
Another benefit of reducing power consumption is less heat is generated by your device; this has benefits to the mechanical design. Done well it can make the difference between needing a passive or active cooling system. If you can avoid a fan (or even reduce the fan speed) you can improve a number of things including cost per device and mean time to failure. The nice thing is hardware vendors have been adding these power saving capabilities to devices so part of the work is already done for us, we do however need to understand our systems requirements. Reducing the voltage and/or frequency does have a drawback, this is a reduction in performance. It’s pretty simple, reduce voltage or frequency and your CPU processes fewer instructions in a given time. Now there’s the CPU but also peripheral devices. So all of these play a part in the complete embedded system.
I’ll consider a made up application that consists of a device that does nothing or some basic functionality, communication, and multimedia processing. For each of these let’s assume we keep the voltage of the system constant but we know the CPU frequency can be changed depending on what is happening in the system:
- Basic Mode – 63 MHz
- Communication Mode – 297 MHz
- Multimedia Mode – 454 MHz
Why did I pick those frequencies? Well, they are actual operating points supported by the i.MX 28. To minimize the power my system uses I want to set the operating frequency to the lowest one possible. You can see below that operating at 63 MHz requires less than half of the current than running at 454 MHz (results from measurements with a internal sample application on an i.MX 28 device)
Sounds simple enough, well this is where the applications running on the device, the drivers, and the OS all come into play. What if I have the following applications:
- App A – Basic Mode Only
- App B – Communication Mode Only
- App C – Multimedia Mode Only
- App D – Basic Mode or Communication Mode
What I need to do is switch between the modes my system needs dynamically. Unless my multimedia subsystem is in use I don’t need to operate at 454 MHz. If I keep count of use of that sub-system at the device driver and OS level I can allow the frequency to be set to a lower point than 454 MHz and save power. I shouldn’t just allow it; I should actively reduce the operating frequency. Enabling this type of power management for embedded software developers has been a significant area of investment for our Nucleus RTOS engineering team.
The concept is simple and this post is very simple in its coverage of the topic. If you are interested in making use of DVFS in your embedded system you can