Как контролировать напряжение VCore
Я построил новый ПК и, будучи дешевым, я не купил Windows, поэтому я впервые пробую Linux с Ubuntu 16.04. Я понимаю, что lm-sensor - это стандартный метод доступа к информации, которую я хочу, - это просто напряжение, особенно VCore. Я хотел бы иметь возможность контролировать напряжение VCore для облегчения разгона (поскольку моя материнская плата не поддерживает фиксированное напряжение, я не могу отслеживать опасные напряжения с помощью автоматического VID).
У меня установлены следующие соответствующие пакеты: lm-sensor (v. 1:3.4.0-2), libsensors4 (v. 3:4.0-2), libsensors-applet-plugin0 (v. 3.0.0+git5-0.1ubuntu1)
Процессор i5-6600K и материнская плата ASRock Z170A-X1/3.1
Я побежал sensors-detect
и единственный датчик, который это нашло, был coretemp. Это было добавлено в мои модули, и оно отлично работает для температур. Вот пример выходных данных от работающих датчиков:
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0: +47.0°C (high = +80.0°C, crit = +100.0°C)
Core 0: +46.0°C (high = +80.0°C, crit = +100.0°C)
Core 1: +47.0°C (high = +80.0°C, crit = +100.0°C)
Core 2: +34.0°C (high = +80.0°C, crit = +100.0°C)
Core 3: +45.0°C (high = +80.0°C, crit = +100.0°C)
Я хотел бы достичь стандартного поведения (больше информации), например, показанного здесь или здесь.
Я подозреваю, что для доступа к напряжению необходим дополнительный датчик, потому что большинство руководств показывают sensors-detect
в результате добавляется больше модулей, чем просто coretemp. В моем случае было найдено одно неизвестное устройство, которое, как он подозревает, могло быть датчиком....
Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no): y
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor/ITE'... No
Trying family `SMSC'... No
Trying family `VIA/Winbond/Nuvoton/Fintek'... Yes
Found unknown chip with ID 0xd121
(logical device B has address 0x290, could be sensors)
Probing for Super-I/O at 0x4e/0x4f
Trying family `National Semiconductor/ITE'... No
Trying family `SMSC'... No
Trying family `VIA/Winbond/Nuvoton/Fintek'... No
Trying family `ITE'... No
я использовал dmesg
посмотреть на упомянутый адрес 0x290 в кольцевом буфере ядра и найти эту строку, что в большинстве случаев мне непонятно, но я поставил здесь для вашей информации.
[ 0.206389] system 00:00: [io 0x0290-0x029f] has been reserved
Кроме того, у меня есть другие приложения, которые ограничены в информации, которую они могут показать. Например, I-NEX, который в некоторой степени похож на CPU-Z в Windows (предложите что-нибудь лучше, если вы это знаете), ограничен базовыми данными CPUID, такими как строка идентификатора процессора, литография, тип сокета, поддерживаемые функции и т. Д. Ничего сообщается для CPU VCore и других полей. Тактовая частота, скорость BLCK, множитель, турбоклок сообщаются как значения запаса независимо от моих настроек разгона BIOS (неверно, так как я могу контролировать скорость процессора с помощью System Monitor). Подобные инструменты, вероятно, все основаны на lm-сенсорах, которые, я думаю, являются корнем моей проблемы, так что это не слишком удивительно.
Я также пытался запустить CPU-Z с использованием WINE, но это приводит к по существу той же ситуации: показывает основные данные CPUID, но не более подробные данные датчиков, которые я ищу. Это происходит после того, как во время инициализации произошла ошибка: код ошибки 0x2(2).
Это просто случай с неподдерживаемой материнской платой? Если да, будет ли когда-либо добавлена поддержка? Есть ли способ, которым я мог бы вручную добавить поддержку? Есть ли альтернатива lm-сенсорам? Есть ли другой способ, например, вручную приблизиться к аппаратному уровню и каким-то образом получить доступ к напряжению через bash? Стоит ли просто переустанавливать разные версии / дистрибутивы? Если так, я обязательно потеряю эту установку и ее файлы?
1 ответ
Вы можете контролировать напряжение ядра на самых последних (SNB и новее) процессорах Intel с помощью следующих 1:
watch -n1 'echo "scale=2; $(sudo rdmsr 0x198 -u --bitfield 47:32)/8192" | bc'
Разбивая это:
sudo rdmsr 0x198 -u --bitfield 47:32
Это считывает MSR_PERF_STATUS MSR и извлекает биты с 32 по 47 в десятичном формате, которые содержат напряжение ядра:
Затем мы передаем это в
bc
чтобы разделить его на 8192:
echo "scale=2; $(...)/8192" | bc
В
scale=2
указывает 2 десятичных разряда, так как значение по умолчанию 0 всегда будет показывать вам 1 В!
Наконец, мы передаем все это
watch -n1
который многократно выполняет команду (раз в секунду) и показывает результат. Если вы хотите получить только напряжение, вам просто нужна часть в одинарных кавычках.
1 После установки
msr-tools
, что необходимо для
rdmsr
команда.
Wine не позволит вам добраться до кольца вашего процессора. Место, где могут быть выполнены инструкции привилегий.
Linux предоставляет модуль ядра msr.ko, который позволяет считывать / записывать конкретные регистры модели, описанные в Руководствах разработчика программного обеспечения Intel Architectures. То же самое с AMD в BIOS и Руководство разработчика ядра
https://software.intel.com/en-us/articles/intel-sdm
http://developer.amd.com/resources/developer-guides-manuals/
К счастью, для 6600K вы можете найти информацию о напряжении в его спецификациях. PCI будет запрашиваться для получения значений.
Вы будете программировать алгоритмы с помощью регистров MSR и листьев инструкции CPUID, чтобы получить коэффициенты Turbo процессора, и оценивать BCLK с двумя чтениями TSC, сэмплированными с интервалом.
Турбо частота является произведением отношения и базовых часов
Я запрограммировал CoreFreq, который рядом с vcore будет отображать частоты и состояния простоя. Не стесняйтесь копать алгоритмы в исходном коде: