Для Linux отсутствует официальная программа для андервольтинга, поэтому энтузиасты методами обратной инженерии нашли способы менять напряжение на процессоре и создали свои собственные утилиты.
Информация об андервольтинге в Linux (на английском языке): https://github.com/mihic/linux-intel-undervolt
Утилиты для андервольтинга в Linux:
Я покажу как сделать андервольтинг в Linux на примере intel-undervolt, эта утилита написана на C (две другие это скрипты Python и Bash).
Андервольтинг с intel-undervolt
Установим программу:
git clone https://github.com/kitsunyan/intel-undervolt cd intel-undervolt/ ./configure --enable-systemd --enable-openrc make sudo make install sudo systemctl daemon-reload
Использование программы:
intel-undervolt РЕЖИМ [ОПЦИИ]...
В качестве РЕЖИМА может быть:
read Прочитать и отобразить текущие значения apply Применить значения из конфигурационного файла measure Измерить потребление энергии -f, --format <формат> Формат вывода (terminal, csv) -s, --sleep <интервал> Интервал сна в секундах daemon Запустить в режиме службы
Прочитаем текущие значения:
sudo intel-undervolt read
В данный момент у меня настройки по умолчанию:
CPU (0): -0.00 mV GPU (1): -0.00 mV CPU Cache (2): -0.00 mV System Agent (3): -0.00 mV Analog I/O (4): -0.00 mV
Я установлю бенчмарк производительности центрального процессора для Linux.
Запущу его на 5 минут, с нагрузкой на все 12 ядер (по ссылке в статье описание опций):
sysbench cpu --threads=12 --time=300 run
Мой текущий результат без андервольтинга:
Настройка андервольтинга в intel-undervolt
Для настройки intel-undervolt нужно изменить значения в конфигурационном файле /etc/intel-undervolt.conf:
sudo gedit /etc/intel-undervolt.conf
По умолчанию там содержится следующее:
# Включение или отключение триггеров (elogind) # Использование: enable [yes/no] enable no # CPU андервольтинг # Использование: undervolt ${index} ${display_name} ${undervolt_value} # Пример: undervolt 2 'CPU Cache' -25.84 undervolt 0 'CPU' 0 undervolt 1 'GPU' 0 undervolt 2 'CPU Cache' 0 undervolt 3 'System Agent' 0 undervolt 4 'Analog I/O' 0 # Изменение лимитов мощности # Использование: power ${domain} ${short_power_value} ${long_power_value} # Значение мощности: ${power}[/${time_window}][:enabled][:disabled] # Домены: package # Пример: power package 45 35 # Пример: power package 45/0.002 35/28 # Пример: power package 45/0.002:disabled 35/28:enabled # Изменение сдвига критической температуры # Использование: tjoffset ${temperature_offset} # Пример: tjoffset -20 # Переключатель настроек между энергией в сравнении с производительностью # Использование: hwphint ${mode} ${algorithm} ${load_hint} ${normal_hint} # Подсказки: смотрите energy_performance_available_preferences # Режимы: switch, force # Алгоритмы нагрузки: load:${capture}:${threshold} # Алгоритмы мощности: power[:${domain}:[gt/lt]:${value}[:[and/or]]...] # Захват: single, multi # Порог: Порог использования CPU # Домен: RAPL power domain, проверка с `intel-undervolt measure` # Пример: hwphint force load:single:0.8 performance balance_performance # Пример: hwphint switch power:core:gt:8 performance balance_performance # Интервал обновления демона # Использование: interval ${interval_in_milliseconds} interval 5000 # Действия демона # Использование: daemon действие[:опция...] # Действия: undervolt, power, tjoffset # Опции: once daemon undervolt:once daemon power daemon tjoffset
Для применения настроек андервольтинга используется синтаксис: apply ${index} ${display_name} ${undervolt_value}.
Здесь: apply — команда для применения настроек, ${index} — номер настройки, которую мы применяем, ${undervolt_value} — значение андервольтинга.
В качестве ${index} может быть:
- 0 — CPU (то есть центральный процессор)
- 1 — GPU (то есть видео ядро центрального процессора)
- 2 — CPU Cache (то есть кэш центрального процессора)
- 3 — System Agent
- 4 — Analog I/O
Например:
apply 2 'CPU Cache' -25.84
означает андервольтинг кэша CPU на 25.84 mV.
Ограничение мощности
Здесь можно указать свои значения для TDP.
TDP для процессоров имеет значение на короткое время турбобуста и на длительное время турбобуста. Продолжительность обоих промежутков турбобуста также можно отрегулировать.
Поддерживается два варианта синтаксиса:
power package ${short_term} ${long_term} power package ${short_term}/${time_window} ${long_term}/${time_window}
Здесь:
- ${short_term} — предельная мощность на тот период ТурбоБуста, когда ему разрешено выходить за границы обычного ТрубоБуста
- ${long_term} — предельная мощность «обычного» ТурбоБуста
- ${time_window} — продолжительность данного отрезка обычного ТурбоБуста или короткого «супер» ТурбоБуста
Пример:
power package 35/5 25/60
В нём устанавливается значение TDP на 35 когда турбобусту разрешено выйти за пределы обычного турбобуста, при этом продолжительность этого отрезка 5 секунд. Значение «обычного» турбобуста установлено на 25, причём его продолжительность 60 секунд.
Необязательно указывать время короткого и долгого турбобуста, можно использовать следующий синтаксис, только со значениями TDP:
power package 35 25
В этом случае будут использоваться дефолтные интервалы времени.
Лимит температуры
Вы можете установить предел температуры, после которого начинается термальный троттлинг. Температура указывается в виде значения смещения от максимального температурного уровня. Допустим установлено:
tjoffset -20
Если максимальный температурный уровень установлен на 100, то результирующий лимит будет 100 - 20 = 80°C. Помните, что сдвиг более чем 15°C разрешён только в Skylake и более новых.
Применение настроек
После того, как вы изменили файл /etc/intel-undervolt.conf, чтобы настройки вступили в силу, нужно выполнить
sudo intel-undervolt apply
Программе нужны права рут. Вы можете применять ваши настройки автоматически, включив службу intel-undervolt.service.
Режим службы
Иногда лимиты мощности и температуры могут быть сброшены EC, BIOS или чем-то ещё. Это поведение можно подавить, периодично применяя настройки лимитов. intel-undervolt-loop.service позволяет вам запустить эту программу в режиме службы, которая с определённым интервалом будет применять настройки. Интервал можно изменить поменяв значение interval:
interval 5000
Это значение в миллисекундах, по умолчанию установлено на 5 секунд.
Тесты андервольтинга в Linux
После применения андервольтинга вновь запускаю бенчмарк:
sysbench cpu --threads=12 --time=300 run
Новое значение:
В первый раз я получил:
- CPU скорость: событий в секунду: 9065.31
- Общая статистика: общее количество событий: 2719621
Событием в этой программе бенчмаркинга называют количество проделанных операций.
Во второй раз я получил:
- CPU скорость: событий в секунду: 12486.27
- Общая статистика: общее количество событий: 3745908
Прирост производительности 12486.27 / 9065.31 * 100% = 137,73%, то есть на 37 процентов.
В Windows у меня в Hashcat увеличилась производительность при переборе паролей Wi-Fi на центральном процессоре с 16995 H/s до 19850 H/s.
19850 / 16995 * 100% = 116,8%, то есть на 16 процентов.
Как можно убедиться, прирост действительно есть. Причём чем дольше работает процессор на максимальной частоте, тем больше выигрыш в мощности по сравнению со стандартными настройками.
Примечание: я также сильно увеличил TDP, не делайте так, если не уверены. В моём случае после снижения напряжения троттлинг из-за превышения TDP практически не наступает (процессору хватает дефолтного TDP), поэтому эта настройка вообще мало на что влияет + справляется охлаждение. Вы этой настройкой можете довести свой процессор до крайней температуры — без стресс-тестов с контролем температуры не меняйте это значение. Если у вас имеет место термальный троттлинг (из-за перегрева) — вообще не меняйте эту настройку в сторону увеличения! В этом случае вы сделаете сильно хуже и появляются реальные перспективы «спалить» процессор.
Запуск службы intel-undervolt
Для запуска службы intel-undervolt применяется команда:
sudo systemctl start intel-undervolt
Для остановки:
sudo systemctl stop intel-undervolt
Для проверки статуса:
systemctl status intel-undervolt
После перезагрузки служба не будет запущена. Для этого её нужно добавить в автозагрузку командой:
sudo systemctl enable intel-undervolt
Внимание: прежде чем добавлять службу в автозагрузку убедитесь, что ваша система стабильна при выбранных значениях андервольтинга. Иначе вы рискуете получить бесконечно перезагружающуюся систему.
О том, как контролировать текущую частоту и температуру процессора в Linux смотрите здесь.
Связанные статьи:
- Как посмотреть текущую частоту процессора в Linux (100%)
- Как ограничить использование центрального процессора и памяти в Linux (100%)
- Программы для бенчмарка CPU в Linux (86.7%)
- Ошибка «Failed to load module "intel" (module does not exist, 0)» (РЕШЕНО) (86.7%)
- Как в Linux посмотреть количество ядер процессора (86.7%)
- Как отключить Bluetooth без возможности подключения (RANDOM - 50%)