Raspberry is a good candidate for embedded low power linux systems. It provide ways to modulate frequency of different core of system. What is the impact of this frequency on the Raspberry consumption ? This article is a start of answer.

Underclock and Overclock

I choose to make tests on the  'A' version without the USB hub/ethernet device to characterize main chip. The main purpose of this test it to know how  overclock and underclock different RP clocks affect consumption. 

What

Tests are done on a Raspberry 'A' with a SDram Samsung 256Mb. Current is measured on 5V supply. There is no device connected on Rpy but console on serial link : No USB, no video (HDMI or composite), no sound, i2c or spi. Overvoltage is not enable (default voltage).

The Rpy is under Linux with the standard distribution up to date and kernel 3.6.11+

Tests are made clock source by clock source with the default frequency for all other clocks but one tested:

  • GPU=250
  • ARM=700
  • SDRAM=400
  • CORE=250

I probe current for different frequencies of the tested clock source with system idle and with a small charge program to make load :

while : ;do date;done|gzip -9 > /dev/null

I obtains three graphics. The first one give Rpy current consumption for each clock source frequency change:

Conso Raspberry A fct(F)

A second graph show for each frequency the delta in consumption between the idle and load state. A flat curve explicit a clock that is not impacted by load of processor (GPU part is never solicited).

Conso Raspberry A Idle versus Load

The last graph is a "relative" view of what impact we can attend on consumption for variation of each clocks relative to nominal clock (GPU load is identical to GPU idle and then is not present).

Conso Raspberry A Gain fct(F)

In load

As we can expect ARM frequency have a large impact on consumption. We have 40mA delta between under and over clock.

Core frequency have also a big impact on power consumption  probably because core clock is used by L2 cache. We have 50mA delta between under and over clock.

GPU clock have not lot of impact but it is not solicited. GPU consumption seems to have step that is probably in relation with the limited effective frequency step availables.

RAM clock have also a moderate impact.What is interesting is the cliff between 250MHz and 300 MHz. May be a need for the SDRam to have a sufficient refresh rate... or something else...

In idle

Here ARM frequency have near no impact on power consumption that means that ARM is really near sleeping in idle. Underclock is not a good clock to gain consumption on a "sleeping" system and in charge in will consume what it need.

Core frequency keep an influence on consumption but not so important that in load.

GPU clock is not touched by CPU load. For a no display system GPU clock is a good candidate for lowering a 10mA consumption for no charge. 

Ram clock have same impact as in load when frequency is upper than nominal one but no influence when under. A no candidate.

Conclusion

For a autonomous system that is generally doing nothing underclock is not a good candidate to lower idle consumption. Gain will be very small for a big impact on efficiency. The only possible small gain is on display less system with GPU clock.

The only usage on underclock seems to be to limit load consumption by limiting GPU and Core frequency.

For overclocking only Core frequency have a large impact on consumption.

For all this tests I fix not tested clock source to nominal frequency. But all this modules works together then with a uppers core and ram frequencies the ARM consumption will be probably more important at high frequency as CPU will be more feed in data.

I think also there some hidden functionalities of bcm to lower idle consumption : a phone won't accept to have 100mA in idle state !