如何在没有第三方软件的情况下查找温度?

如何在没有第三方软件的情况下查找温度?

我正在sensors-detect我的系统上运行,lm-sensors因为我的系统在我观看 YouTube 视频时不断关闭

所以我想知道如何在不使用第三方软件的情况下手动找到风扇和 CPU 的温度lm-sensors?我只是不确定它们存储在哪里。

processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 16
model       : 6
model name  : AMD Athlon(tm) II X2 240e Processor
power management: ts ttp tm stc 100mhzsteps hwpstate

x86_64

答案1

听起来您想要的是/sys/class/hwmon/sys/class/thermal

这两个目录都提供基于 shell 的简单数据访问(hwmon 目录还将包含其他传感器类型)。每个目录都针对系统中的每个传感器接口(可能有多个传感器)都有一个目录。

但还有三件事需要注意:

  • 除非你的系统真的很差,sensors否则每秒运行一次该命令也不会产生任何明显的影响。事实上,定期读取上述目录中的文件可能会产生更大的影响。
  • 图表是你的好朋友。我建议运行 netdata 或 collectd 之类的程序,这样你就可以查看实时(或接近实时)的数据。
  • 还要检查电压。您所描述的情况也可能是由于电源无法满足系统的功率要求。当系统处于高负载状态时,电压会大幅下降。

答案2

这个答案是关于通过直接访问机器特定寄存器(MSR)手动监控某些英特尔处理器的处理器温度的一种方法。

首先要注意的是,在这种情况下,从 MSR 读取的内容是相对于极限温度 Tcc 的,因此需要进行额外的计算来确定实际温度。

请参阅Intel® 64 和 IA-32 架构软件开发人员手册,或者在您的情况下是 AMD 等效产品。

就我而言,我需要 0x1B1 处的 MSR 的 22-16 位,即 IA32_PACKAGE_THERM_STATUS。我较旧的 i7-2600K 的 Tcc 为 98 度。

这是一个手动监控温度(和 CPU 频率)的简单脚本:

#! /bin/dash
#
# temp_mon3 Smythies 2016.10.05
#       a simplified version of temp_mon2,
#       for monitoring temp.
#       Note: it is on purpose that -a is not used.
#       Also CPU0 frequency (1 is good enough, when all
#       are loaded).
#
# temp_mon2 Smythies 2016.09.29
#       Monitor Package temperatures.
#       Use clock modulation to control temps.
#       i.e. simulate the second to last level
#       of defense.
#       Use simple primatives.
#       run as sudo
#       hardcoded for my tcc of 98 degrees.
#
echo ... begin package temperature monitoring ...

#
# In case I forgot (which I often do)

modprobe msr

#
# first let the drastic effect of the sudo command decay
# Done later in temp_mon3.

#
# some stuff

COMMAND="rdmsr --bitfield 22:16 -u 0x1B1"
COMMAND2="cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq"

#
# then get on with it

while [ 1 ];do
  sleep 4
  TEMP_RAW=$(eval $COMMAND)
  CPU0_FREQ=$(eval $COMMAND2)
  TEMP_ACT=$((98-TEMP_RAW))
  echo "$TEMP_ACT   $CPU0_FREQ"
done

下面是一些示例输出,我在一段时间后添加了一些 CPU 负载(温度从 31 度上升到 73 度):

$ sudo ./temp_mon3
[sudo] password for doug:
... begin package temperature monitoring ...
31   1605275
31   1605154
32   1605164
30   1605148
31   1605176
51   3511279
54   3511278
55   3511279
57   3511283
58   3511279
60   3511278
61   3511284
63   3511279
64   3511280
64   3511280
66   3511280
67   3511278
68   3511280
68   3511281
69   3511278
71   3511280
70   3511281
71   3511281
71   3511280
72   3511276
72   3511277
73   3511283
73   3511279
^C

答案3

流明传感器项目(以及sensors命令)利用库传感器库;库和包是:

  • Ubuntu 18.04:libsensors4,版本 3.4.0-4

     sudo apt install libsensors4 
    
  • Ubuntu 20.04:libsensors5,版本 3.6.0。

     sudo apt install libsensors5
    

我还建议安装开发包(包括手册页),它与 LTS 18.04 和 LTS 20.04 相同:

sudo apt install libsensors4-dev

一些背景信息无法找到:

man libsensors
man sensors.conf

顺便说一下,这是读取目录中所见温度的同一个库sys

总而言之,传感器是一个不错的选择。通过命令行查看温度很容易做到

watch -n 1 sensors

如果您打算编写程序,请查看 libsensors 手册man libsensors或使用您的/usr/share/doc/文档。在 C 程序中,您必须包含#include <sensors/sensors.h>标头。它将使用sensors.conf文件/etc/sensors3.conf和/或/etc/sensors.conf/etc/sensors.d/。如果您使用此选项,可以在 中找到进一步的(用户)配置。

如果您认为缺少一些传感器,请查看/sys/class/thermal或链接的/sys/devices/virtual/thermal目录。

要获取所有热区的温度,请使用以下命令

$ cat /sys/devices/virtual/thermal/thermal_zone?/temp

77000
66000
67000

温度以毫摄氏度 (mC) 为单位进行测量,在上述情况下,以摄氏度为单位测量的温度为:77.0、66.0、67.0 °C。

要连续观察温度,请使用

watch -n 1 cat /sys/devices/virtual/thermal/thermal_zone?/temp

在此目录中,您还可以找到有关冷却(风扇)设备以及 PID 调节器如何编程的信息。

此外,一些过温保护是基于编码固件/硬件的(这是一个好主意),并且其设置数据放在您的 BIOS 中。

如果您希望以 °C 而不是 °mC 显示温度,请使用 bash 计算$((value / 1000 ))或 awk 进行以下转换:

cat /sys/devices/virtual/thermal/thermal_zone?/temp | awk '{printf " %5.2f °C\n" , $1/1000}'

答案4

由于 Linux 系统中温度是以文件 ( /sys/class/thermal/thermal_zone0/temp) 的形式出现的,所以我们可以通过读取文件来找到答案。要纯粹通过 shell 脚本查找温度:

  1. 运行命令:touch get_temperature.sh新建一个空文件;

  2. 在下面输入以下代码:

#!/bin/sh

TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
# TEMP_CEL=$(expr $TEMP_RAW / 1000)
TEMP_CEL=$(echo "scale=2;$TEMP_RAW / 1000" | bc)
TEMP_CEL_W_SIGN=temp=${TEMP_CEL}\'C

# print
echo $TEMP_CEL_W_SIGN
  1. 要使脚本可执行,请运行:sudo chmod +x get_temperature.sh

  2. 通过运行以下命令来执行脚本:./get_temperature.sh

编辑:感谢评论部分的建议!

相关内容