Jacob Pan | 94f6996 | 2013-10-14 16:02:27 -0700 | [diff] [blame] | 1 | .TH TMON 8 |
Greg Kroah-Hartman | b244131 | 2017-11-01 15:07:57 +0100 | [diff] [blame] | 2 | # SPDX-License-Identifier: GPL-2.0 |
Jacob Pan | 94f6996 | 2013-10-14 16:02:27 -0700 | [diff] [blame] | 3 | .SH NAME |
| 4 | \fBtmon\fP - A monitoring and testing tool for Linux kernel thermal subsystem |
| 5 | |
| 6 | .SH SYNOPSIS |
| 7 | .ft B |
| 8 | .B tmon |
| 9 | .RB [ Options ] |
| 10 | .br |
| 11 | .SH DESCRIPTION |
| 12 | \fBtmon \fP can be used to visualize thermal relationship and |
| 13 | real-time thermal data; tune |
| 14 | and test cooling devices and sensors; collect thermal data for offline |
| 15 | analysis and plot. \fBtmon\fP must be run as root in order to control device |
| 16 | states via sysfs. |
| 17 | .PP |
| 18 | \fBFunctions\fP |
| 19 | .PP |
| 20 | .nf |
| 21 | 1. Thermal relationships: |
| 22 | - show thermal zone information |
| 23 | - show cooling device information |
| 24 | - show trip point binding within each thermal zone |
| 25 | - show trip point and cooling device instance bindings |
| 26 | .PP |
| 27 | 2. Real time data display |
| 28 | - show temperature of all thermal zones w.r.t. its trip points and types |
| 29 | - show states of all cooling devices |
| 30 | .PP |
| 31 | 3. Thermal relationship learning and device tuning |
| 32 | - with a built-in Proportional Integral Derivative (\fBPID\fP) |
| 33 | controller, user can pair a cooling device to a thermal sensor for |
| 34 | testing the effectiveness and learn about the thermal distance between the two |
| 35 | - allow manual control of cooling device states and target temperature |
| 36 | .PP |
| 37 | 4. Data logging in /var/tmp/tmon.log |
| 38 | - contains thermal configuration data, i.e. cooling device, thermal |
| 39 | zones, and trip points. Can be used for data collection in remote |
| 40 | debugging. |
| 41 | - log real-time thermal data into space separated format that can be |
| 42 | directly consumed by plotting tools such as Rscript. |
| 43 | |
| 44 | .SS Options |
| 45 | .PP |
| 46 | The \fB-c --control\fP option sets a cooling device type to control temperature |
| 47 | of a thermal zone |
| 48 | .PP |
| 49 | The \fB-d --daemon\fP option runs \fBtmon \fP as daemon without user interface |
| 50 | .PP |
| 51 | The \fB-g --debug\fP option allow debug messages to be stored in syslog |
| 52 | .PP |
| 53 | The \fB-h --help\fP option shows help message |
| 54 | .PP |
| 55 | The \fB-l --log\fP option write data to /var/tmp/tmon.log |
| 56 | .PP |
| 57 | The \fB-t --time-interval\fP option sets the polling interval in seconds |
| 58 | .PP |
Brian Norris | 4cc32cb | 2015-02-17 18:18:29 -0800 | [diff] [blame] | 59 | The \fB-T --target-temp\fP option sets the initial target temperature |
| 60 | .PP |
Jacob Pan | 94f6996 | 2013-10-14 16:02:27 -0700 | [diff] [blame] | 61 | The \fB-v --version\fP option shows the version of \fBtmon \fP |
| 62 | .PP |
| 63 | The \fB-z --zone\fP option sets the target therma zone instance to be controlled |
| 64 | .PP |
| 65 | |
| 66 | .SH FIELD DESCRIPTIONS |
| 67 | .nf |
| 68 | .PP |
| 69 | \fBP \fP passive cooling trip point type |
| 70 | \fBA \fP active cooling trip point type (fan) |
| 71 | \fBC \fP critical trip point type |
| 72 | \fBA \fP hot trip point type |
| 73 | \fBkp \fP proportional gain of \fBPID\fP controller |
| 74 | \fBki \fP integral gain of \fBPID\fP controller |
| 75 | \fBkd \fP derivative gain of \fBPID\fP controller |
| 76 | |
| 77 | .SH REQUIREMENT |
| 78 | Build depends on ncurses |
| 79 | .PP |
| 80 | Runtime depends on window size large enough to show the number of |
| 81 | devices found on the system. |
| 82 | |
| 83 | .PP |
| 84 | |
| 85 | .SH INTERACTIVE COMMANDS |
| 86 | .pp |
| 87 | .nf |
| 88 | \fBCtrl-C, q/Q\fP stops \fBtmon\fP |
| 89 | \fBTAB\fP shows tuning pop up panel, choose a letter to modify |
| 90 | |
| 91 | .SH EXAMPLES |
| 92 | Without any parameters, tmon is in monitoring only mode and refresh |
| 93 | screen every 1 second. |
| 94 | .PP |
| 95 | 1. For monitoring only: |
| 96 | .nf |
| 97 | $ sudo ./tmon |
| 98 | |
| 99 | 2. Use Processor cooling device to control thermal zone 0 at default 65C. |
| 100 | $ sudo ./tmon -c Processor -z 0 |
| 101 | |
| 102 | 3. Use intel_powerclamp(idle injection) cooling device to control thermal zone 1 |
| 103 | $ sudo ./tmon -c intel_powerclamp -z 1 |
| 104 | |
| 105 | 4. Turn on debug and collect data log at /var/tmp/tmon.log |
| 106 | $ sudo ./tmon -g -l |
| 107 | |
| 108 | For example, the log below shows PID controller was adjusting current states |
| 109 | for all cooling devices with "Processor" type such that thermal zone 0 |
| 110 | can stay below 65 dC. |
| 111 | |
| 112 | #---------- THERMAL DATA LOG STARTED ----------- |
| 113 | Samples TargetTemp acpitz0 acpitz1 Fan0 Fan1 Fan2 Fan3 Fan4 Fan5 |
| 114 | Fan6 Fan7 Fan8 Fan9 Processor10 Processor11 Processor12 Processor13 |
| 115 | LCD14 intel_powerclamp15 1 65.0 65 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 2 |
| 116 | 65.0 66 65 0 0 0 0 0 0 0 0 0 0 4 4 4 4 6 0 3 65.0 60 54 0 0 0 0 0 0 0 0 |
| 117 | 0 0 4 4 4 4 6 0 4 65.0 53 53 0 0 0 0 0 0 0 0 0 0 4 4 4 4 6 0 |
| 118 | 5 65.0 52 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 |
| 119 | 6 65.0 53 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 |
| 120 | 7 65.0 68 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 |
| 121 | 8 65.0 68 68 0 0 0 0 0 0 0 0 0 0 5 5 5 5 6 0 |
| 122 | 9 65.0 68 68 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 0 |
| 123 | 10 65.0 67 67 0 0 0 0 0 0 0 0 0 0 7 7 7 7 6 0 |
| 124 | 11 65.0 67 67 0 0 0 0 0 0 0 0 0 0 8 8 8 8 6 0 |
| 125 | 12 65.0 67 67 0 0 0 0 0 0 0 0 0 0 8 8 8 8 6 0 |
| 126 | 13 65.0 67 67 0 0 0 0 0 0 0 0 0 0 9 9 9 9 6 0 |
| 127 | 14 65.0 66 66 0 0 0 0 0 0 0 0 0 0 10 10 10 10 6 0 |
| 128 | 15 65.0 66 67 0 0 0 0 0 0 0 0 0 0 10 10 10 10 6 0 |
| 129 | 16 65.0 66 66 0 0 0 0 0 0 0 0 0 0 11 11 11 11 6 0 |
| 130 | 17 65.0 66 66 0 0 0 0 0 0 0 0 0 0 11 11 11 11 6 0 |
| 131 | 18 65.0 64 61 0 0 0 0 0 0 0 0 0 0 11 11 11 11 6 0 |
| 132 | 19 65.0 60 59 0 0 0 0 0 0 0 0 0 0 12 12 12 12 6 0 |
| 133 | |
| 134 | Data can be read directly into an array by an example R-script below: |
| 135 | |
| 136 | #!/usr/bin/Rscript |
| 137 | tdata <- read.table("/var/tmp/tmon.log", header=T, comment.char="#") |
| 138 | attach(tdata) |
| 139 | jpeg("tmon.jpg") |
| 140 | X11() |
| 141 | g_range <- range(0, intel_powerclamp15, TargetTemp, acpitz0) |
| 142 | plot( Samples, intel_powerclamp15, col="blue", ylim=g_range, axes=FALSE, ann=FALSE) |
| 143 | par(new=TRUE) |
| 144 | lines(TargetTemp, type="o", pch=22, lty=2, col="red") |
| 145 | dev.off() |