2 # SPDX-License-Identifier: GPL-2.0
4 \fBtmon\fP - A monitoring and testing tool for Linux kernel thermal subsystem
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
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
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
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
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
41 - log real-time thermal data into space separated format that can be
42 directly consumed by plotting tools such as Rscript.
46 The \fB-c --control\fP option sets a cooling device type to control temperature
49 The \fB-d --daemon\fP option runs \fBtmon \fP as daemon without user interface
51 The \fB-g --debug\fP option allow debug messages to be stored in syslog
53 The \fB-h --help\fP option shows help message
55 The \fB-l --log\fP option write data to /var/tmp/tmon.log
57 The \fB-t --time-interval\fP option sets the polling interval in seconds
59 The \fB-T --target-temp\fP option sets the initial target temperature
61 The \fB-v --version\fP option shows the version of \fBtmon \fP
63 The \fB-z --zone\fP option sets the target therma zone instance to be controlled
66 .SH FIELD DESCRIPTIONS
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
78 Build depends on ncurses
80 Runtime depends on window size large enough to show the number of
81 devices found on the system.
85 .SH INTERACTIVE COMMANDS
88 \fBCtrl-C, q/Q\fP stops \fBtmon\fP
89 \fBTAB\fP shows tuning pop up panel, choose a letter to modify
92 Without any parameters, tmon is in monitoring only mode and refresh
93 screen every 1 second.
95 1. For monitoring only:
99 2. Use Processor cooling device to control thermal zone 0 at default 65C.
100 $ sudo ./tmon -c Processor -z 0
102 3. Use intel_powerclamp(idle injection) cooling device to control thermal zone 1
103 $ sudo ./tmon -c intel_powerclamp -z 1
105 4. Turn on debug and collect data log at /var/tmp/tmon.log
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.
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
134 Data can be read directly into an array by an example R-script below:
137 tdata <- read.table("/var/tmp/tmon.log", header=T, comment.char="#")
141 g_range <- range(0, intel_powerclamp15, TargetTemp, acpitz0)
142 plot( Samples, intel_powerclamp15, col="blue", ylim=g_range, axes=FALSE, ann=FALSE)
144 lines(TargetTemp, type="o", pch=22, lty=2, col="red")