Если игра подтормаживает, а в трейе ничего умного не нарисовано, спасение — консольный мониторинг GPU. Для AMD есть radeontop, для Intel — intel_gpu_top, а nvtop умеет показывать все три вендора в одном окне в духе htop. Все три читают состояние карты прямо из ядра, не требуют графического окружения и почти не влияют на кадры. Разберём, что выбрать под твою карту, какие клавиши и флаги реально работают и как по нагрузке догадаться, из-за чего случился фриз.
Три инструмента с разным охватом:
Плюс низкоуровневые варианты: nvidia-smi для карт NVIDIA (если команда не находится — разбор в статье почему nvidia-smi не работает) и чтение sysfs, о котором подробно в материале про температуру и частоты через sysfs.
В 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 читает счётчики 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 -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-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.
Рабочий сценарий: открой второй терминал с мониторингом, воспроизведи проблему и смотри, что происходит в момент подвисания.
journalctl -kf | grep -iE 'amdgpu|drm', там обычно есть [drm] IP block:gmc_v8_0 is hung! или сообщения про page fault в gfxhub.strace -p PID и iostat -x 1.Параллельно полезно включить оверлей в самой игре: MangoHud в связке с Vulkan-слоями покажет FPS, frame time и температуру прямо поверх кадра, а консольные утилиты дадут срез по всей системе. Если VRAM занят под 100 %, а игра падает на загрузке уровня, ищи утечку в играх с долгими сессиями.
Накладные расходы минимальны: radeontop берёт из ядра несколько счётчиков, nvtop читает NVML или sysfs, intel_gpu_top — perf-счётчики. В idle всё это меньше процента CPU, в игре потери незаметны. Единственное исключение — слишком частый дамп: radeontop -t 1000 -d - в цикле нагружает шину больше, чем сам мониторинг, поэтому для логов держи интервал в пределах секунды. Если нужна история за часы и сравнение P-state, чтение тех же счётчиков из sysfs надёжнее и пишется в файл без перерисовки интерфейса.
В виртуальных машинах всё зависит от проброса: карты нет в гостях — нет и /dev/dri, монитор покажет пустоту. При полном пробросе VFIO карта занята хостовым драйвером, так что хост её не увидит, а гостевая будет считать, что устройства нет. Проброс в виртуальную видеокарту (virgl, venus, vGPU) даёт эмулированные счётчики, которые ничего не говорят о реальной нагрузке.
Если карта AMD и нужен точный срез по блокам amdgpu — radeontop. Если в системе NVIDIA, Intel или две карты сразу — nvtop.
Обычно не задан правильный DRM-узел: попробуй -p /dev/dri/card0, а при нескольких картах -b N. Если нули остались, проверь, что загружен именно amdgpu, а не radeon, командой lspci -k | grep -i kernel.
Драйвер или ядро не отдают часть счётчиков. Обнови mesa и ядро, для NVIDIA убедись, что загрузилась libnvidia-ml. Nouveau nvtop не поддерживает вообще.
Нужен 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 пишут построчные данные, их удобно скормить скрипту или графику в терминале.
gpu_busy_percent, pp_dpm_sclk, mem_info_vram_used.man radeontop, man nvtop, man intel_gpu_top — полный список ключей, он меняется от версии к версии.Для одной карты AMD хватит radeontop, для смешанного железа или NVIDIA бери nvtop, а на Intel-ноутбуке с включённым iGPU помогает intel_gpu_top. Запускай нужный монитор отдельным терминалом и смотри на цифры в момент фриза: перегруженный GFX, загруженный CPU или полный ноль графиков уводят к разным причинам. Держи системные счётчики рядом с оверлеем MangoHud — так картина получается полной.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии