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

Из дословного перевода doc все-таки следует, что если температура cpu не превышает max, то истинная температура будет равна Tctl_max - Tctl, где Tctl и есть значение из регистра D18F3xA4 [CurTmp], а вот CurTmp (current temperature) и находится в битах 31:21
Tctl - это значение контроля температуры процессора, используемое для управления температурой процессора. Tctl доступен через D18F3xA4 [CurTmp]. Tctl - это температура в своем собственном масштабе, соответствующая требованиям охлаждения процессоров. Поэтому Tctl не представляет температуру, которая могла бы быть измерена на матрице или корпусе процессора. Вместо этого он указывает температуру процессора относительно максимальной рабочей температуры, Tctl, max. Tctl, max указывается в паспорте мощности и температуры. Tctl определяется следующим образом для всех частей:

A: Для Tctl = Tctl_max до 255,875: температура детали [Tctl - Tctl_max] выше максимальной рабочей температуры. Процессор может предпринять корректирующие действия, которые влияют на производительность, например HTC, для поддержки возврата в диапазон Tctl B.

B: Для Tctl = 0 до Tctl_max - 0,125: температура детали [Tctl_max - Tctl] ниже максимальной рабочей температуры.
Но вот почему считывется ноль, не понятно - или я чего то не допонимаю.

EDIT 1 - Предположить можно только одно - не знаю регистры AMD и не правильно считываем битовую карту - судя по описанию bits 31:21, уж очень много информации приводится в Description, а вот как правильно считать, хрен знает. Не пониманию я почему такое большое обозначение регистра у AMD - D18F3xA4. Кто бы прояснил этот момент - так и должно быть? или как правильно считывать данные из таких регистров. Вообщем здесь я НОЛЬ и ничего предложить не могу.

И, имхо, проблема выливается в то, как и чем считать нужные данные из регистра AMD
Ошибки не исчезают с опытом - они просто умнеют
nafanja, попробуй считать так rdmsr F3xA4 -f 31:21

EDIT 1 - вот что значит никогда не имел дела с регистрами AMD и затупил. Насторожило, что большое обозначение, а обратится к doc было лень.
Насколько я понял AMD обозначает регистры по типу D18F3xA4, где D18 - device18h, F3 - function 3, A4 - address A4h.
Но желательно проверить, правильно ли я понял, а потому помониторь вывод rdmsr F3xA4 -f 31:21


EDIT 2 - Опять я не прав - у меня на Intel понимает и с D18 и без D18
rdmsr F3xA4 -f 32:00
1f
rdmsr D18F3xA4 -f 32:00
1f
Ошибки не исчезают с опытом - они просто умнеют
Провел расширенный поиск и пришел к следующему выводу - практически все, кто желает считать температуру cpu AMD вручную, сталкиваются с тем, что в данном регистре читают НОЛЬ. Много вопросов и ноль ответов, а если кто из спецов, разбирающийся в этом и знает, то молчит.
Пришла одна идея в части обозначения регистров, которую бы проверить.
nafanja, прошу промониторить регистр C3xA4 (rdmsr C3xA4 -f 31:21),читается ли что из него, а если читается, то меняется ли значение при нагрузке.
Ошибки не исчезают с опытом - они просто умнеют
vasek
nafanja, прошу промониторить регистр C3xA4 (rdmsr C3xA4 -f 31:21),читается ли что из него, а если читается, то меняется ли значение при нагрузке.
так же ничего не читается.

провел маленький эксперимент:
rdmsr 0
0
root@b ~ # rdmsr 1
0
root@b ~ # rdmsr 2
rdmsr: CPU 0 cannot read MSR 0x00000002
root@b ~ # rdmsr данунах
0
ответы rdmsr либо "0" либо "CPU 0 cannot read MSR"
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
ответы rdmsr либо "0" либо "CPU 0 cannot read MSR"
Даже не знаю что и подумать - то ли msr-tools (rdmsr) не работает с регистрами msr AMD, то ли не дает считать из-за прав доступа (что мало вероятно), то ли еще что.
Уже даже и мудрил с pci_adress cpu (вместо D18F3 использовать C3). Все бесполезно. То ли AMD чего то не договаривает. Похоже из-за этого и все неточности с выводом температуры. Вообщем взбаломутил я только тебя - не обижайся. Но время от времени буду думать на эту тему, даже самому стало интересно.

EDIT 1 - а не пытался прочитать другие регистры, указанные в этом datasheet? Хотя, похоже будет тоже самое - одни нули.

EDIT 2 - сейчас наткнулся на фразу - температуру через MSR-регистры читать можно только на Intel-овских процессорах - правда или нет, хрен знает ... но, имхо, не верю, используя ассемблер, думаю прочитать можно, но для использования в работе это уже не то
Ошибки не исчезают с опытом - они просто умнеют
Через ACPI не пробовали читать? Чего сразу по регистрам шарить?
Velesich, простых путей не ищем...
а вообще интересно было получить информацию на низком уровне.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
vasek
EDIT 1 - а не пытался прочитать другие регистры, указанные в этом datasheet? Хотя, похоже будет тоже самое - одни нули.
ага, одни нули.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
ага, одни нули.
Почитал немного о регистрах AMD и, если бы почитал сразу, то стало бы понятно, что нечего лезть читать rdmsr регистры типа D18F3xA4.
Привожу описание этого типа регистров ... PS - исправил, не то скопировал
DZFYxXXX: PCI-defined configuration space at bus 0; Z specifies the PCI device address in hex; XXX specifies the byte address of the configuration register (this may be 2 or 3 digits) in hex; Y specifies the function number. For example, D18F3x40 specifies the register at bus 0, device 18h, function 3, address 40h. Some registers in D18F2xXXX have a _dct[1:0] mnemonic suffix, which indicates there is one instance per DRAM controller (DCT). The DCT instance is selected by DCT Configuration Select[DctCfgSel] (D18F1x10C[0]).
И в части регистров MSR
MSRXXXX_XXXX: model specific registers; XXXX_XXXX is the MSR number in hex. This space is accessed through x86-defined RDMSR and WRMSR instructions.
Описание всех регистров MSR для AMD A10-7850K начинается на стр.565
3.19 MSRs - MSR0000_xxxx
See 3.1 Register Descriptions and Mnemonics for a description of the register naming convention. MSRs are accessed through x86 WRMSR and RDMSR instructions.
Обрати внимание - в описании регистров MSR указана rdmsr - а потому стало интересно, будут ли читаться эти регистры, например, связанные с памятью
rdmsr 0x200 и rdmsr 0x2ff
Ошибки не исчезают с опытом - они просто умнеют
vasek
Обрати внимание - в описании регистров MSR указана rdmsr - а потому стало интересно, будут ли читаться эти регистры, например, связанные с памятью
rdmsr 0x200 и rdmsr 0x2ff
да, что то есть
root@b ~ # rdmsr 0x2ff
c00
root@b ~ # rdmsr 0x200
6
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.