Hi,
I'm testing GPU thermal management on SABRE automotive board. To test it I lowered the trip point 0 as below:
echo 25000 > /sys/devices/virtual/thermal/thermal_zone0/trip_point_0_temp
As a result I saw the log:
System is too hot. GPU3D will work at 3/64 clock.
...but the GPU still seems to work at full speed, graphic benchmarks still works at the same speed.
Am I doing something wrong? I tested it in Android 5.1.1_2.0.0 and 5.1.1_2.1.0 releases.
Best regards,
Andy
Solved! Go to Solution.
In my test, the thermal function is also called, And I got the same message, and the opegles application I run did reduced the performance dramatically.
yes , you did right. GPU should reduced the speed dramatically.
Can you try more applications to make sure the application runs using gpu, not software rendering.
Yes, my test uses GPU - but it looks it is too simple to see reduction of GPU speed (test still was animated with 60 fps).
I prepared a more heavy test (a complex 3d scene) and everything works as expected - after reach thermal trip point I observe reduction of GPU speed and also temperatures.
Many thanks for help!
Best regards,
Andy
Did you enable DVFS in the Kernel?
Yes, DVFS is enabled.
In my test, the thermal function is also called, And I got the same message, and the opegles application I run did reduced the performance dramatically.
yes , you did right. GPU should reduced the speed dramatically.
Can you try more applications to make sure the application runs using gpu, not software rendering.
Modify the trip point's temperature through /sys/class/thermal/thermal_zone0/
trip_point_x_temp. Here, 'x' can be 0, 1 and 2, indicating critical, hot and active trip
point, and the value of trip points should be critical > hot > active. Then run some
program to make SoC in heavy loading. When the SoC temperature reaches the trip
points, the thermal driver will take action to do some protections according to each trip
point's mechanism. Restore the trip point's temperature. When SoC temperature drops to
below active trip point, thermal driver will remove all the protections.
So you are activating CRITICAL and this means RESET The CPU To protect it. Since you have not reach yet the temperature the device it is not resetting.
There is still an issue.
Please notice that after modify the trip point I saw the kernel log: "System is too hot. GPU3D will work at 3/64 clock."
This log comes from gc_hal_kernel_platform_imx6q14.c and is logged AFTER scale down the GPU:
if (event && !bAlreadyTooHot) {
gckHARDWARE_GetFscaleValue(hardware,&orgFscale,&minFscale, &maxFscale);
gckHARDWARE_SetFscaleValue(hardware, minFscale);
bAlreadyTooHot = gcvTRUE;
gckOS_Print("System is too hot. GPU3D will work at %d/64 clock.\n", minFscale);
So I did the test correctly and thermal protection was called as expected.
But the function gckHARDWARE_SetFscaleValue() seems to have no effect and the GPU still works at full speed.