Jetson/Thermal

From eLinux.org
< Jetson
Revision as of 20:51, 8 August 2014 by Shervin.emami (talk | contribs) (Moved the section about fan removal from the Power page to this Thermal page)
Jump to: navigation, search

Introduction

In a powerful ARM-based processor like Tegra-K1, the performance, power draw and temperature are closely linked to each other. For example, the chip will reduce the available performance if the temperature is too high, since this will reduce the power draw and eventually lower the temperature of the Tegra chip. Therefore you might want to read the Performance and Power pages in addition to this page.

There are various temperature sensors on the Jetson TK1 board and inside the Tegra K1 chip. Each temperature sensor is in a different "thermal zone", or location where that temperature is measured.

Thermal Zones

To see the names of the thermal zones, run this:

cat /sys/devices/virtual/thermal/thermal_zone*/type
  • "Tboard_tegra" measures the temperature of the Jetson TK1 board (though I'm not sure of the exact location).
  • "Tdiode_tegra" measures the temperature at the edge of the Jetson TK1 board.
  • The zones with "-therm" in their name are for sensors inside the Tegra SOC.

Reading the current temperatures

To see the current temperatures of the thermal zones mentioned above, simply run this:

cat /sys/devices/virtual/thermal/thermal_zone*/temp

To repeatedly display the temperature in a GUI App

Instead of just displaying it once, you can easily build a GUI app to display the current temperature. First install perl/tk:

sudo apt-get install perl-tk

Then save the following script as the file "showTemp.pl" in your home folder:

#!/usr/bin/perl -w
# By "peba@inode.at"

use Tk;
$main=MainWindow->new;
$main->resizable (0,0);
$temp="--";

$myframe=$main->Frame ();
$myframe->Label (-text => 'Temperature:')->pack ();
$temp_label=$myframe->Label (-text => "$temp")->pack ();
$myframe->pack();

$main->repeat(1000,\&update_temp_label);
MainLoop;

sub update_temp_label {
    $temp=`cat /sys/devices/virtual/thermal/thermal_zone0/temp`;
    $temp_label->configure('-text' => $temp);
}

Now make the Perl script executable:

chmod +x ~/showTemp.pl

To execute it:

~/showTemp.pl

(Finally, hit Ctrl-C to close it)


Replacing the fan with a heatsink

Warning: removal of the fan+heatsink will void the warranty.

The Jetson TK1 board comes with a large fan+heatsink combo attached to the SOC, to ensure the board is always safe to touch by humans even when running both the CPU & GPU at max performance for long durations. The fan is rated at 12V 1.4W, but the Jetson TK1 is only running it at 5V and thus it's only using 0.4W of power. It is usually fine to remove the fan and replace it with a metal heat-spreader plate or heat-sink, such as to reduce power or increase dust-resistance or lifetime or simply to get rid of the fan noise. The fan+heatsink is clearly much larger than it needs to be, so it can be replaced by a small fan or large heatsink without a reduction in performance or safety.

The Tegra K1 SOC is designed for tablets that use a small heatsink or heat-spreader plate, thus clearly it doesn't require a large fan. But tablets aren't expected to run at full performance for long periods, and you also can't touch the SOC of a tablet with your bare fingers, so NVIDIA decided to use a large surplus fan for Jetson TK1. If you wish to replace the fan with a heatsink, take into account that if you will be pushing the SOC to its limits for long durations, the SOC might be using upto 10W - 15W of power that you must dissipate with a large heatsink and/or external fan and/or attaching a heatspreader to the metal case of your overall device, otherwise the internal Tegra thermal management may reduce the performance to ensure it won't overheat.

NVIDIA has tested a simple 2" x 2" heat-spreader (a thin flat sheet of Aluminium) and found it to be fine for most use-cases. They ran an intense Optical Flow computation on the GPU using ~7 Watts of power in the Tegra K1 SOC and found that the heat-spreader got warm but not too hot to touch. Thus for most light & medium workloads, a heat-spreader is good enough. If you are expecting to run heavy workloads (eg: 4 threads of efficient NEON SIMD CPU code, or efficient CUDA code using the entire GPU) for hours of continuous use, then a heatsink as mentioned above (or obviously the fan-heatsink that comes with Jetson TK1) is recommended, to ensure there is enough cooling of the Tegra SOC.

Known working passive heatsinks

The Connectland 1504002 Heatsink attached to a Jetson TK1.

It hasn't been tested by NVIDIA, but rough estimations suggest that a 1.5" x 1.5" x 0.8" Aluminium heatsink (such as an Aluminium Malico MBH33002 or Copper Malico CMBA054949 north-bridge heatsink) would allow pushing Tegra K1 to its limits for long durations while not getting hot enough for the SOC to reduce the performance or burn human skin.

An alternative for European users (as finding suitably sized heatsinks in Europe is very tough) is the Connectland 1504002 Heatsink which is a dual heatpipe copper finned design from a French company. It can be found on Amazon UK for around £10, as well as on eBay and some other EU mail order retailers. This model comes with tongue and groove links which let you attach the heatsink to the existing holes on the Jetson TK1, see the image on the right for an example.

Temperatures of the CPU as reported by /sys/devices/virtual/thermal/thermal_zone0/temp with the Connectland 1504002 Heatsink were as follows:

Ambient temperature Idle with stock fan Idle with heatsink After an hour of burnCortexA9 with heatsink
25.8C 33.5C 37.5C 48.5C