3 \fBtmon\fP - A monitoring and testing tool for Linux kernel thermal subsystem
11 \fBtmon \fP can be used to visualize thermal relationship and
12 real-time thermal data; tune
13 and test cooling devices and sensors; collect thermal data for offline
14 analysis and plot. \fBtmon\fP must be run as root in order to control device
20 1. Thermal relationships:
21 - show thermal zone information
22 - show cooling device information
23 - show trip point binding within each thermal zone
24 - show trip point and cooling device instance bindings
26 2. Real time data display
27 - show temperature of all thermal zones w.r.t. its trip points and types
28 - show states of all cooling devices
30 3. Thermal relationship learning and device tuning
31 - with a built-in Proportional Integral Derivative (\fBPID\fP)
32 controller, user can pair a cooling device to a thermal sensor for
33 testing the effectiveness and learn about the thermal distance between the two
34 - allow manual control of cooling device states and target temperature
36 4. Data logging in /var/tmp/tmon.log
37 - contains thermal configuration data, i.e. cooling device, thermal
38 zones, and trip points. Can be used for data collection in remote
40 - log real-time thermal data into space separated format that can be
41 directly consumed by plotting tools such as Rscript.
45 The \fB-c --control\fP option sets a cooling device type to control temperature
48 The \fB-d --daemon\fP option runs \fBtmon \fP as daemon without user interface
50 The \fB-g --debug\fP option allow debug messages to be stored in syslog
52 The \fB-h --help\fP option shows help message
54 The \fB-l --log\fP option write data to /var/tmp/tmon.log
56 The \fB-t --time-interval\fP option sets the polling interval in seconds
58 The \fB-T --target-temp\fP option sets the initial target temperature
60 The \fB-v --version\fP option shows the version of \fBtmon \fP
62 The \fB-z --zone\fP option sets the target therma zone instance to be controlled
65 .SH FIELD DESCRIPTIONS
68 \fBP \fP passive cooling trip point type
69 \fBA \fP active cooling trip point type (fan)
70 \fBC \fP critical trip point type
71 \fBA \fP hot trip point type
72 \fBkp \fP proportional gain of \fBPID\fP controller
73 \fBki \fP integral gain of \fBPID\fP controller
74 \fBkd \fP derivative gain of \fBPID\fP controller
77 Build depends on ncurses
79 Runtime depends on window size large enough to show the number of
80 devices found on the system.
84 .SH INTERACTIVE COMMANDS
87 \fBCtrl-C, q/Q\fP stops \fBtmon\fP
88 \fBTAB\fP shows tuning pop up panel, choose a letter to modify
91 Without any parameters, tmon is in monitoring only mode and refresh
92 screen every 1 second.
94 1. For monitoring only:
98 2. Use Processor cooling device to control thermal zone 0 at default 65C.
99 $ sudo ./tmon -c Processor -z 0
101 3. Use intel_powerclamp(idle injection) cooling device to control thermal zone 1
102 $ sudo ./tmon -c intel_powerclamp -z 1
104 4. Turn on debug and collect data log at /var/tmp/tmon.log
107 For example, the log below shows PID controller was adjusting current states
108 for all cooling devices with "Processor" type such that thermal zone 0
109 can stay below 65 dC.
111 #---------- THERMAL DATA LOG STARTED -----------
112 Samples TargetTemp acpitz0 acpitz1 Fan0 Fan1 Fan2 Fan3 Fan4 Fan5
113 Fan6 Fan7 Fan8 Fan9 Processor10 Processor11 Processor12 Processor13
114 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
115 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
116 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
117 5 65.0 52 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0
118 6 65.0 53 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0
119 7 65.0 68 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0
120 8 65.0 68 68 0 0 0 0 0 0 0 0 0 0 5 5 5 5 6 0
121 9 65.0 68 68 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 0
122 10 65.0 67 67 0 0 0 0 0 0 0 0 0 0 7 7 7 7 6 0
123 11 65.0 67 67 0 0 0 0 0 0 0 0 0 0 8 8 8 8 6 0
124 12 65.0 67 67 0 0 0 0 0 0 0 0 0 0 8 8 8 8 6 0
125 13 65.0 67 67 0 0 0 0 0 0 0 0 0 0 9 9 9 9 6 0
126 14 65.0 66 66 0 0 0 0 0 0 0 0 0 0 10 10 10 10 6 0
127 15 65.0 66 67 0 0 0 0 0 0 0 0 0 0 10 10 10 10 6 0
128 16 65.0 66 66 0 0 0 0 0 0 0 0 0 0 11 11 11 11 6 0
129 17 65.0 66 66 0 0 0 0 0 0 0 0 0 0 11 11 11 11 6 0
130 18 65.0 64 61 0 0 0 0 0 0 0 0 0 0 11 11 11 11 6 0
131 19 65.0 60 59 0 0 0 0 0 0 0 0 0 0 12 12 12 12 6 0
133 Data can be read directly into an array by an example R-script below:
136 tdata <- read.table("/var/tmp/tmon.log", header=T, comment.char="#")
140 g_range <- range(0, intel_powerclamp15, TargetTemp, acpitz0)
141 plot( Samples, intel_powerclamp15, col="blue", ylim=g_range, axes=FALSE, ann=FALSE)
143 lines(TargetTemp, type="o", pch=22, lty=2, col="red")