Статья поможет дополнительно снизить энергопотребление и нагрев вашего компьютера с помощью Processor Hardware Control.

## Contents

*   [1 Введение](#.D0.92.D0.B2.D0.B5.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5)
    *   [1.1 Поддерживаемые процессоры](#.D0.9F.D0.BE.D0.B4.D0.B4.D0.B5.D1.80.D0.B6.D0.B8.D0.B2.D0.B0.D0.B5.D0.BC.D1.8B.D0.B5_.D0.BF.D1.80.D0.BE.D1.86.D0.B5.D1.81.D1.81.D0.BE.D1.80.D1.8B)
        *   [1.1.1 Intel](#Intel)
        *   [1.1.2 AMD](#AMD)
*   [2 Установка необходимого](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D0.BD.D0.B5.D0.BE.D0.B1.D1.85.D0.BE.D0.B4.D0.B8.D0.BC.D0.BE.D0.B3.D0.BE)
    *   [2.1 Работа с драйвером](#.D0.A0.D0.B0.D0.B1.D0.BE.D1.82.D0.B0_.D1.81_.D0.B4.D1.80.D0.B0.D0.B9.D0.B2.D0.B5.D1.80.D0.BE.D0.BC)
*   [3 Выбор напряжения](#.D0.92.D1.8B.D0.B1.D0.BE.D1.80_.D0.BD.D0.B0.D0.BF.D1.80.D1.8F.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F)
*   [4 Окончательная настройка](#.D0.9E.D0.BA.D0.BE.D0.BD.D1.87.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.B0.D1.8F_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0)
*   [5 Автоматическая регуляция для процессоров AMD](#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B0.D1.8F_.D1.80.D0.B5.D0.B3.D1.83.D0.BB.D1.8F.D1.86.D0.B8.D1.8F_.D0.B4.D0.BB.D1.8F_.D0.BF.D1.80.D0.BE.D1.86.D0.B5.D1.81.D1.81.D0.BE.D1.80.D0.BE.D0.B2_AMD)
*   [6 Ссылки](#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8)

## Введение

**Примечание:** Английская версия этой статьи немного отличается: в ней не учтены некоторые детали касательно драйвера управлением частотой процессора.

PHC (Processor Hardware Control) - это патч для драйвера управления частотой процессора (например для таких как *acpi-cpufreq* или *powernow-k8*). Он добавляет функцию произвольного изменения напряжения питания процессора, если процессор, конечно, такую функцию поддерживает. В контексте данной статьи существует термин *андервольтинг* (undervolting) - он описывает разумное понижение напряжения питания процессора на низких частотах с целью экономии энергии. Понижение питающего напряжения снижает энергопотребление и тепловыделение, но может снизить также и стабильность системы, так что данная тема должна быть интересна в первую очередь отчаянным владельцам ноутбуков.

Гики могут также вспомнить [закон Джоуля-Ленца](https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%94%D0%B6%D0%BE%D1%83%D0%BB%D1%8F_%E2%80%94_%D0%9B%D0%B5%D0%BD%D1%86%D0%B0). Q=(U/R)•Rt, где Q - тепловыделение, U - напряжение. Из формулы видно, что незначительное уменьшение U позволяет значительно (в геометрической прогрессии за счет квадрата U/R) уменьшить Q.

Если вы не сталкивались с таким понятием как [масштабирование частоты](/index.php/CPU_Frequency_Scaling_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "CPU Frequency Scaling (Русский)") и пакетом [Cpufrequtils](https://www.archlinux.org/packages/?name=Cpufrequtils), то самое время это сделать - это более простые, распространенные и эффективные методы, которые следует применять в первую очередь. Данная статья описывает хорошее дополнение к этим методам, но отнюдь не замену.

### Поддерживаемые процессоры

PHC поддерживает два наиболее распространённых процессорных семейства: Intel и AMD. Информацию об имеющемся процессоре вы можете получить выполнив `$ cat /proc/cpuinfo`.

#### Intel

Свежая информация из официальной Wiki: [Intel Processors](http://www.linux-phc.org/wiki/doku.php?id=intel_processors)

*   Mobile Centrino
*   Atom (N2xx)
*   Core / Core2 (T and P Series)
*   Core i (tested on Core i3 550)

#### AMD

Свежая информация из официальной Wiki: [AMD K8 Processors](http://www.linux-phc.org/wiki/doku.php?id=amd_k8_processors)

**Примечание:** Существует пакет [cpupowerd](https://aur.archlinux.org/packages/cpupowerd/), который может автоматически управлять частотой и питанием процессоров AMD-K8

K8 series:

*   AMD X2 processors
*   AMD Turion64 processors
*   Family 15 Turion64 X2 processors
*   Opterons that support C'nQ?
*   AMD Neo processors

## Установка необходимого

В зависимости от процессора на борту, установите [phc-intel](https://aur.archlinux.org/packages/phc-intel/) или [phc-k8](https://aur.archlinux.org/packages/phc-k8/) AMD-K8 из пользовательского репозитория [AUR](/index.php/AUR "AUR"). Теперь, после установки потребуется пропатчить модуль. После серьёзного обновления ядра (модуля), его придется патчить заново.

Также установите пакет [linux-headers](https://www.archlinux.org/packages/?name=linux-headers) и/или [linux-lts-headers](https://www.archlinux.org/packages/?name=linux-lts-headers), чтобы патч и компиляция нового модуля стали возможными. После этого запустите:

```
# /etc/rc.d/phc-intel setup
или
# /etc/rc.d/phc-k8 setup

```

После чего добавьте "acpi-cpufreq" (для Intel) или "powernow-k8" (для процессоров AMD-K8) в секцию модулей вашего [rc.conf](/index.php/Rc.conf "Rc.conf").

**Примечание:** Для процессоров AMD вы можете использовать модуль phc-k8 вместо powernow-k8, но тогда, после загрузки модуля не будет изменятся напряжение по умолчанию, на указанное в файле /etc/conf.d/phc-k8\. Для того, чтобы система подхватила напряжение из этого файла вам придется дополнительно запускать демон phc-k8.
 `# nano /etc/rc.conf` 
```
# HARDWARE
# --------
MODULES=(powernow-k8 fuse vboxdrv)
```

### Работа с драйвером

Перезагрузите компьютер (если уже добавили его в [rc.conf](/index.php/Rc.conf "Rc.conf")) или загрузите модуль вручную: `# modprobe acpi-cpufreq` или `# modprobe powernow-k8`. После этого можно понаблюдать за работой драйвера, отфильтровав его сообщения:

```
$ dmesg | grep k8

```

Ошибки могут свидетельствовать о несовместимости с вашим процессором, неверным драйвером или ошибками в компиляции. Неверно установленные напряжения могут давать ошибки уже при загрузке модуля во время старта системы.

В `/sys/devices/system/cpu/cpu0/cpufreq/` должны появится новые файлы, начивающиеся с "phc_". Проверим, работает PHC или нет. Команда должна возвратить пары значений FID:VID, в противном случае, ваш процессор видимо не поддерживается. Вы должны увидеть пары множителей, где FID соответствует определённой частоте, а VID (число после двоеточия) напряжению питания. Подразумевается именно соответствие, а не совпадение - современные процессоры работают от напряжений менее пяти вольт.

```
$ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
11:18 10:19 8:20 0:30

```

Попробуйте установить напряжения вручную, например:

```
# echo 18 19 20 33 > /sys/devices/system/cpu/cpu0/cpufreq/phc_vids

```

Теперь здесь должны быть ваши значения VID:

```
$ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
11:18 10:19 8:20 0:33

```

## Выбор напряжения

Существует не вполне здоровый способ для определения лучших значений. Это скрипт [linux-phc-optimize](https://aur.archlinux.org/packages/linux-phc-optimize/). В процессе работы процессор будет максимально загружен, а напряжение питания будет понижаться, что приведет к краху системы ("замораживание"). Скрипт определит критические значения и прибавит к ним два (`x+2=stable`) для стабильности. Запустите его несколько раз для получения всех напряжений. Результаты будут записаны в файл `~/phc_tweaked_vids`.

## Окончательная настройка

После компиляции модуля (см. выше) и определения минимального достаточного для стабильной работы напряжения, добавьте его в файл /etc/conf.d/phc-intel или /etc/conf.d/phc-k8\. В примере приведены экспериментально определённые напряжения для процессора [AMD Turion 64 X2 Mobile Tecnology TL-58](http://www.cpu-world.com/CPUs/K8/AMD-Turion%2064%20X2%20Mobile%20technology%20TL-58%20-%20TMDTL58HAX5DC.html).

```
VIDS="21 23 24 34"

```

Существует также инструмент для настройки [phctool-svn](https://aur.archlinux.org/packages/phctool-svn/), имеющий графический интерфейс.

Теперь, после загрузки модуля, будет выставляться указанный набор напряжений, соответствующих разным частотам работы процессора. Если у вас установлен и настроен [Cpufrequtils](https://www.archlinux.org/packages/?name=Cpufrequtils) (а лучше в связке с [LMT](/index.php/Laptop_Mode_Tools_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Laptop Mode Tools (Русский)")), то никакой дополнительной настройки не потребуется: частота будет меняться, как и раньше, в то время как энергопотребление и тепловыделение уменьшатся за счет пониженного напряжения питания.

Самое время перезагрузится и проверить работу драйвера. Выполните, чтобы узнать текущие напряжения:

```
$ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_vids

```

Проверьте работу демона Cpufrequtils, если таковой имеется. Команда, кроме всего прочего выведет действющий гувернер и текущую частоту работы процессора.

```
$ cpufreq-info

```

## Автоматическая регуляция для процессоров AMD

Как было сказано выше, владельцы процессоров AMD могут использовать альтернативный (замена [Cpufrequtils](https://www.archlinux.org/packages/?name=Cpufrequtils)) демон [cpupowerd](https://aur.archlinux.org/packages/cpupowerd/) для автоматического контроля частоты и напряжением процессора. Если вы уверены, что не хотите использовать [Cpufrequtils](https://www.archlinux.org/packages/?name=Cpufrequtils), то выполните следующие шаги. Для начала любым удобным способом установите [cpupowerd](https://aur.archlinux.org/packages/cpupowerd/). После установки вы можете обратиться к документации на английском, например, выполнив `less /usr/share/cpupowerd/README`.

Теперь потребуется сгенерировать конфигурационный файл. Вы должны заранее загрузить драйвер управления питанием и частотой процессора. Кроме того, возможно, потребуется дополнительно загрузить модуль **msr**.

```
# modprobe powernow-k8
# modprobe msr

```

Если описанное выше верно, самое время приступить к генерации конфигурационного файла.

```
# cpupowerd -a /etc/cpupowerd.conf

```

После чего появится файл /etc/cpupowerd.conf с примерно таким содержанием:

```
800 1.1500
1600 1.1500
1800 1.1500
1900 1.1500

```

Слева указаны доступные частоты в МГц, а справа, соответственно, подаваемое на процессор напряжение питания, при работе на такой частоте. Вы можете закомментировать (добавить знак `#` перед) ненужные строки, тогда эти частоты использоваться демоном в процессе работы не будут.

Не забудте добавить демон **cpupowerd** в секцию DAEMONS файла [rc.conf](/index.php/Rc.conf "Rc.conf"), а также необходимые модули:

 `/etc/rc.conf` 
```
MODULES=(msr powernow-k8 cpufreq_userspace)
DAEMONS=(cpupowerd)
```

Чтобы посмотреть текущее состояние процессора, выполните `# cpupowerd -s`.

## Ссылки

*   [Домашняя страница проекта PHC](http://www.linux-phc.org/)
*   [PHC wiki](http://www.linux-phc.org/wiki/doku.php)