Правильное определение температуры процессора (28.02.2015). Печать
2015 - Февраль
28.02.2015 18:53
Save & Share

Существуют десятки программ измерения температуры процессора - и все они показывают разную температуру. Предпринята попытка не столько выбрать правильную программу, сколько разобраться: почему они так врут, аж до десятков градусов.

Сначала я задумался как пользователь: почему эти программы врут. Ведь в процессоре стоит один датчик, он посылает в материнскую плату единственное число: температуру. Все программы берут информацию с этого датчика и преобразуют ее при помощи каких-то формул/коэффициентов. Значит, разница только в алгоритме преобразования двоичной информации с датчика. А так как исходные коды программ есть коммерческая тайна и авторское право - единственный способ выбрать правильную программу - протестировать их все.

Далее я задумался как сисадмин: возьму температуру процессора из BIOS в режиме простоя, в Windows запущу все программы по очереди - и буду сравнивать их показания с показателем BIOS (при этом отключив все фоновые программы и процессы). Однако кто сказал, что температура BIOS - эталонная? Значит, я должен взять высокоточный мультиметр за 15000, поставить термопару на крышку процессора, прижать ее радиатором - и сравнить показания BIOS с мультиметром.

Далее я задумался как программист: зачем мне связываться с BIOS, если я могу получить информацию о температуре процессора напрямую из операционной системы. Использую инструментарий Windows Management Instrumentation (WMI), получаю свойство CurrentTemperature класса MSAcpi_ThermalZoneTemperature - и дело в шляпе.

А потом понеслась:
- программа с WMI не показала ровным счетом никакой информации по температуре;
- выяснилось, что датчик вовсе не один (и у них разное назначение), поэтому замер температуры на крышке процессора не даст никаких ответов;
- выяснилось, что существует не один, а несколько способов получения информации с датчиков, поэтому среди них могут быть и корректные способы, и некорректные (WMI-то не сработал).

Типы датчиков на процессоре:
- температура крышки (оболочки) процессора;
- температура ядра процессора (может достигать 100 градусов - и это не будет считаться критической ситуацией). Ядро процессора горячее оболочки процессора на десятки градусов (истинный источник температуры малого объема). В свою очередь, радиатор системы охлаждения холоднее оболочки процессора (огромный объем с малой площадью соприкосновения). Поэтому нельзя судить о температуре оболочки процессора, трогая радиатор рукой: даже с отключенным вентилятором радиатор будет иметь меньшую температуру.

Аппаратные способы снятия показания с датчиков:
- датчик на материнской плате, показывающий температуру крышки процессора. Крышка процессора металлическая, считаем температуру ее равномерной (вот оно, значение, отображаемое в BIOS?);
- цифровой датчик процессора (DTS), показывающий температуру ядра (по датчику на ядро). Присутствует у Intel, начиная с процессоров Intel Core 2 и имеет свои особенности. Чем меньше температура ядра - тем больше его абсолютная погрешность;
- датчик корпуса процессора на самом процессоре (околосокетный), пишут, что доверять ему вообще не стоит.

Программные способы снятия показания с датчиков:
- WMI есть инструмент посредника (Windows) между датчиком (каким же?) температуры и конечным пользователем. Так как инструмент не обновляется уже много лет, он может вообще информацию с процессора не снять (и тут уже зависит от железа: материнской платы и процессора). Из-за множества вопросов и нестыковок данный функционал отбрасывается. Из этого следует, что программы измерения температуры процессора используют не WMI, а другие алгоритмы получения информации (речь о температуре оболочки процессора);
- внешний драйвер WinRing как инструмент для входа в ядро процессора (получение температуры ядер);
- другие неизвестные мне способы.

А потом я задумался как электроник-теоретик и физик-теоретик. Что покажет мультиметр, если померить напряжение до резистора и после него - падение напряжения на нем. То есть резистор здесь в роли датчика, показывающего разницу между напряжениями на своих входе и выходе. Покажет он это, если цепь замкнута, есть разность потенциалов, протеканию тока в цепи ничего не мешает. Проведем аналогию с термопарой: разность потенциалов в этом случае есть разница температур радиатора и процессора, большая теплопроводность как отсутствие препятствий при протекании тепла, резистор есть термопара. То есть она покажет разницу между температурами крышки процессора и радиатора (или среднее арифметическое; сейчас споры на форуме идут - но без разницы: все равно не то). Значит я должен найти ещё один высокоточный мультиметр и ещё одну термопару, чтобы одновременно контролировать и температуру радиатора - а это уже накладно. А запускать процессор без радиатора (теплопроводность воздуха, обтекающего термопару, мала) - риск остаться без процессора за считанные секунды.
Обратная аналогия. Датчик материнской платы изолирован в какой-то полости от потерь тепла, как и датчики ядер процессора, как и градусник под мышкой (объект измерения горячее датчика, теплопроводность объектов рядом с датчиком мала - датчик накачивается теплом, и его температура становится равна температуре измеряемого объекта).

Итоги:
- анализ программных способов снятия температуры с датчиков показал две проблемы. Нет доверия ни одной программе (а следовательно - ни одному обзору с их использованием). Возможно только снятие температуры с помощью высокоточных аналоговых приборов: мультиметр с термопарой, датчик типа TMP37 с инструментом снятия его показаний и так далее - но с учетом законов физики;
- анализ датчиков процессора показал их несовершенство, поэтому приоритет делается на крышку (оболочку) процессора. Приходится считать эталонным параметр BIOS, т.к. датчик аналоговый и прижат вплотную к процессору (последнее, кстати, так и не смог доказать нормально);
- получение достоверной температуры процессора при помощи аналоговых приборов накладно. Поэтому адекватных способов получения достоверной температуры процессора для рядового потребителя не существует.

Обновлено ( 11.04.2015 15:39 )