NanoPi R5C CPU Governor

Hello dear forum members,

I was wondering if my SBC should always be at its max freq if only below processes are running?


Current frequency is always at max even when cpu governor is set to ondemand or schedutil.

My SBC is using a Rockchip RK3568B2 processor with 4GB of RAM which I believe is overkill for mostly running Pi-hole.

where do you know it i running at max frequency?

With our image at least the R5S does dynamic CPU scheduling. Would be quite a problem if it wouldn’t on R5C.

Check it via:



As you can see based on the screenshots, conservative runs well below max frequency but both schedutil and ondemand stay at almost max level.

My concern is, given the lightweight programs I am running, should they always stay at almost max levels with ondemand or schedutil governor? Or is conservative not enough for the programs I am running?

Thank you so much for the swift feedback. :slight_smile:

My guess is, that the cpu script itself will raise the CPU frequency earlier when it’s used with the ondemand and schedutil governor. As it says in the perfomance options, the conservative governor will scale much slower, the clock speed will stay longer at the minimum until it’s clocking up.
You would need to log the cpu clocks over time, to be sure it’s always that high.
I know that RPi-monitor can do this, but of course this monitoring will also use some CPU time, so you will never have a fully objective result, I guess, but it’s worth a try.
You could also create a script which is logging the output of the command sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq permanently to a file (On your device this command may vary), but this method will also need some CPU time and can result in a raise of the CPU clock speed.

I recall there was a command that could display how long which CPU frequency was used. But I was not able to find it again. @MichaIng do you recall such a command?

1 Like

Check the real time in pstates via:

cat /sys/devices/system/cpu/cpufreq/policy0/stats/time_in_state

Indeed the cpu command itself may be responsible for the load.

  • ondemand is meant to immediately max CPU frequencies when a certain load has been reached, 50% by default on DietPi. 50% can be reached quite quickly on 408 MHz. This inefficient behaviour is the reason why schedutil is the default on DietPi, the modern succesor.
  • schedutil uses information from the CPU scheduler itself, that way skipping a dedicated governor layer, to dynamically adjust CPU frequency, using all available pstates instead of just min and max. So you see those various different frequencies each core.
1 Like

Hello sir,

Thank you for the clarification. Correct me if I’m wrong, but it does seem lower frequencies are active more than the higher ones.

Below is a screenshot with schedutil as governor ~20mins after reboot.

Though I do hope the cpu command will display results better.

Thanks again for the clarification!

As you can see, it is on lowest frequency about 98% of the time. It is on higher frequencies for a very short time when you run interactive shell commands, like cpu itself.