Понижение напряжения процессора Intel

Revision as of 05:42, 24 January 2023 by Krotesk (talk | contribs)
Other languages:
English • ‎Türkçe • ‎русский

Введение

Понижение напряжения

При правильной работе понижение напряжения питания процессора снижает его энергопотребление и нагрев без ущерба для производительности.

Но, если уровень напряжения установить слишком низким - это может привести к ошибке, сбою и перезагрузке.


Предупреждение
Это не тривиальная вещь, используемое программное обеспечение может физически повредить Ваш компьютер при установке неправильных значений.

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 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.

        # Биты, помеченные "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, о котором я упоминал ранее ===. Если вы не хотите делать расчеты самостоятельно или хотите автоматизировать undervolt при загрузке, то попробуйте использовать: https://github.com/xdever/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
/etc/modules-load.d/undervolt-msr.conf
  # загрузка модуля msr при включении системы

Оборудование, о котором известно, что оно работает

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.