Jetson/Thermal

From eLinux.org
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, and runs at 12V. 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 or heat pipe, 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.

The Tegra K1 SOC is 22mm x 22mm but the metal plate on top of the chip is just 11mm x 11mm. The largest flat heatsink you could attach to Jetson TK1 without bumping into the SATA connector or Crystal is 42mm x 42mm (1.65" x 1.65") if square or a diameter of 60mm (2.3") if you use a cylindrical heatsink.

Known working passive heatspreaders

A thin Aluminium heat-spreader attached to a Jetson TK1.

NVIDIA has tested a 2" x 2" heat-spreader (a thin flat sheet of Aluminium) taken from a tablet 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.

The heat sink mounting holes on the board are 61mm apart. Heat sinks with fixed 59mm hole spacing such as the Enzotech CNB-S1 will not fit.


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.

Note that the board's heatsink mounting holes are 61-64mm apart. Heatsinks with a fixed 59mm push pin hole spacing will not mount properly as is.

A tall but tested model is the Connectland 1504002 Heatsink or Deep Cool NBridge8 which is a dual heatpipe copper finned design. They can be found on Amazon UK for around £10, as well as on eBay and some other EU or Chinese 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