Как опция 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.