Понижение напряжения процессора Intel
Введение
Понижение напряжения
При правильной работе понижение напряжения питания процессора снижает его энергопотребление и нагрев без ущерба для производительности.
Но, если уровень напряжения установить слишком низким - это может привести к ошибке, сбою и перезагрузке.
Intel P-state vs cpufreq
"CPUfreq - также называемый масштабированием скорости процессора - это инфраструктура в ядре Linux, позволяющая масштабировать частоту процессора для экономии энергии." Документация Redhat.com
"intel_pstate является частью подсистемы масштабирования производительности процессора в ядре Linux (CPUFreq). Это драйвер масштабирования для Sandy Bridge и более поздних поколений процессоров Intel." Документация Kernel.org
Метод понижения напряжения зависит от того, какое "масштабирование" используется в вашем процессоре, Intel PState начинается со 2-го поколения Intel Core i3/5/7 (Sandy Bridge).
Метод / Программы / История
1. Для CPUfreq используется PHC, и метод хорошо документирован в Arch Wiki, я не буду заострять на нем внимание, так как у меня нет опыта работы с ним и нет оборудования для его получения.
2. Для PState метод появился в августе 2017 года linux-intel-undervolt, а вскоре после этого на python был написан софт linux-intel-undervolt-tool.
Понижение напряжения через PState
Описание метода
Я возьму пример снижения напряжения на 0,175 В: -0,175 В.
Для этого мне понадобится две команды, одна для CPU Core и другая для CPU Cache. (Ядро процессора и кэш разделяют уровень напряжения на моей машине, поэтому две команды вместо одной).
sudo wrmsr 0x150 0x80000011E9A00000 sudo wrmsr 0x150 0x80000211E9A00000
пояснение:
# wrmsr - это инструмент, используемый для записи значений в машинно-специфические регистры (MSR) процессора.
# Первое значение - номер регистра.
# Это всегда 0x150
# Второе значение - где и что мы в него пишем.
# 0x означает шестнадцатеричный.
# 80000 постоянна, значение неизвестно.
# X <- это индекс плоскости, он может быть (не исчерпывающим):
# 0 CPU Core
# 1 GPU
# 2 CPU Cache
# 1 постоянна, значение неизвестно.
# 1 write/read <- Я не знаю, что это значит.
# E9A00000 смещение, оно составляет -0,175 В после некоторого магического расчета.
# -175*1.024 = -179.2 -> -179
# 179 = 1011 0011
# -179 = 0100 1101 # инверсия битов+1 для получения отрицательного значения (дополнительный код).
# Биты, помеченные "c" - постоянное значение, помеченные "o" - вычисленное смещение.
# ccco oooo oooc cccc cccc cccc cccc cccc
# 1110 1001 1010 0000 0000 0000 0000 0000
# E 9 A 0 0 0 0 0
# 0xE9A00000
Программы
Модуль ядра
Для работы wrmsr необходимо включить модуль msr
modprobe msr
wrmsr/rdmsr
wrmsr предоставляется пакетом msr-tools в AUR.
Софт на python, о котором я упоминал ранее
Если вы не хотите делать расчеты самостоятельно или хотите автоматизировать понижение напряжения при загрузке, то попробуйте использовать linux-intel-undervolt-tool.
Он не очень активно используется и не доступен как пакет на данный момент он был форкнут https://github.com/hedgepigdaniel/linux-intel-undervolt-tool/ и доступен в AUR как linux-intel-undervolt-tool.
Мой беглый взгляд на файлы и поведение linux-intel-undervolt-tool:
/usr/bin/undervolt
# программа, написана на python
# если запустить без повышенных прав - это даст команду применить себя с wrmsr
# параметры:
'-gpu', type=int, help='Undervolt GPU by this amount of millivolts. Must be negative.'
'-cpu', type=int, help='Undervolt CPU by this amount of millivolts. Must be negative.'
'-config', type=str, help='Config file to load. Other flags has priority over -config.'
/etc/undervolt.json
# содержит параметры напряжения "cpu" и "gpu"
/usr/lib/systemd/system/undervolt.service
# запуск и автозапуск службы systemd, которая перезапускается после suspend/hibernate/hybrid-sleep с: -config /etc/undervolt.json
# загрузка модуля msr при включении системы
/etc/modules-load.d/undervolt-msr.conf
Оборудование, о котором известно, что оно работает
| Manufacturer | Model | CPU | Info source |
|---|---|---|---|
|
MSI |
GS40 6QE |
I5-6300HQ |
https://forum.manjaro.org/t/undervolt-recent-intel-cpu/41948/5 (Это автор страницы wiki) |
|
DELL |
XPS 15 9560 |
I7-?????? |
https://github.com/xdever/linux-intel-undervolt-tool (Автор linux-intel-undervolt-tool) |
|
??? |
??? |
I7-6700HQ |
https://github.com/mihic/linux-intel-undervolt (автор метода понижения напряжения) |
Не стесняйтесь сообщать сюда товарищу "@Yoy0" если хотите, чтобы я пополнил этот список.