Мониторинг 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.
Как поймать фриз и найти его причину по нагрузке?
Рабочий сценарий: открой второй терминал с мониторингом, воспроизведи проблему и смотри, что происходит в момент подвисания.
- GFX 90–100 % и температура растёт: GPU занят, но не даёт кадры. Виновник драйвер, шейдеры или, если это ноутбук, троттлинг по питанию. Смотри
journalctl -kf | grep -iE 'amdgpu|drm', там обычно есть[drm] IP block:gmc_v8_0 is hung!или сообщения про page fault в gfxhub. - GFX около нуля, CPU 100 %: упор в процессор: физика, скрипты, компиляция шейдеров, отсутствие оптимизации на CPU. GPU тут ни при чём.
- Все графики на нуле во время фриза: завис путь DRM или композитор. Проверяй лог ядра и версии драйвера, а не настройки видеокарты.
- Процесс в списке 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, так картина получается полной.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии