Датчик температуры процессора

nafanja, что у тебя за AMD? Лучше вывод cat /proc/cpuinfo | head -n 5
Ошибки не исчезают с опытом - они просто умнеют
vasek, а я и не разбирался особо, увидел неполадки и запустил коньки через терминал, потом гуглил те матюки, что он мне выдал. ) После Центоси еще пришлось то же самое проделать с конфигами dunst и compton.
In Tux We Trust
vasek,
cat /proc/cpuinfo | head -n 5
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 21
model           : 48
model name      : AMD A10-7850K Radeon R7, 12 Compute Cores 4C+8G
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
redix
проблему решило обращение к hwmon, я уже не помню где нашел, но это работает. К слову сказать этот самый hwmon связан с lm_sensors,
да, в /sys/class/hwmon/ живут датчики разные.
а эта команда в конфиге коньков ${hwmon 1 temp 1} делает тоже самое что и cat /sys/class/hwmon/hwmon1/temp1_input только умноженное деленное на 1000.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja, посмотрел документацию по AMD и .... скажу, что это не Intel, в котором намного проще.
Похоже температура высчитывается также относительно max (Tctl_max - Tctl), но вот когда посмотрел регистры, в которых это можно прочитать, сразу приуныл.
Нет, это уже не для меня.
Ошибки не исчезают с опытом - они просто умнеют
Нашёл утилиту inxi,есть в aur ,есть вот тут.Много разных функций,с ключом -s показывает дртчики.
inxi -s
Sensors:   System Temperatures: cpu: 36.0C mobo: N/A gpu: 9.0
           Fan Speeds (in rpm): cpu: 2002 fan-2: 0 fan-3: 0 fan-4: 0 fan-5: 0
теперь хоть понятно что вывод sensors temp1: +36.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor это температура цпу
 sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:         +6.5°C  (high = +70.0°C)
                       (crit = +80.0°C, hyst = +79.0°C)

radeon-pci-0008
Adapter: PCI adapter
temp1:         +7.0°C  (crit = +120.0°C, hyst = +90.0°C)

it8620-isa-0228
Adapter: ISA adapter
in0:          +0.84 V  (min =  +0.00 V, max =  +3.06 V)
in1:          +1.52 V  (min =  +0.00 V, max =  +3.06 V)
in2:          +2.05 V  (min =  +0.00 V, max =  +3.06 V)
in3:          +2.06 V  (min =  +0.00 V, max =  +3.06 V)
in4:          +2.04 V  (min =  +0.00 V, max =  +3.06 V)
in5:          +2.23 V  (min =  +0.00 V, max =  +3.06 V)
in6:          +2.23 V  (min =  +0.00 V, max =  +3.06 V)
3VSB:         +3.29 V  (min =  +0.00 V, max =  +6.12 V)
Vbat:         +3.10 V
fan1:        2002 RPM  (min =    0 RPM)
fan2:           0 RPM  (min =    0 RPM)
fan3:           0 RPM  (min =    0 RPM)
fan4:           0 RPM  (min =    0 RPM)
fan5:           0 RPM  (min =    0 RPM)
temp1:        +36.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp2:       -128.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = disabled
temp3:        +20.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = Intel PECI
temp4:        +43.0°C
temp5:        +45.0°C
temp6:        +45.0°C
intrusion0:  ALARM

fam15h_power-pci-00c4
Adapter: PCI adapter
power1:           N/A  (crit =  65.19 W)
а всё остальное ненужный мусор.Хорошая утилитка.Есть варианты направить её выход на conky.Буду дальше думать.
Вот вывод почти всей информации ,от системы инициализации до сетевого интерфейса...Тестирую пока на mx18
inxi -Fx
System:    Host: mx Kernel: 4.19.0-1-amd64 x86_64 (64 bit gcc: 6.3.0) Desktop: Openbox 3.6.1
           Distro: MX-18_x64 Continuum Dec 20, 2018
Machine:   Device: desktop System: Gigabyte product: N/A
           Mobo: Gigabyte model: F2A78M-DS2 v: x.x
           BIOS: American Megatrends v: FC date: 12/24/2015
CPU:       Quad core AMD A8-7600 Radeon R7 10 Compute Cores 4C+6G (-MCP-) cache: 8192 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm) bmips: 24755
           clock speeds: max: 3100 MHz 1: 1552 MHz 2: 1847 MHz 3: 1396 MHz 4: 1396 MHz
Graphics:  Card: Advanced Micro Devices [AMD/ATI] Kaveri [Radeon R7 Graphics] bus-ID: 00:01.0
           Display Server: X.Org 1.19.2 drivers: ati,radeon (unloaded: modesetting,fbdev,vesa)
           Resolution: [email protected]
           GLX Renderer: AMD KAVERI (DRM 2.50.0, 4.19.0-1-amd64, LLVM 7.0.0)
           GLX Version: 4.4 (Compatibility Profile) Mesa 18.2.6 Direct Rendering: Yes
Audio:     Card Advanced Micro Devices [AMD] FCH Azalia Controller
           driver: snd_hda_intel bus-ID: 00:14.2
           Sound: Advanced Linux Sound Architecture v: k4.19.0-1-amd64
Network:   Card: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
           driver: r8169 port: e000 bus-ID: 01:00.0
           IF: eth0 state: up speed: 100 Mbps duplex: full mac: e0:d5:5e:14:04:a7
Drives:    HDD Total Size: 320.1GB (4.2% used)
           ID-1: /dev/sda model: SAMSUNG_HD321KJ size: 320.1GB
Partition: ID-1: / size: 32G used: 7.4G (25%) fs: ext4 dev: /dev/sda6
           ID-2: swap-1 size: 5.89GB used: 0.00GB (0%) fs: swap dev: /dev/sda5
Sensors:   System Temperatures: cpu: 36.0C mobo: N/A gpu: 9.0
           Fan Speeds (in rpm): cpu: 2070 fan-2: 0 fan-3: 0 fan-4: 0 fan-5: 0
Info:      Processes: 164 Uptime: 2:12 Memory: 2692.4/6916.7MB
           Init: SysVinit runlevel: 5 Gcc sys: 6.3.0 Client: Shell (bash 4.4.121) inxi: 2.3.5
Linux Forever!
Привожу для информации.
Заинтересовал средний вывод температуры, решил проверить, нашел регистр, который выводит усредненную температуру, плюс к этому сделал поправку к максимальной температуре и вот что получается (sys - системные значения, reg_m - мгновенные из регистра, reg_s - усредненные из регистра)
cpu_t.sh
sys - 51 ... reg_m - 48 ... reg_s - 52
sys - 51 ... reg_m - 48 ... reg_s - 51
sys - 50 ... reg_m - 48 ... reg_s - 51
sys - 50 ... reg_m - 49 ... reg_s - 50
sys - 50 ... reg_m - 48 ... reg_s - 50
sys - 54 ... reg_m - 48 ... reg_s - 51
sys - 51 ... reg_m - 49 ... reg_s - 53
sys - 50 ... reg_m - 48 ... reg_s - 51
sys - 50 ... reg_m - 49 ... reg_s - 51
sys - 51 ... reg_m - 49 ... reg_s - 52
sys - 50 ... reg_m - 49 ... reg_s - 51
sys - 50 ... reg_m - 49 ... reg_s - 51
sys - 63 ... reg_m - 57 ... reg_s - 62
sys - 64 ... reg_m - 58 ... reg_s - 62
sys - 65 ... reg_m - 59 ... reg_s - 63
sys - 65 ... reg_m - 60 ... reg_s - 64
sys - 65 ... reg_m - 61 ... reg_s - 63
sys - 66 ... reg_m - 61 ... reg_s - 64
sys - 66 ... reg_m - 61 ... reg_s - 66
sys - 67 ... reg_m - 61 ... reg_s - 66
sys - 66 ... reg_m - 62 ... reg_s - 66
sys - 55 ... reg_m - 53 ... reg_s - 56
sys - 55 ... reg_m - 53 ... reg_s - 56
sys - 54 ... reg_m - 52 ... reg_s - 56
sys - 54 ... reg_m - 51 ... reg_s - 54
Вообщем, система считывает усредненные значения, как и предполагал выше. Совпадение довольно хорошее, разницу можно списать на разницу во времени при выполнении команд в срипте.
Но не понятно одно, почему мгновенная температура cpu меньше усредненной? И чем выше температура, тем больше разница. Или усредненную специально завышают? Если это так, то можно это учитывать в работе - у меня ноут частенько при компиляции достигает значений 80-85 градусов, а максимальная по спецификации 85.
Ошибки не исчезают с опытом - они просто умнеют
nafanja, предлагаю на досуге попробовать определить температуру самому, считывая из регистра, если есть желание.
Конечно, точных советов дать не могу, так как я вообще не знаю AMD, но попробовать то можно, хотя бы ради интереса.
Вот документация на твой проц (Family 15h Models 30h-3F это в 16-ричной системе, а в 10-ой системе это будет Family 21 Models 48-63), смотри раздел 2.10 Thermal Functions
Если я правильно понял, то в регистре D18F3xA4 (биты 31:21) находится Tctl - текущая относительная температура (относительно максимальной), а значит фактическая температура будет равна Tctl_max - Tctl. А так как максимальная согласно спецификации равна 72 градуса (точнее 72,4), то получаем 72 - Tctl .

UPD 1 - если я правильно понял, то значение максимальной температуры прописано в регистре D18F3x64 (bits: 30:28), которое можно и проверить, но следует уточнить биты - если в datasheet нажать на регистр, то перенесет в описание (побитное) этого регистра.
Что меня смущает, то большие обозначения регистров по отношению к Intel, но если читают спецы по регистрам AMD, то прояснят нам.

UPD 2 - в части чтения регистров - нужно установить пакет msr-tools, для чтения значений из регистра используется утилита rdmsr, но чтобы применять нужно загрузить модуль msr. Страшного в использования rdmsr ничего нет, даже если ошибешься, просто сообщит об ошибке. Как использовать rdmsr, приводил выше (через sudo).
Что то засомневался в возможности применения msr-tools для AMD, хотя по идее насколько помнится применимо и для Intel и для AMD.
Ошибки не исчезают с опытом - они просто умнеют
vasek, что то не понял как пользоваться этим rdmsr
модуль msr загружен
lsmod | grep msr
msr                    16384  0

rdmsr D18F3xA4
0
rdmsr D18F3xA4 -f 31:21
0
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
что то не понял как пользоваться этим rdmsr
Пользуешься правильно, проблема в том, что нужно понять, что это за регистр и что он выдает.
У Intel в этом отношении написано получше, например, для максимальной температуры все понятно
TjMAX is factory calibrated and is not user configurable. The default value is software visible in the TEMPERATURE_TARGET (0x1A2) MSR, bits [23:16].
А вот в части текущей температуры указан мимоходом регистр 0x19C, но без бит, биты искал уже в другом месте, пришлось то же посидеть.

В документации AMD, на которую давал ссылку, на странице 459, в конце, дано описание этого регистра, смотри раздел D18F3xA4 Reported Temperature Control и там же приведено описание битов. Несколько раз читал, но так точно и не понял смысл, что же заносится в этот регистр
Привожу машинный перевод
Регуляторы скорости нарастания в этом регистре используются для фильтрации измерений температуры процессора. Отдельные элементы управления предусмотрены для измеренной температуры, которая выше или ниже, чем Tctl. Таймер для каждого шага считает, пока измеренная температура остается выше или ниже Tctl. Каждый раз, когда измеренная температура изменяется на другую сторону Tctl, ступенчатый таймер сбрасывается, и Tctl не изменяется. Например, если время шага включено в обоих направлениях, Tctl = 62,625, и измеренная температура продолжает быстро скакать между 62,5 и 63,0, то (при условии, что время шага достаточно велико), Tctl не изменится. Однако, как только измеренная температура установится на одной стороне Tctl, Tctl может перейти к измеренной температуре. Если разница измеренной температуры минус Tctl больше, чем значение, установленное MaxTmpDiffUp, тогда Tctl устанавливается равным измеренной температуре. Смотри 2.10 Thermal Functions
Задача одна, понять логику управления температурой и может оказаться, что нужно считывать совсем другие биты или использовать совсем другой регистр?

Вот если бы кто помог в этом разобраться, было бы очень здорово.

UPD - можно сначала просто помониторить вывод этого регистра в зависимости от нагрузки и лучше мониторить два вывода
rdmsr D18F3xA4 -f 32:00
rdmsr D18F3xA4 -f 31:21
а лучше прописать вывод и других битов, указанных в таблице битов, может так проще будет понять. Можно простой скрипт, типа
while true ; do
Treg1=$(sudo rdmsr D18F3xA4  -f x1:y1)
Treg2=$(sudo rdmsr D18F3xA4  -f x2:y2)
echo "Reg1 - $Treg1 ... Reg2 - $Treg2 …."
sleep 1
done
и применить во время мониторинга stress

EDIT 1 - я часто использую rdmsr, а потому добавил для удобства в sudoers

EDIT 2 - хорошо бы понять как получить эту истинную температуру на AMD, у многих бы снялась забота. Кстати я на Intel тоже не сразу понял что к чему, многое делал методом тыка. Плохо то, что в инете на эту тему ни хрена нет, приходится доходить самим.

EDIT 3 - понять бы вот этот смысл - последнее предложение из описания регистра
Если разница измеренной температуры минус Tctl больше, чем значение, установленное MaxTmpDiffUp, тогда Tctl устанавливается равным измеренной температуре.
выходит, что значение регистра выдает нужную температуру только при определенных условиях???
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.