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

nafanja
да, что то есть
[email protected] ~ # rdmsr 0x2ff
c00
[email protected] ~ # rdmsr 0x200
6

0x200 ... 0x20X - вроде бы регионы памяти
rdmsr 0x202 ….. 6
rdmsr 0x200 ….. ffc00005 (4290772997 - 4G)
rdmsr 0x2ff …… c00 (3072)
Предположу (хотя и не обязательно)
lscpu | grep 3072
L3 cache: 3072K

UPD - Вот поленишься заглянуть в DOC, теряешь кучу времени на поиск, да еще и не понимаешь - почему не получается.
А все просто - к данному типу регистров не применишь msr-tools. Ну хоть в этом разобрались, и то пошло на пользу.
Ошибки не исчезают с опытом - они просто умнеют
vasek
Предположу (хотя и не обязательно)
lscpu | grep 3072
L3 cache: 3072K
не угадал, нет в моем процессоре L3 cache )))

vasek
Ну хоть в этом разобрались, и то пошло на пользу.
тада
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
не угадал, нет в моем процессоре L3 cache )))
Да это не то, это связано с MTRR, но лучше проверять регистры 0x200 (202, 204, 206, 208, 20A, 20C, 20E)
Вывод rdmsr 0x200 (202, 204, 206, 208, 20A, 20C, 20E) должен совпасть (приближенно) с cat /proc/mtrr
Ошибки не исчезают с опытом - они просто умнеют
vasek
Вывод rdmsr 0x200 (202, 204, 206, 208, 20A, 20C, 20E) должен совпасть (приближенно) с cat /proc/mtrr
да, совпадают некоторые регистры
cat /proc/mtrr
reg00: base=0x000000000 (    0MB), size= 2048MB, count=1: write-back
reg01: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
reg02: base=0x0c0000000 ( 3072MB), size=  256MB, count=1: write-back


rdmsr 0x200
6
rdmsr 0x202
80000006
echo $(($((0x$(rdmsr 0x202) - 0x6)) / 1024 / 1024))
2048
rdmsr 0x204
c0000006
echo $(($((0x$(rdmsr 0x204) - 0x6)) / 1024 / 1024))
3072
по остальным регистрам 0
не понятно почему в регистре 0x200 = 0x6, по этому приходится вычитать это число из других регистров что бы было правильно.
но главный вопрос как преобразовать D18F3xA4 в адрес который можно было прочитать rdmsr.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
У меня совпадение полное (если не считать в 5 регионах не совпадение на 6 байт)
cat /proc/mtrr
reg00: base=0x0ffc00000 ( 4092MB), size=    4MB, count=1: write-protect
reg01: base=0x000000000 (    0MB), size= 2048MB, count=1: write-back
reg02: base=0x080000000 ( 2048MB), size= 1024MB, count=1: write-back
reg03: base=0x0be000000 ( 3040MB), size=   32MB, count=1: uncachable
reg04: base=0x0bd800000 ( 3032MB), size=    8MB, count=1: uncachable
reg05: base=0x100000000 ( 4096MB), size= 2048MB, count=1: write-back
reg06: base=0x180000000 ( 6144MB), size= 1024MB, count=1: write-back
reg07: base=0x1bf800000 ( 7160MB), size=    8MB, count=1: uncachable
Значения регистров (совпадение лучше смотреть по адресам)
sudo rdmsr 0x200 ……….. ffc00005
sudo rdmsr 0x202 ……….. 6
sudo rdmsr 0x204 ……….. 80000006
sudo rdmsr 0x206 ……….. be000000
sudo rdmsr 0x208 ……….. bd800000
sudo rdmsr 0x20A ……….. 100000006
sudo rdmsr 0x20C ……….. 180000006
sudo rdmsr 0x20E ……….. 1bf800000
И как писал выше, точного совпадения нет, есть небольшое отличие в 5 регионах на 6 байт
0x0ffc00000 - 0x0ffc00005, 0x000000000 - 0x000000006 и так далее
Чем обусловленно, не рабирался - все-таки это память, идет округление, а может причина и в другом ….. но это мелочь.

nafanja
по остальным регистрам 0
Сразу почему и не скажешь - информация о регионах в /proc/mtrr берется из регистров, в принципе количество регионов памяти должно совпадать в обоих случаях.

nafanja
главный вопрос как преобразовать D18F3xA4 в адрес который можно было прочитать rdmsr.
Это регистры PCI, информацию с них спомощью rdmsr не прочитаешь (rdmsr читает/пишет только в регистрах msr).
Обозначение D18F3 нужно сначала перевести в pci-addres, а затем смотреть по какому адресу в памяти это хранится и оттуда считать. Но не все можно считать из user-spаces, если не ошибаюсь, то есть один бит, в котором прописано (или 0 или 1) есть ли право считывать эту информацию. И если нет, то только из kernal-spaces (ring 0).
И спецы для считывания/записи такой информации пишут свои драйвера.
Ошибки не исчезают с опытом - они просто умнеют
vasek
И спецы для считывания/записи такой информации пишут свои драйвера.
ладно, благодарю за помощь, и как говорится: - "было интересно, но ничего не понятно :)"
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
В части
nafanja
и как говорится: - "было интересно, но ничего не понятно :)"
Мне это то же мало понятно, в моих силах только преобразовать обозначение D18F3 в pci-adres (0xC3), а вот как дальше, то же не понятно - так как это адресное пространство не является адресным пространством PCI устройств в обычном его понимании (размером 256 байт), а что то другое, связанное с адресным пространством cpu, с которым никогда дела не имел.
Так что здесь я чайник и не помощник.

Не знаток AMD, но затратив часть времени на изучение в части температурных измерений, попробую высказать свои предположения о неверных значениях температуры процессоров AMD - жалко потерять информацию, кто то будет искать и наткнется, возможно кому и пригодится.
Со времени развития процессоров AMD изменялась и методика расчета температуры cpu
1. Ранние модели (архитектура K8)
Temp = Трег - 49
2. Новые модели (архитектура K10 и выше)
Temp = Трег / 8
3. Новейшие модели (архитектура A8, A10 и другие)
Temp = Трег - Тmax ( конкретное значение Тmax нужно смотреть в datasheet)
Конкретную методику расчета для конкретного железа нужно уточнять в datasheet. И плюс к этому, многое зависит от конкретного используемого модуля.
Привожу выдержки значений температуры, приведенные в этом топике
Vadim
radeon-pci-0008
Adapter: PCI adapter
temp1: +6.0°C (crit = +120.0°C, hyst = +90.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
temp1: +6.2°C (high = +70.0°C) (crit = +80.0°C, hyst = +79.0°C)

it8620-isa-0228
Adapter: ISA adapter
temp1: +35.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
И как видно многое зависит от используемого модуля, в котором, думаю, забит свой метод расчета.
Вот так и хочется сказать, что если temp1= 6°C умножить на 8, то будет 48°C, ну очень реальная величина.
А вот для it8620 значение temp1: +35.0°C думаю низковато и, возможно, в регистре D18F3x64 забито производителем заниженное/завышенное Tmax.
ЭТО все предположение, могу и ошибаться, привел для размышлений.

UPD - для Intel все просто и методика расчета не менялась Temp = Трег - Tjunction .
К тому же при желании можно считать прямо из регистров, методику описал (для AMD считать значение регистра не представляется возможным, это не msr регистр).

EDIT 1 - если есть мнение, что это бред, напишите - я этот бред удалю (смотрю на это просто)
Ошибки не исчезают с опытом - они просто умнеют
Я не очень понял про msr регистр,не мой уровень,но нашёл температуру,примерно показывающюю температуру цпу,it8620-isa-0228 temp4.Для меня точности хватит,проблема в другом.
Включаю через какое-то время компьютер,температуру не показывает.Команда вывод sensors it8620-isa не показывает.
После sensors-detect всё восстанавливается,через время опять пропадает.Шо это может быть?
Может после обновления ядра пропадает?Не помню,обновлялось ядро или нет.
Linux Forever!
Vadim
Включаю через какое-то время компьютер,температуру не показывает.Команда вывод sensors it8620-isa не показывает.
После sensors-detect всё восстанавливается,через время опять пропадает.Шо это может быть?
Предположу, что не правильно делаешь, не загружается нужный модуль.
Не использую lm-sensors, но по памяти - все ли прописано в /etc/conf.d/lm_sensors? Иногда, раньше, приходилось прописывать загрузку модуля и в другом месте.
Сейчас, наверное, немного изменилось - читай Wiki. И, кстати, команда sensors -u вроде бы должна показать все загруженные модули, смотри что загружено. Если не загружен нужный модуль, прописывай.

Вопрос - неужели у AMD такая низкая температура, 35 град? - ниже чем у юзера?

EDIT 1 - у меня используется стандартный coretemp, входящий в ядро, а потому и не нужно его загружать и даже отсутствует файл /etc/conf.d/lm_sensors
zgrep CORETEMP /proc/config.gz
CONFIG_SENSORS_CORETEMP=m

sensors | grep coretemp
coretemp-isa-0000

lsmod | grep coretemp
coretemp 20480 0
Ошибки не исчезают с опытом - они просто умнеют
vasek,спасибо,посмотрю попозже.
vasek
Вопрос - неужели у AMD такая низкая температура, 35 град? - ниже чем у юзера?
это сразу после загрузки,потом до 50 градусов показывает.
Пробовал инфракрасным термометром прями на крышечке процессора-ещё немного меньше.
Понятно что показывает температуру крышки процессора а не кристала,но не думаю что там большая разница,кристал kaveri большой а проц почти новый.
И tdp проца 65 вт,там нечему грется.Специально подбирал себе чтобы со встроеным неплохим видео и не слишком мощный.
Linux Forever!
 
Зарегистрироваться или войдите чтобы оставить сообщение.