Як знайти температуру без стороннього програмного забезпечення?


12

Я працюю sensors-detectв моїй системі, lm-sensorsтому що моя система продовжує вимикатися, коли я дивлюся відео YouTube

Тому мені цікаво, як я можу знайти температури вентилятора та процесора вручну без стороннього програмного забезпечення, як 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
Це залежить від вашого процесора. Для багатьох останніх процесорів Intel програма турбостата зчитує MSR (Machine Specific Registers) та відображатиме пакет та основні температури. Відредагуйте своє запитання та додайте, щоб ваш процесор зробив модель. Якщо це я знаю, я відповім, як це зробити вручну.
Doug Smythies

Чи буде у додаткової оперативної пам’яті у мене проблема? .. Оперативна пам'ять становить 1333 мегатрансфери в секунду, а процесор - макс. МГц: 2800.0000

11
Що ви маєте на увазі під стороннім? Наскільки Ubuntu, на вашу думку, є програмним забезпеченням сторонніх виробників?
муру

1
Я не точно впевнений, скільки партій використовує Ubuntu, перш ніж користувач перехопить розподіл для використання. Я знаю в загальному аспекті, що Ubuntu - це операційна система Linux, яку я назвав першою стороною, за нею перейшов мене, а потім питання під рукою, залишивши мою сумнівну програму третьою стороною, а не вимовляючи від стіни 6-й варіант партії або після спонсорів ubtunu та / або програмного забезпечення добровільних програмістів, тому я точно не знаю.

Відповіді:


12

Це звучить як те, що ти хочеш, так /sys/class/hwmonі є /sys/class/thermal.

Обидва вони забезпечують простий доступ на основі оболонки до потрібних даних (каталог hwmon також буде включати інші типи датчиків). У кожному є по одному каталогу для кожного інтерфейсу датчика у вашій системі (який може мати більше одного датчика).

Ще три речі, які слід зазначити:

  • Якщо у вас дійсно погана система, виконання sensorsкоманди навіть раз на секунду не повинно мати ніякого відчутного ефекту. Насправді, регулярне читання файлів у вищезгаданих каталогах може мати більший ефект.
  • Графіки - ваш друг тут. Я б запропонував отримати щось на зразок netdata або збирати запуск, щоб у вас були дані в реальному часі (або майже в реальному часі).
  • Перевірте і свої напруги. Те, що ви описуєте, також може бути пов’язане з наявністю джерела живлення, який не може відповідати вимогам живлення вашої системи. На це вказують напруги, що значно падають, коли система знаходиться під великим навантаженням.

Це має бути прийнятою відповіддю, оскільки він стосується фактично заданого питання: "як я можу знайти температури [...] вручну [...]? Я просто не впевнений, де вони зберігаються". Потім деякі /proc/cpuinfoпоказують процесор AMD. Не впевнений, чому тоді ОП прийняв специфічну відповідь Intel, яка вимагає встановлення іншого інструменту.
Аарон F

@AaronF: Я не згоден. Я написав конкретну відповідь Intel, тому що ОП попросив мене. Жодного іншого інструменту не потрібно встановлювати? Тому я читав температуру пакетів безпосередньо через MSRS , а не через /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_inputте , що більша частина моєї роботи з надзвичайно холостими системами, а другий метод має набагато більше накладні витрати, в результаті чого послідовно 4 до 5 градусів вище результату. Звичайно, для сильно завантаженої системи різниці немає.
Doug Smythies

1
@DougSmythies Я вважав, що ваша відповідь була дуже хорошою і повною, тому я не спровокував і не залишив під цим негативного коментаря :-) Програма rdmsr є частиною msr-інструментів, яка не встановлена ​​за замовчуванням у моїй Intel машина (працює Ubuntu, можливо, інші дистрибутивні встановити за замовчуванням, якщо вони виявлять Intel?)
Aaron F

@AaronF: Я забув, що msr-tools - це необхідний додатковий пакет. Тож для мого методу потрібен і додатковий інструмент, який не є тим, чого хотів ОП.
Doug Smythies

2
Привіт @ DougSmythies та Aaron F, я спочатку вибрав DougSmythies як основну відповідь, тому що він першим надавав допомогу, і його відповідь була дуже зрозумілою, як шукати температуру вручну, а також використовувати ручне рішення в простому у використанні Програма з підтримкою mdmsr, насправді це було важке рішення, оскільки обидві відповіді були дуже інформативними, але оскільки ви обидва погодились, що ця відповідь найкраща. Я повернув Аарону основну відповідь, дякую за підтримку. Щасливе полювання

9

Ця відповідь про один із способів контролювати температуру процесора вручну для деяких процесорів Intel через прямий доступ до конкретних реєстрів машин (MSR).

Перше, що слід зазначити, в цьому випадку те, що зчитується з MSR, відносно граничної температури Tcc, тому для визначення фактичної температури потрібен додатковий розрахунок.

Дивіться Посібник для розробників програмного забезпечення для архітектури Intel® 64 та IA-32 , або у вашому випадку еквівалент AMD.

У моєму випадку я хочу біти 22-16 MSR при 0x1B1, він же IA32_PACKAGE_THERM_STATUS. Tcc для мого старшого i7-2600K становить 98 градусів.

Ось простий скрипт для контролю температури (та частоти процесора) вручну:

#! /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

І ось деякий зразок виводу, де я додаю деяке завантаження процесора через деякий час (температура йде від 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]. Тож спочатку потрібно прочитати ТСС.
abu_bua

@abu_bua: Я не знаю, чи працює 0x19c чи ні, але те, що я використовую, робить. І так, я жорстко кодував TCC для свого процесора, а не краще рішення, яке було б прочитати його з процесора.
Doug Smythies

1
ви встановили sudo apt install msr-tools?
abu_bua

1
msr-tools - це пакет. Це було б man rdmsrі man wrmsrдля двох окремих команд в пакеті.
Doug Smythies

6

Я не знаю, чого ти насправді хочеш. Програма lm-сенсора (і, отже, sensorsкоманда) використовує бібліотеку лібсенсорів ; якщо ви використовуєте Ubuntu 18.04, це libsensors4 , версія 3.4.0-4. Це та сама бібліотека, яка зчитує температуру, яку можна побачити в sysкаталозі.

Підсумовуючи це, сенсори - хороший вибір. Щоб постійно спостерігати за температурою, використовуйте

watch -n 1 sensors

Якщо ви хочете написати програму, вам слід поглянути на лібсенсори man 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 ° С.

Для безперервного перегляду використовуйте

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

У цьому каталозі ви також можете знайти інформацію про свої охолоджуючі (вентиляторні) пристрої та про те, як запрограмовані регулятори PID.

Я також хотів би зазначити, що деякий захист від перевищення температури кодується дуже апаратно (це гарна ідея), де дані розміщуються у ваших біологічних даних.


я знаю, що є програми, але я шукав спосіб вручну знайти th etemps

1
Що ви маєте на увазі під рукою? Все, що відбиває температуру, - це програми.
abu_bua

У мене немає термічної зони, все, що у мене є, охолоджують_device0 1 і 2, але вони не тримають темп файлів, тільки cur_state пристрій max_state підсистема живлення типу uevent

cur і max state - 0 і 10

Які саме thermal_zones? Мій 4-ядерний процесор Intel, здається, має єдиний thermal_zone( sensorsпроте, коректно перелічує всі 4 основні температури).
Гвінет

5

Встановіть Psensor ( psensor ) із сховищ Ubuntu за замовчуванням та налаштуйте Psensor для автоматичного відтворення попереджувального звуку всякий раз, коли температура перевищує визначену користувачем максимальну. Мета цього - дати вам почути попереджувальний звук до того, як система вимкнеться, не додаючи додаткові накладні додатки до вашої системи.

Psensor відображається на робочому столі як маленька піктограма термометра в області сповіщень у правому верхньому куті робочого столу поруч із годинником. Ви можете будь-коли клацнути правою кнопкою миші піктограму термометра, щоб відобразити температуру обладнання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.