Skip to content

CPU frequency never rises above 600 MHz under load, even with arm_freq = 1200

Copying over from GitHub issue #59, opened on 2019.04.19 by genpfault:


Using the SDL2 build as a benchmark I'm seeing the Buster kernel take ~2x as long to compile vs. the current RaspiOS kernel:

Buster:

$ time nice make -j 4
real    7m44.169s
user    27m46.941s
sys     2m17.021s

Raspbian:

$ time nice make -j 4
real    3m14.458s
user    11m50.851s
sys     0m39.507s

SDL build procedure:

sudo apt install cmake git-core libgbm-dev
sudo apt build-dep libsdl2
git clone https://github.com/SDL-mirror/SDL.git
cd SDL
git checkout 54cddf8952802fa94f359d21c6da46979e10ce0
mkdir build
cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release 
time nice make -j 4

Buster system info:

vcgencmd built from https://github.com/raspberrypi/userland

$ uname -a
Linux rpi3 4.19.0-4-arm64 #1 SMP Debian 4.19.28-2 (2019-03-15) aarch64 GNU/Linux

$ cat /boot/firmware/cmdline.txt 
console=tty0 console=ttyS1,115200 root=LABEL=RASPIROOT rw elevator=deadline fsck.repair=yes net.ifnames=0 cma=256M rootwait

$ cat /boot/firmware/config.txt | grep -v '#'
arm_control=0x200
enable_uart=1
kernel=vmlinuz-4.19.0-4-arm64
initramfs initrd.img-4.19.0-4-arm64

$ vcgencmd get_config int | grep -E 'arm_freq|core_freq|gpu_freq|sdram_freq'
arm_freq=1200
core_freq=250
gpu_freq=300
sdram_freq=450

$ vcgencmd get_mem arm && vcgencmd get_mem gpu
arm=948M
gpu=76M

# idle
$ vcgencmd measure_clock arm && vcgencmd measure_temp
frequency(45)=600000000
temp=48.3'C

# about 75% through the 'make'
$ vcgencmd measure_clock arm && vcgencmd measure_temp
frequency(45)=600000000
temp=64.5'C

RaspiOS system info:

# version/source info:
https://www.raspberrypi.org/downloads/raspbian/
https://downloads.raspberrypi.org/raspbian_lite_latest
Version: April 2019
Release date: 2019-04-08
Kernel version: 4.14
SHA-256: 03ec326d45c6eb6cef848cf9a1d6c7315a9410b49a276a6b28e67a40b11fdfcf

$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

$ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=0db4cca0-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

$ cat /boot/config.txt | grep -v '#'
dtparam=audio=on

$ vcgencmd get_config int | grep -E 'arm_freq|core_freq|gpu_freq|sdram_freq'
arm_freq=1200
core_freq=400
gpu_freq=300
sdram_freq=450

$ vcgencmd get_mem arm && vcgencmd get_mem gpu
arm=948M
gpu=76M

# idle
$ vcgencmd measure_clock arm && vcgencmd measure_temp
frequency(45)=600000000
temp=46.2'C

# about 75% through the 'make'
$ vcgencmd measure_clock arm && vcgencmd measure_temp
frequency(45)=1200000000
temp=76.8'C

For Buster the firmware reports the arm_freq = 1200 config but the actual measure_clock arm frequency never goes above 600 MHz, even under load.

Edited by Diederik de Haas