Thanks for this! This is one of the most useful tips I’ve cme across in quite some time. I had to try this out for my S905x immediately and got the same great results. In my case I had to change the governor for the CPU0 core with this command:
echo interactive | tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor >/dev/null
YOU DON’T HAVE TO REPEAT IT FOR THE OTHER CORES since their cpufreq folder symlink to this core. After that CPU temp went down considerably. On the S905X there are 4 governors available. Interactive is the best governor for anything except maybe games.
The default, ondemand, essentially only oscillates between lowest and highest frequency state.
Hotplug works similar to Ondemand but is able to shut off unused cpu cores completely. Performance always keeps the highest state. Interactive uses all the power states.
Therefore, these governors yield running temperatures from lowest to highest: Interactive, Ondemand, Performance. Not sure where to put Hotplug, needs some experimenting.
You can put the above command to change the governor in your autostart.sh file.
if you set /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
It seems to work for all cores. I am going to add it to my autostart.sh and see how it works.
I have S905W and I have to set interactive to all 4 cores just like @HeresJohnny did. But the problem is that every time I restart my android box, the scaling governor goes back to ondemand how do I set it to interactive permanently ?
create a file called autostart.sh put the commands in it use something like nano or notepad++ (make sure its UTF8 and Linux LF). put the fle in the ConfigFiles directory.
After some more testing I have concluded for myself that actually the “Hotplug” governor is the best (on my S905x box). It acts much like the interactive governor by going through all the speed steps but with the added benefit that it can shut off cores seperately. Also, while using the interactive governor I noticed some micro-stutter. Subtle, but still there.
So again, just put this line in your autostart file:
echo hotplug | tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor >/dev/null
You only need to run this command on the first core, the other cores are linked to it.
If my S912 box is typical it has 2 sets of 4 cores the first set of 4 cores uses /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
and is set to ondemand Minimum frequency 1Ghz (1000000) Maximum 1.5Ghz (1512000)
Available Frequencies 100000 250000 500000 667000 1000000 1200000 1512000
The second set of 4 are controlled by /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
and is set to ondemand Minimum frequency 1Ghz (1000000) Maximum 1Ghz (100000). So the scaling governor has no effect.
Available Frequencies 100000 250000 500000 667000 1000000
I tried the following but it only makes a couple of degrees C difference as the S912 has already got the ondemand governor enabled. The box does idle at 600Mhz even playing UHD content.
On the S905x2 the default is ‘performance’ so the cpus run flat out all the time so there is a dramatic drop in power/temperature by changing the governor to interactive/schedutil.
and I am very satisfied to go from 1000Mhz to 667Mhz minimum CPU speed. In idle conditions I have seen temperatures of 57ºC (66ºC playing HDTV) for the first time, which has its logic:
I don’t think P(ower)=F() requency^2 is an accurate measure for this type of CPU at these frequencies. Any reduction in power is a good thing looking at the S905X2 stats most of the core are sat around 80% of the time Waiting For Interrupts.
Ondemand doesn’t do much of the job with default parameters. Almost all the time the frequency is at maximum, 1908, as in performance mode, even in idle.
Do you know how to make the value 100 to remain in the up_threshold file (
/ sys / devices / system / cpu / cpufreq / policy0 / ondemand / up_threshold) after restart?
I can change, it works, but after restart it returns to the initial value 50.
Thanks.