Все об Arch Linux

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

Мониторинг GPU в консоли: radeontop и nvtop

Если игра подтормаживает, а в трейе ничего умного не нарисовано, спасение — консольный мониторинг GPU. Для AMD есть radeontop, для Intel — intel_gpu_top, а nvtop умеет показывать все три вендора в одном окне в духе htop. Все три читают состояние карты прямо из ядра, не требуют графического окружения и почти не влияют на кадры. Разберём, что выбрать под твою карту, какие клавиши и флаги реально работают и как по нагрузке догадаться, из-за чего случился фриз.

Какие консольные мониторы GPU стоит знать?

Три инструмента с разным охватом:

  • radeontop — только AMD с драйвером amdgpu. Показывает занятость по блокам (GFX, UCLK, MCLK, CE, VCN), температуру, частоты и расход VRAM. Нативная утилита, лишних зависимостей нет.
  • nvtop — AMD, Intel и NVIDIA в одном интерфейсе: графики температуры, потребления и утилизации, список процессов с их нагрузкой на карту. Универсальный вариант, если карта одна, но хочется сравнивать её с процессорами.
  • intel_gpu_top — Intel: частоты IA и GT, движки (Render/3D, Blitter, Video, VideoEnhance), энергопотребление и доля Panel Self Refresh. Считает через perf-счётчики, поэтому почти всегда требует root.

Плюс низкоуровневые варианты: nvidia-smi для карт NVIDIA (если команда не находится — разбор в статье почему nvidia-smi не работает) и чтение sysfs, о котором подробно в материале про температуру и частоты через sysfs.

Как установить radeontop, nvtop и intel_gpu_top?

В Arch всё ставится одной командой, все три пакета лежат в extra:

sudo pacman -S radeontop nvtop intel-gpu-tools

Сразу проверь, что карта видна системе и какие узлы DRM есть:

lspci -k | grep -A2 -iE 'vga|3d|display'
ls -l /dev/dri/

Дальше запускай то, что соответствует карте:

radeontop              # AMD, amdgpu
nvtop                  # AMD / Intel / NVIDIA
sudo intel_gpu_top     # Intel, нужны perf-счётчики

Если radeontop показывает нули или пустые блоки, добавь -p /dev/dri/card0 и права root. Не увидел карту в lspci -k — значит драйвер не загрузился, и тут никакой мониторинг не поможет.

Чем radeontop отличается от nvtop и какие флаги у него есть?

radeontop читает счётчики amdgpu напрямую и рисует текстовую таблицу, а не псевдографический дашборд. По умолчанию он открывает /dev/dri/card0; при нескольких картах узел или шину указывают явно. Полезные ключи из man radeontop:

radeontop -p /dev/dri/card1   # конкретный DRM-узел
radeontop -b 1                # выбор по PCI-шине, если карт несколько
radeontop -c                  # цветной вывод
radeontop -t 60               # сэмплов в секунду (по умолчанию 120)
radeontop -d -                # разовый дамп в stdout, без интерфейса
radeontop -d gpu.log -i 5     # лог в файл, строка каждые 5 секунд
radeontop -l 720 -d -         # 720 строк дампа и выход

Частые слухи про -l1 и -v как «период обновления» и «подробный режим» неверны: -l задаёт лимит строк в дампе, -i — интервал между ними, а -v печатает версию программы. В самом интерфейсе работают c (вкл/выкл цвет) и q (выход).

Что показывает radeontop: проценты GFX (графика), UCLK (частоты ядра), MCLK (частоты видеопамяти), CE (вычисления), а на чипах с VCN — отдельные столбцы кодирования и декодирования. В верхней строке — температура и занятость VRAM вроде 2560M/8192M. Значения, которых карта не умеет, помечаются прочерком.

Как пользоваться nvtop?

Запусти без аргументов — и получишь окно с тремя зонами: сверху карта с графиками, в середине линии, снизу процессы.

nvtop
nvtop -d 5        # обновление раз в 0.5 с (задержка в десятых долях секунды)
nvtop -C          # без цвета, для терминала с плохой темой
nvtop -p          # одна суммарная полоса вместо графиков

Клавиши внутри окна:

  • h — окно помощи со списком горячих клавиш;
  • F2 — настройки интерфейса: вкладки General, Devices, Chart, Processes. Там выбирается устройство, температурная шкала, метрика графиков и сортировка;
  • F6 — быстрый выбор поля сортировки, + и - — направление (по возрастанию или убыванию);
  • F12 — сохранить настройки в ~/.config/nvtop/interface.ini, чтобы не настраивать заново;
  • F9 — отправить сигнал подсвеченному процессу (удобно, когда игра зависла и надо её снять);
  • цифры 1…N — переключение между картами, q или Esc — выход.

Графики по умолчанию идут по температуре, потреблению и утилизации. Когда кодировщик или декодировщик включаются, рядом с полосой GPU появляются отдельные полосы ENC и DEC, которые прячутся через полминуты простоя — таймер меняет ключ -E. NVIDIA читается через NVML (нужна libnvidia-ml из драйвера), AMD — через счётчики amdgpu. С nouveau и на старом драйвере radeon nvtop, по признанию авторов, не работает.

Что показывает intel_gpu_top?

Утилита из пакета intel-gpu-tools показывает по каждому клиенту (процессу) частоты IA и GT, загрузку физических движков и клиентов, температуру GPU и энергопотребление пакета через RAPL. На части ноутбуков с внутренней панелью видна доля PSR — времени, когда экран почти не потребляет энергию, что помогает понять, спит ли iGPU в простое.

sudo intel_gpu_top                 # интерактивный режим
sudo intel_gpu_top -s 200          # период обновления 200 мс
sudo intel_gpu_top -J              # JSON для парсинга
sudo intel_gpu_top -l              # текст, без ncurses
sudo intel_gpu_top -L              # список доступных GPU
sudo intel_gpu_top -d drm:/dev/dri/card1

Клавиши: 1 переключает агрегацию по классам движков и по физическим движкам, H — видеть клиентов по отдельности или свёрнутыми по PID, m — разбивка по регионам памяти, s — режим сортировки, h — помощь, q — выход. Метрики, которых нет на конкретной платформе, рисуются прочерком, поэтому пустых колонок не пугайся. Устройства на новом драйвере Xe инструмент пока не поддерживает — для них есть gputop.

Как поймать фриз и найти его причину по нагрузке?

Рабочий сценарий: открой второй терминал с мониторингом, воспроизведи проблему и смотри, что происходит в момент подвисания.

  1. GFX 90–100 % и температура растёт — GPU занят, но не даёт кадры. Виновник драйвер, шейдеры или, если это ноутбук, троттлинг по питанию. Смотри journalctl -kf | grep -iE 'amdgpu|drm', там обычно есть [drm] IP block:gmc_v8_0 is hung! или сообщения про page fault в gfxhub.
  2. GFX около нуля, CPU 100 % — упор в процессор: физика, скрипты, компиляция шейдеров, отсутствие оптимизации на CPU. GPU тут ни при чём.
  3. Все графики на нуле во время фриза — завис путь DRM или композитор. Проверяй лог ядра и версии драйвера, а не настройки видеокарты.
  4. Процесс в списке nvtop есть, утилизация 0 % — приложение не дошло до отправки команд: ждёт сеть, диск или блокировку. Смотри strace -p PID и iostat -x 1.

Параллельно полезно включить оверлей в самой игре: MangoHud в связке с Vulkan-слоями покажет FPS, frame time и температуру прямо поверх кадра, а консольные утилиты дадут срез по всей системе. Если VRAM занят под 100 %, а игра падает на загрузке уровня, ищи утечку в играх с долгими сессиями.

Сколько ресурсов съедают мониторы и работают ли они в VM?

Накладные расходы минимальны: radeontop берёт из ядра несколько счётчиков, nvtop читает NVML или sysfs, intel_gpu_top — perf-счётчики. В idle всё это меньше процента CPU, в игре потери незаметны. Единственное исключение — слишком частый дамп: radeontop -t 1000 -d - в цикле нагружает шину больше, чем сам мониторинг, поэтому для логов держи интервал в пределах секунды. Если нужна история за часы и сравнение P-state, чтение тех же счётчиков из sysfs надёжнее и пишется в файл без перерисовки интерфейса.

В виртуальных машинах всё зависит от проброса: карты нет в гостях — нет и /dev/dri, монитор покажет пустоту. При полном пробросе VFIO карта занята хостовым драйвером, так что хост её не увидит, а гостевая будет считать, что устройства нет. Проброс в виртуальную видеокарту (virgl, venus, vGPU) даёт эмулированные счётчики, которые ничего не говорят о реальной нагрузке.

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

Что выбрать: radeontop или nvtop?

Если карта AMD и нужен точный срез по блокам amdgpu — radeontop. Если в системе NVIDIA, Intel или две карты сразу — nvtop.

radeontop запускается, но все значения 0 %

Обычно не задан правильный DRM-узел: попробуй -p /dev/dri/card0, а при нескольких картах -b N. Если нули остались, проверь, что загружен именно amdgpu, а не radeon, командой lspci -k | grep -i kernel.

nvtop показывает N/A в половине полей

Драйвер или ядро не отдают часть счётчиков. Обнови mesa и ядро, для NVIDIA убедись, что загрузилась libnvidia-ml. Nouveau nvtop не поддерживает вообще.

intel_gpu_top пишет, что счётчики недоступны

Нужен root и параметр perf_event_paranoid не выше 1: sudo sysctl -w kernel.perf_event_paranoid=1. На Xe вместо intel_gpu_top используй gputop.

Можно запустить мониторинг в фоне и писать лог?

Да, radeontop -d - -i 1 > ~/radeontop.log или sudo intel_gpu_top -l -s 1000 > ~/igpu.log пишут построчные данные, их удобно скормить скрипту или графику в терминале.

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

  • AMDGPU: раздел Monitoring на ArchWiki — raw-счётчики в sysfs, gpu_busy_percent, pp_dpm_sclk, mem_info_vram_used.
  • Intel graphics на ArchWiki — настройка i915/Xe и разбор работы intel_gpu_top.
  • Man-страницы в Arch: man radeontop, man nvtop, man intel_gpu_top — полный список ключей, он меняется от версии к версии.

Заключение

Для одной карты AMD хватит radeontop, для смешанного железа или NVIDIA бери nvtop, а на Intel-ноутбуке с включённым iGPU помогает intel_gpu_top. Запускай нужный монитор отдельным терминалом и смотри на цифры в момент фриза: перегруженный GFX, загруженный CPU или полный ноль графиков уводят к разным причинам. Держи системные счётчики рядом с оверлеем MangoHud — так картина получается полной.



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

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

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

Комментарии

Загрузка…

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

Telegram Max