Понижение напряжения процессора 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 (https://wiki.archlinux.org/index.php/PHC), я не буду заострять на нем внимание, так как у меня нет опыта работы с ним и нет оборудования для его получения.
2. Для PState метод появился в августе 2017 года (https://github.com/mihic/linux-intel-undervolt), а вскоре после этого был написан софт на python (https://github.com/xdever/linux-intel-undervolt-tool).
PState undervolt
Описание метода
Я возьму пример снижения напряжения на 0,175 В:-0,175 В.
To achieve that I will need two commands, one for CPU Core and the other for CPU Cache. (CPU Core and Cache share the voltage plane on my machine, that's why two commands instead of one).
sudo wrmsr 0x150 0x80000011E9A00000 sudo wrmsr 0x150 0x80000211E9A00000
explanation:
# wrmsr is a tool used for writing values to a CPU's machine specific registers (MSR). # First value is the register number. # It's always 0x150 # Second value is where and what we write in it. # 0x mean hexadecimal. # 80000 is constant, meaning is unknown. # X <- It's the plane index, it can be (not exhaustive): # 0 CPU Core # 1 GPU # 2 CPU Cache # 1 is constant, meaning is unknown. # 1 write/read <- I don't know what that mean. # E9A00000 offset, it's -0.175V after some magic calculation. # -175*1.024 = -179.2 -> -179 # 179 = 1011 0011 # -179 = 0100 1101 # invert bits+1 to get negative value. # Bits tagged with "c" are constant value, bits tagged with "o" are the calculated offset. # 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
Software
kernel module
You need to have module msr enabled for wrmsr to work
modprobe msr
wrmsr/rdmsr
wrmsr is provided by package msr-tools in AUR
The python soft I mentioned earlier
If you don't want to make the calculation yourself or want to automate undervolt at boot you can use: https://github.com/xdever/linux-intel-undervolt-tool
It's not heavily used and not available as a package for now it got forked https://github.com/hedgepigdaniel/linux-intel-undervolt-tool/ and is available in AUR as linux-intel-undervolt-tool.
My quick look at linux-intel-undervolt-tool files and behaviour:
/usr/bin/undervolt # program written in python # if run without elevated right it give command to apply yourself with wrmsr # options: '-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 # contain voltage parameters "cpu" and "gpu" /usr/lib/systemd/system/undervolt.service # a systemd service enabled and started which restart after suspend/hibernate/hybrid-sleep with: -config /etc/undervolt.json /etc/modules-load.d/undervolt-msr.conf # load msr module at startup
Hardware known to work
Manufacturer | Model | CPU | Info source |
---|---|---|---|
MSI |
GS40 6QE |
I5-6300HQ |
https://forum.manjaro.org/t/undervolt-recent-intel-cpu/41948/5 (This wiki page author) |
DELL |
XPS 15 9560 |
I7-?????? |
https://github.com/xdever/linux-intel-undervolt-tool (linux-intel-undervolt-tool author) |
??? |
??? |
I7-6700HQ |
https://github.com/mihic/linux-intel-undervolt (undervolt method author) |
Feel free to report here with "@Yoy0" if you want me to append this list.