Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

NVIDIA: перегрев, вентиляторы и Coolbits

Гул вентиляторов сразу после загрузки и 70 °C в простое на ноутбуке — это не обязательно поломка: карта может не спать, а композитор или фоновое приложение её держит загруженной. Разбираемся, где искать источник нагрузки, чем ограничить лимит мощности, как включить Coolbits и перевести вентиляторы на ручной режим или на скрипт по температуре.

Почему карта греется, когда её никто не грузит

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

nvidia-smi --query-gpu=name,temperature.gpu,fan.speed,utilization.gpu,pstate,power.draw --format=csv
nvidia-smi dmon -s pucvmt
nvidia-smi pmon -c 1

pmon покажет конкретные процессы, а не просто «график есть». Типичные виновники в покое:

  • Композитор рабочего стола. Анимации окон, тени, прозрачность — всё это рендерит GPU постоянно. На ноутбуках с двумя видеокартами проще оставить рабочий стол на встроенной, а дискретную будить только под игры.
  • Аппаратное декодирование видео. Браузер с VP9 или AV1 в фоне держит декодер активным.
  • Оверлеи. Запись экрана, MangoHud, игровые лаунчеры с постоянным опросом производительности.
  • Высокая частота обновления и VRR. На 144 Гц панель просит больше кадров, и карта выходит из состояния сна.
  • Режим PowerMizer в максимуме. Если кто-то или что-то выставило «prefer maximum performance», карта не опускается до низких частот и греется впустую.

Отдельно прочитай pstate: состояния P8 и P0c означают сон и частичную активность. Если в простое карта висит в P0 постоянно, вопрос закрыт — у неё нет режима сна в текущей конфигурации. Сон дискретной карты настраивается через выбор видеокарты для приложений, и про это подробно в статье о гибридной графике и prime-run.

Как ограничить мощность и включить режим энергосбережения

Два параметра драйвера отвечают за энергопотребление. Первый — persistence mode: он держит модуль в памяти и ускоряет пробуждение, но сам по себе греть не должен.

sudo nvidia-smi -pm 1
nvidia-smi -q -d POWER | head -40

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

nvidia-smi -q -d POWER | grep -i "power limit"
sudo nvidia-smi -pl 150
nvidia-smi -q -d POWER | grep -i "power limit"

Значение сверху — текущий лимит, рядом Default Power Limit, к которому можно вернуться в любой момент:

sudo nvidia-smi -pl 220   # значение Default из вывода выше

Потери производительности обычно заметны только в тяжёлых сценах, а температура и шум падают заметно. На части ноутбуков команда вернёт отказ: там лимиты задаёт производитель, и с этим не поспоришь. Тогда работают только программные средства из следующих разделов.

Что даёт Coolbits и как его включить

Coolbits — битовая маска в конфигурации Xorg, которая открывает скрытые возможности драйвера. Расшифровка значений:

  • 1 — фиксировать частоты GPU;
  • 2 — фиксировать частоту видеопамяти;
  • 4 — ручное управление вентиляторами;
  • 8 — разгон ядра и памяти;
  • 16 — dynamic boost, автоматический разгон по температуре и нагрузке.

Самый полезный бит для владельца ноутбука — 4, он даёт ползунок вентиляторов в nvidia-settings. Файл с настройкой:

mkdir -p /etc/X11/xorg.conf.d
cat > /etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
    Identifier  "Nvidia Card"
    Driver      "nvidia"
    Option      "Coolbits" "28"
EndSection

28 — это 16 + 8 + 4: вентиляторы, разгон и dynamic boost. Практичный минимум без разгона — 20, то есть 16 + 4. Разгон требует запас по питанию и вентиляции, а сдвиг частот при просадке питания превращается в артефакты, поэтому для повседневной машины разгон лучше не включать.

Три подводных камня:

  • Coolbits работает только в X11. В сессии Wayland параметр из xorg.conf игнорируется, и ползунок вентиляторов в nvidia-settings не появится.
  • Файл /etc/X11/xorg.conf перекрывает xorg.conf.d. Если пакет nvidia-xconfig создал основной конфиг, твои настройки из каталога не применяются. Проверь вывод Xorg -configure и журнал запуска.
  • После правки нужен перезапуск X. В nvidia-settings во вкладке PowerMizer появятся новые пункты — это и есть проверка, что параметр применился.

Как задать скорость вентиляторов вручную

После включённого Coolbits вентиляторами управляет nvidia-settings, и делается это из командной строки:

DISPLAY=:0 nvidia-settings -a "[gpu:0]/GPUFanControlState=1"
DISPLAY=:0 nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=45"
nvidia-settings --query-gpu=fan.speed

Первой командой включается ручной режим, второй задаётся скорость в процентах — обычно хватает диапазона от 30 до 60. Ставить 100 % постоянно незачем: это лишний шум и износ подшипника, а ставить 0 опасно — охлаждение падает вместе с шумом. Вернуть автоматику:

DISPLAY=:0 nvidia-settings -a "[gpu:0]/GPUFanControlState=0"

На части ноутбуков вентиляторы вообще не поддаются ручному управлению: ползунок в интерфейсе серый, и никакой Coolbits это не исправит. Если столкнулся с таким поведением, твои инструменты ограничены лимитом мощности и дисциплиной с фоновыми процессами. По поводу «дискретная карта не засыпает и ест батарею» отдельно разбиралась гибридная графика и работа с prime-run: если рабочий стол живёт на встроенной видеокарте, nvidia-smi в покое показывает нули.

Как автоматизировать вентиляторы по температуре

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

#!/usr/bin/env bash
# ~/.local/bin/gpu-fans.sh
set -euo pipefail

temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits | head -1)
current=$(nvidia-settings --query-gpu=fan.speed 2>/dev/null \
  | grep -oE '[0-9]+' | head -1 || echo 0)

case "$temp" in
  <55) target=35 ;;
  <70) target=45 ;;
  <80) target=60 ;;
  *)   target=75 ;;
esac

if [ "$current" != "$target" ]; then
  DISPLAY=:0 nvidia-settings -a "[gpu:0]/GPUFanControlState=1" >/dev/null
  DISPLAY=:0 nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=$target" >/dev/null
fi
chmod +x ~/.local/bin/gpu-fans.sh
crontab -e
# строка в crontab:
* * * * * /home/твой_юзер/.local/bin/gpu-fans.sh

Скрипт требует работающей X-сессии на дисплее :0 и включённого Coolbits с битом 4. Если вентиляторы не управляются, он будет лишь молча менять цифры, поэтому после первого запуска проверь фактическую скорость командой nvidia-settings --query-gpu=fan.speed.

Как следить за температурой и ловить троттлинг

Разовая проверка мало что говорит — нужен журнал. Периодический вывод в файл:

nvidia-smi --query-gpu=temperature.gpu,fan.speed,clocks_throttle_reasons.active,power.draw \
  --format=csv -l 5 | tee -a ~/nvidia-monitor.log

Ориентиры по цифрам:

  • 35–50 °C в покое — норма для современной карты;
  • 60–70 °C в покое — карта не спит, ищи источник нагрузки;
  • выше 80 °C под нагрузкой стоит задуматься о термопасте и обдуве;
  • fan.speed 0 % вместе с состоянием сна — это не поломка, карта просто отключилась.

Поле clocks_throttle_reasons.active важнее термометра: значение SwThermalSlowdown или HwThermalSlowdown означает, что карта уже урезает частоты, а SwPowerCap — что упёрлась в лимит мощности. В таком случае сначала снижай лимит и фоневую нагрузку, и только потом лезь к железу. Порядок установки драйвера с нуля, если настройки слетели после обновления, я разбирал в статье про драйвер NVIDIA на Arch Linux.

Частые вопросы

Вентиляторы шумят сразу после старта, хотя я ничего не запускаю

Так себя ведёт новый драйвер: по умолчанию карта несколько секунд держит высокие частоты для быстрой инициализации. Если шум не прекращается, проверь, не застряла ли она в максимальном PowerMizer, и не грузит ли GPU композитор: nvidia-smi pmon -c 1 покажет источник. Помогает снижение лимита мощности.

Coolbits прописал, а в настройках ничего не изменилось

Проверь три вещи: в сессии ли ты X11, а не Wayland; не перекрывает ли настройки файл /etc/X11/xorg.conf; перезапущен ли X после правки. В журнале запуска Xorg строка с Coolbits покажет, прочитал ли сервер параметр вообще.

Как вернуть всё к заводским настройкам

Убери опцию Coolbits из xorg.conf.d, верни лимит мощности к Default из nvidia-smi -q -d POWER и отключи ручной режим вентиляторов через GPUFanControlState=0. Удаление скрипта из cron завершает автоматику.

На старой карте Coolbits работает?

Ветки 340 и 390 поддерживают лишь часть возможностей, а часть элементов в nvidia-settings там просто отсутствует. Если карта из этих серий, сначала прочитай про legacy-драйверы NVIDIA 340/390 — там же разобрано, почему для таких карт выбор ограничен, а не настройками. Если система вообще перестала грузиться с этими настройками, выручает консоль и временный откат, описанный в статье про чёрный экран и nomodeset.

Стоит ли снижать лимит мощности на обычном десктопе

На корпусе с нормальным обдувом выигрыш в шуме минимален, а потеря кадров реальна. Снижать лимит стоит в тонких корпусах, ноутбуках и mini-PC, где охлаждение упирается в размер.

Полезные ресурсы

  • ArchWiki: NVIDIA — параметры драйвера, PowerMizer, Coolbits, управление питанием.
  • man.archlinux.org: nvidia-smi — все команды утилиты: -pm, -pl, запросы --query-gpu.

Заключение

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



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max