Существуют десятки программ измерения температуры процессора - и все они показывают разную температуру. Предпринята попытка не столько выбрать правильную программу, сколько разобраться: почему они так врут, аж до десятков градусов.
Сначала я задумался как пользователь: почему эти программы врут. Ведь в процессоре стоит один датчик, он посылает в материнскую плату единственное число: температуру. Все программы берут информацию с этого датчика и преобразуют ее при помощи каких-то формул/коэффициентов. Значит, разница только в алгоритме преобразования двоичной информации с датчика. А так как исходные коды программ есть коммерческая тайна и авторское право - единственный способ выбрать правильную программу - протестировать их все. Далее я задумался как сисадмин: возьму температуру процессора из 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, т.к. датчик аналоговый и прижат вплотную к процессору (последнее, кстати, так и не смог доказать нормально); - получение достоверной температуры процессора при помощи аналоговых приборов накладно. Поэтому адекватных способов получения достоверной температуры процессора для рядового потребителя не существует. |