Как опция NVIDIA On-Demand работает в настройках NVIDIA X Server?

Я установил проприетарный драйвер Nvidia на Ubuntu 19.10.
В разделе Prime Profiles есть три варианта:
* NVIDIA (режим производительности)
* NVIDIA On-Demand
* Intel (режим энергосбережения)

Первый и последний варианты довольно очевидны, но я не знаю, как работает второй вариант. Как он определяет, какое приложение нуждается в драйвере NVIDIA, а какое нет?

4 ответа

Решение

Источник: Часть I. Инструкции по установке и настройке

Глава 35. Разгрузка рендера PRIME

Разгрузка рендеринга PRIME - это возможность визуализировать X-экран одним графическим процессором, но выбрать определенные приложения на этом X-экране для визуализации на другом графическом процессоре. Это особенно полезно в сочетании с динамическим управлением питанием, чтобы оставить графический процессор NVIDIA выключенным, за исключением случаев, когда это необходимо для рендеринга некоторых приложений, чувствительных к производительности.

Графический процессор, визуализирующий большую часть экрана X, известен как "приемник", а графический процессор, на который "выгружается" визуализация определенных приложений, известен как "источник". Источник разгрузки рендеринга создает контент, который представлен в приемнике разгрузки рендеринга. Драйвер NVIDIA может функционировать как источник разгрузки рендеринга PRIME, чтобы разгрузить рендеринг GLX+OpenGL или Vulkan, представляя их на X-экране, управляемом X-драйвером xf86-video-modesetting.

Требования к X-серверу

Поддержка разгрузки рендеринга NVIDIA PRIME требует следующих коммитов git на X-сервере X.Org:

  • 7f962c70 - xsync: добавить ресурс внутри SyncCreate, экспортировать SyncCreate

  • 37a36a6b - GLX: добавить сопоставление поставщика для каждого клиента

  • 8b67ec7c - GLX: используйте отправляющего клиента для поиска XID

  • 56c0a71f - GLX: Добавить функцию для изменения списка поставщиков клиентов

  • b4231d69 - GLX: Установить GlxServerExports::{основная, дополнительная} версия

На момент написания эти коммиты находятся только в основной ветке X-сервера X.Org и еще не входят ни в одну официальную версию X-сервера X.Org.

Хорошо, я наконец понял это. На данный момент похоже, что NVIDIA может выполнять рендеринг разгрузки для приложений OpenGL и Vulkan.
Чтобы включить этот рендеринг с разгрузкой, вы должны поместить профиль Prime в "On-Demand", а затем для разгрузки Vulkan вы должны поместить эту переменную в свой /etc/environment файл:
__NV_PRIME_RENDER_OFFLOAD=1

Для приложений OpenGL вы должны указать эти переменные:
__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidia

После перезапуска начнется выгрузка рендера.

Чтобы проверить, какая видеокарта используется, вы можете ввести в терминал следующую команду:
glxinfo | grep vendor

В качестве расширения к ответу М.Д. Наримани: я могу подтвердить, что это действительно работает для меня на kubuntu 19.10 с версией драйвера nvidia 440

некоторую справочную информацию можно найти в главе 34. PRIME Render Offload

вы можете установить опцию "по требованию" также в графическом интерфейсе: Nvidia X Server Settings - PRIME Profiles: NVIDIA On-Demand
затем перезапустите.

затем вы можете запустить свое приложение с переменными среды также непосредственно из командной строки, чтобы вы могли переключать графические процессоры по мере необходимости:

       stefan@stefan-Zen:~$ glxheads :0
Name: :0
  Display:     0x556081a45d40
  Window:      0x7000002
  Context:     0x556081a64a70
  GL_VERSION:  3.0 Mesa 19.2.8
  GL_VENDOR:   Intel Open Source Technology Center
  GL_RENDERER: Mesa DRI Intel(R) UHD Graphics 630 (Coffeelake 3x8 GT2) 
stefan@stefan-Zen:~$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxheads :0
Name: :0
  Display:     0x55f6dd9097a0
  Window:      0x7000002
  Context:     0x55f6dd944878
  GL_VERSION:  4.6.0 NVIDIA 440.64
  GL_VENDOR:   NVIDIA Corporation
  GL_RENDERER: GeForce RTX 2060/PCIe/SSE2

основываясь на ответах @md-narimani и @dominick-pastore, на самом деле сценарии оболочки поставляются готовыми для этой цели как часть nvidia-prime-appletупаковка.

И вы можете просто поместить их перед любой командой, которую вы обычно используете.

      nvidia-optimus-offload-glx glxheads :0
nvidia-optimus-offload-vulkan vkcube

Но это будет работать только в том случае, если драйвер ядра nvidia загружен правильно, и Xorg ПРАВИЛЬНО сгенерировал экраны Nvidia, вы можете проверить это:

      cat /var/log/Xorg.0.log | grep -i NVIDIA
# it should output a bunch of lines with "NVIDIA(G0)"

Если экраны не обнаруживают правильно, создайте /etc/X11/xorg.conf.d/nvidia.confи заполните его содержимым из инструкций в главе 34. PRIME Render Offload , как указано @stefan-krüger.

Другие вопросы по тегам