контроль и разгон графических карт NVIDIA в Linux

Многие геймеры, майнеры и просто любители повозиться с multimedia давно используют видеокарты NVIDIA для своих целей. Используют на «всю катушку». Разработчики видеокарт позволили простым людям создавать программы для запуска на видеокартах, используя мощь всех CUDA ядер. Попутно видеокарты стали комплектоваться оперативной памятью в несколько гигабайт. После этого простая видеокарта превратилась в компьютер-в-компьютере. Поэтому контроль графических карт NVIDIA является первостепенной задачей для тех, кто хочет выжать по максимуму и одновременно добиться того, чтобы карта работала, как можно дольше.


nvidia-smi

Для контроля состояния видеокарты мы будем использовать утилиту nvidia-smi (NVIDIA System Management Interface), которая входит в комплект драйверов производимых компанией NVIDIA для своих карт.

Если у вас Linux, то после установки NVIDIA драйверов nvidia-smi можно найти в папке:

/usr/bin/nvidia-smi

Nvidia-smi является консольной программой (у нее нет графического интерфейса) и для ее запуска необходимо воспользоваться командной строкой.

Полезные команды

С моей точки зрения самой полезным способом запуска nvidia-smi, является запуск без параметров:

nvidia-smi

вы получите много полезной информации структурированной в виде простенькой таблички. Давайте запусти несколько приложений нагружающих видеокарты и посмотрим, что выдаст nvidia-smi. Для этого воспользуемся примерами, которые поставляются вместе с NVIDIA Cuda Toolkit (установка этого Toolkit описана здесь). Эти примеры точно нагрузят нашу видеокарту 🙂 А так же запустим конвертирование видео из одного формата в другой с помощью утилиты FFmpeg, которая проводит кодирование/раскодирование видео на графическом ускорителе видеокарты.

nvidia-smi список запущенных процессов

Глядя на скриншот мы видим, что у нас запущены 4 приложения использующих ресурсы видеокарты:

  • Xorg — графическая подсистема Linux. Использует драйвер NVIDIA, поэтому она здесь в списке;
  • SimpleGL — пример из Cuda Toolkit;
  • marchinCubes — еще пример из Cuda Toolkit;
  • FFmpeg — в нашем тесте он занимается конвертированием видео с помощью NVIDIA GPU.

Шапка таблицы дает информацию о названии видеокарты, версии драйвера, текущем режиме работы и температуру. Все дается в понятном виде и дополнительных объяснений не требует. Рассмотрим подробнее раздел Processes, здесь каждый процесс имеет 5 параметров:

  • GPU — номер видеокарты на котором приложение запущено (если видеокарта одна, то там будет 0);
  • PID — ID процесса, по этому ID вы можете kill’ьнуть процесс обычной командой kill;
  • Type — тип приложения:
    • «G» — графическое (обычная графика, которая отрисовывается видеокартой);
    • «C» — вычислительное, например можно очень эффективно перемножать матрицы на видеокарте (CUDA ядра), но чаще всего подбирают пароли или майнят битки;
    • «G+C» — рисует и вычисляет и все это  делает с помощью видеокарты.
  • Process name — название приложения;
  • GPU Memory Usage — сколько видеопамяти занимает приложение.

Чтобы получить максимум информации о состоянии видеокарты наберите:

nvidia-smi -q

вывалится огромная «простыня», где вы найдете всю информацию про вашу карточку.

Если установлено несколько видеокарт в системе и нужно получить информацию о какой-то карте конкретно, то нужно указать ID этой карты:

nvidia-smi -q -i 1

Для того, чтобы получить весь список видеокарт в системе воспользуйтесь командой:

nvidia-smi -L

Журнал

Для контроля состояния видеокарты в течение некоторого промежутка времени поможет журнал или log. Nvidia-smi позволяет выводить информацию о требуемых параметрах на экран или в файл для последующего анализа.

Следующая команда будет непрерывно с интервалом в 5 секунд выводить на экран информация о потреблении видеопамяти и температуре GPU:

nvidia-smi --query-gpu=timestamp,name,temperature.gpu,memory.free,memory.used --format=csv -l 5

timestamp, name, temperature.gpu, memory.free [MiB], memory.used [MiB]
2018/04/01 07:48:31.490, GeForce 840M, 46, 1778 MiB, 224 MiB
2018/04/01 07:48:36.491, GeForce 840M, 46, 1778 MiB, 224 MiB
2018/04/01 07:48:41.492, GeForce 840M, 46, 1778 MiB, 224 MiB

С помощью опции «-f» можно перенаправить вывод в файл:

nvidia-smi --query-gpu=timestamp,name,temperature.gpu,memory.free,memory.used --format=csv -l 5 -f video.log

Еще один способ смотреть за видеокартой — это запустить nvidia-smi с ключами dmon или pmon.

С помощью dmon можно следить за общими параметрами видеокарты. Я чаще всего использую dmon для контроля загруженности чипов NVDEC/NVENC расположенных в карте NVIDIA и которые отвечают за кодирование и раскодирование видео на аппаратном уровне.

nvidia-smi dmon
# gpu pwr temp sm mem enc dec mclk pclk
# Idx W C % % % % MHz MHz
0 - 46 0 0 - - 405 135
0 - 46 0 0 - - 405 135
0 - 46 6 2 - - 405 135

Если хотите журналировать потребление ресурсов видеокарты каждым прорцессом, то можно воспользоваться опцией pmon.

nvidia-smi pmon
# gpu pid type sm mem enc dec command
# Idx # C/G % % % % name
0 3473 G 0 0 0 0 Xorg
0 27856 C 2 3 60 45 ffmpeg
0 3473 G 0 0 0 0 Xorg
0 27856 C 2 3 71 53 ffmpeg
0 3473 G 0 0 0 0 Xorg
0 27856 C 4 6 79 58 ffmpeg

Driver Persistence

Peristence — постоянство. Если приложению нужна видеокарта, то обращение происходит сначала к драйверу, а от драйвера к видеокарте. Современные системы могут выгружать драйверы из памяти (например, понизить энергопотребление). Если приложение требует драйвер, а драйвер в это время выгружен, то система загружает драйвер. На это уходит время. Возникает лаг (lag). Чтобы лагов не было, есть возможность сделать драйвер невыгружаемым:

nvidia-smi -pm 0

проверяем статус драйвера»

# nvidia-smi -q | grep Pers
    Persistence Mode                : Enabled

для того, чтобы вернуть все как было (разрешить выгружать драйвер) делаем:

nvidia-smi -pm 1

и сразу же проверяем:

# nvidia-smi -q | egrep Pers
    Persistence Mode                : Enabled

Следует помнить, что если вы меняли настройки видеокарты (частоту, энергопотребление), то перевод/вывод ее в Persistence сбросит все предыдущие настройки.

Разгон

По умолчанию разгон выключен. Вы не можете контролировать частоту графического процессора:

nvidia текущая частота GPU

ни скорость вентилятора на видеокарте:

nvidia скорость вентилятора

Для того, чтобы в nvidia-settings появилась возможность разгона, нужно добавить в файл

/etc/X11/xorg.conf

в секцию Section «Device» строку:

Option "Coolbits" "13"

 

coolbits настройка графического сервера

и перезагрузить компьютер. После перезагрузки в nvidia-settings станут доступны следующие опции для регулировки разгона:

настройка частоты графического процессора

nvidia регулировка частоты GPU

настройка скорости вращения вентилятора

nvidia регулировка скорости вентилятора

Следует помнить, что разгон переводит видеокарту в нестандартный режим работы и поэтому контроль ее состояния нужно осуществлять еще тщательнее.

Заключение

В данной заметке мы рассмотрели, как осуществлять контроль и разгон графических карт NVIDIA в Linux. Затронули только самые базовые принципы и лишь слегка погрузились в эту интересную тему. На простых примерах посмотрели, как следить за состоянием видеокарты, как вести логи. Слегка коснулись темы разгона. Правда зачастую уже и этого достаточно, чтобы грамотно задействовать мощь видеокарты.

You May Also Like