如果没有第三方软件,如何找到温度?


12

我正在使用来运行sensors-detect系统,lm-sensors因为当我观看youtube视频时,我的系统不断关闭

所以我想知道如何在没有第3方软件之类的情况下手动找到风扇和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


您正在运行哪个版本的Ubuntu?
wjandrea

1
这取决于您的处理器。对于许多最新的英特尔处理器,turbostat程序将读取MSR(机器专用寄存器)并显示封装和内核温度。编辑您的问题并添加处理器以建立模型。如果这是我所知道的,我将回答如何手动进行。
道格·史密斯

我添加的额外RAM是否会有问题..,RAM是每秒1333兆传输,而cpu则是最大MHz:2800.0000

11
第三方是什么意思?您认为第一方软件有多少Ubuntu?
muru

1
我不确定在用户拦截分发版本之前,Ubuntu使用了多少方。从总体上讲,我知道Ubuntu是我称为第一方的Linux操作系统,其次是我,然后是手头的问题,将我有问题的程序留给了第三方,而没有说出具体的第六方变体了。还是在ubtunu赞助商和/或自愿的程序员软件之后,所以我不清楚。

Answers:


12

这听起来像你想要的是/sys/class/hwmon/sys/class/thermal

两者都提供了基于外壳的简单访问,以访问所需的数据(hwmon目录还将包括其他传感器类型)。对于系统中的每个传感器接口,每个目录都有一个目录(可能有多个传感器)。

不过,还有三件事要注意:

  • 除非您的系统真的很差,否则sensors即使每秒运行一次命令也不会产生明显的效果。实际上,定期读取上述目录中的文件可能会起到更大的作用。
  • 图是您的朋友。我建议您获取诸如netdata之类的东西或收集运行信息,以便您可以查看实时(或接近实时)数据。
  • 也检查您的电压。您描述的原因还可能是由于电源无法满足系统的电源要求。当系统处于高负载下时,电压将显着下降,这表明了这一点。

这应该是一个可以接受的答案,因为它处理的是实际提出的问题:“我如何手动找到温度?我只是不确定它们的存储位置。” 然后一些/proc/cpuinfo显示AMD处理器。不知道为什么OP随后接受了Intel特定的答案,该答案要求安装其他工具。
亚伦F

@AaronF:我不同意。我写了一个针对Intel的答案,因为OP要求我这么做。不需要安装其他工具吗?我直接通过MSR而不是通过MSR读取包装温度的原因/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input是,我的大部分工作是在极度闲置的系统上进行的,后一种方法的开销更大,导致始终保持4到5度的一致结果。当然,重负载系统没有区别。
道格·史密斯

1
@DougSmythies我以为您的回答是非常完整的,这就是为什么我没有投票,也没有在下面留下负面评论的原因:-) rdmsr程序是msr-tools的一部分,默认情况下它未安装在我的Intel上机(运行Ubuntu,如果检测到Intel,可能默认安装其他发行版?)
Aaron F

@AaronF:我忘记了msr-tools是必需的附加软件包。因此,我的方法也需要附加工具,而这并不是OP想要的。
道格·史密斯

2
您好@ DougSmythies和Aaron F,我最初选择DougSmythies作为主要答案,因为他是第一个提供帮助的人,他的答案非常清楚如何手动搜索“温度”以及如何使用手动解决方案使其易于使用具有mdmsr支持的程序,实际上这是一个艰难的决定,因为两个答案都非常有用。我将主要答案回复给亚伦,谢谢您的支持。狩猎快乐

9

该答案是一种通过直接访问机器特定寄存器(MSR)手动监视某些Intel处理器温度的方法。

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

请参阅《英特尔®64和IA-32架构软件开发人员手册》,或者您所用的AMD等效手册。

就我而言,我希望将MSR的第22-16位设置为0x1B1,又称为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

你为什么用eval
wjandrea

@Doug:使用msr的好答案!但是,不是正确的MSR寄存器0x19c吗?并且温度为TEMP = TCC-[0x19c位22:16]。因此,有必要先阅读TCC。
abu_bua

@abu_bua:我不知道0x19c是否有效,但是我使用的却可以。是的,我为我的处理器硬编码了TCC,而不是更好的解决方案,那就是从处理器读取它。
道格·史密斯

1
您安装了sudo apt install msr-tools吗?
abu_bua '18

1
msr-tools是软件包。对于包中的两个单独命令,将是man rdmsrman wrmsr
道格·史密斯

5

我不知道你到底想要什么 lm-sensor程序(以及相应的sensors命令)使用libsensor库;如果您使用Ubuntu 18.04,则它是libsensors4版本3.4.0-4。该目录与读取温度的库相同,可以在sys目录中看到。

综上所述,传感器是一个不错的选择。观看温度连续使用

watch -n 1 sensors

如果要编写程序,则必须使用man libsensors或来查看libsensors /usr/share/doc/。您必须包含#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

在高于77.0、66.0、67.0°C的情况下,温度以摄氏度(mC)为单位。

观看连续使用

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

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

我还想指出,一些过热保护是基于硬件编码的(这是个好主意),其中数据被保存在您的BIOS中。


我知道这里有程序,但是我正在寻找一种手动查找临时文件的方法

1
手动是什么意思?打印温度的所有东西都是程序。
abu_bua '18

我没有Thermal_zone,我所拥有的都是cooling_device0 1和2,但它们没有文件温度,只有cur_state设备的max_state电源子系统类型为uevent

cur和max状态分别是0和10

到底是什么thermal_zones?我的4核Intel CPU似乎只有一个thermal_zonesensors但是,正确列出了所有4个核心温度)。
Gwyneth Llewelyn

5

从默认的Ubuntu存储库安装Psensor(psensor),并将Psensor配置为在温度超过用户确定的最高温度时自动播放警报声音。这样做的目的是让您系统关闭之前听到警告声,而不会给系统增加额外的应用程序开销。

Psensor在桌面上以时钟温度计旁边的通知区域中的温度计图标的形式显示自己。您可以随时右键单击温度计图标以显示硬件温度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.