Nvidia optimus, настройка и запуск bumblebee: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 18 промежуточных версий 8 участников)
Строка 1: Строка 1:
Данное руководство предназначено для счастливых обладателей ноутбуков с [http://www.nvidia.ru/object/optimus_technology_ru.html nvidia optimus] на борту.
Данное руководство предназначено для счастливых обладателей ноутбуков с [http://www.nvidia.ru/object/optimus_technology_ru.html nvidia optimus] на борту, которые используют дистрибутивы на базе бранча p8.


На данный момент существуют две технологии, которые позволяют использовать Optimus в Linux: Optimus/Prime и Bubmlebee. Эти технологии взаимоисключающие: необходимо использовать одну из их в один момент.
{{Note | Начиная с p9 bumblebee не поддерживается, всё должно работать без bumblebee.}}


== Optimus/Prime ==
== PRIME ==
Это единственный способ (кроме автоматического выбора режима), который работает в Сизифе и в бренче p10


Optimus/Prime позволяет использовать Optimus в двух режимах: 'PRIME GPU offloading' и 'Reverse PRIME'. Для его работы ему необходимы загруженные KMS- и DDX-драйвера для Intel'овской карточки и NVidia-карты. До недавнего времени KSM-драйвер для NVidia был только nouveau. В последнее время для бинарного блоба
Если у вас современная видеокарта, которая поддерживается драйвером версии 435 или новее (посмотреть можно в '''/proc/driver/nvidia/version'''), то у вас есть поддержка технологии NVIDIA PRIME, достаточно запускать программы при помощи '''nvidia-prime-run''' (входит в пакет '''nvidia_glx_common''')


=== DRI2 ===
<pre>$ nvidia-prime-run имяпрограммы</pre>
 
Например, при установленном пакете glxinfo можно запустить
Для работы Optimus/Prime необходимо:
<pre>$ nvidia-prime-run glxinfo | grep -i 'renderer.*string'</pre>
 
, убедившись, какой 3D-ускоритель задействован.
* Обновлённый графический стек (ядро, xserver, mesa)
* Загруженные драйвера KMS для обеих графических карт
* Загруженные драйвера DDX для обеих графических карт
 
Если всё хорошо, то <code>xrandr --listproviders</code> должен отобразить два ''провайдера'':
 
<pre>
$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x8a cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 2 outputs: 2 associated providers: 1 name:Intel
Provider 1: id: 0x66 cap: 0x7, Source Output, Sink Output, Source Offload crtcs: 2 outputs: 5 associated providers: 1 name:nouveau
</pre>
 
==== 3D оффлоадинг ====
 
Важно сказать Prime'у какую карту использовать для оффлоадинга. Например, для того, чтобы использовать Nouveau для оффлоадинга Intel'овской карточки:
 
<pre>
$ xrandr --setprovideroffloadsink nouveau Intel
</pre>
 
Когда это сделано, очень просто выбрать карту, которая должна использоваться. Для оффлоадинга приложения на дискретную карту, нужно передать ему переменную окружения DRI_PRIME=1. Когда приложение будет запущено, Оно будет использовать дискретную карту для рендеринга. Если нужно использовать встроенную карту, необходимо установить DRI_PRIME в 0 или не передавать его. Поведение можно посмотреть на следующем примере:
 
<pre>
$ DRI_PRIME=0 glxinfo | grep "OpenGL vendor string"
OpenGL vendor string: Intel Open Source Technology Center
$ DRI_PRIME=1 glxinfo | grep "OpenGL vendor string"
OpenGL vendor string: nouveau
</pre>
 
==== Использование видео-выходов на дискретной карточке ====
 
Если на дискретной карте есть видео-выходы, которые недоступны на первичной видео-карте, то их можно использовать с помощью "Reverse PRIME". После чего первичнаяв видео-карта будет использоваться для рендерига изображения, которое затем будет отправлено на дискретную видео-карту. Для этого нужно выполнить:
 
<pre>
$ xrandr --setprovideroutputsource nouveau Intel
</pre>
 
Когда это сделано, видео-выход карты nvidia будет доступен в xrandr, и можно сделать сделать следующее:
 
<pre>
$ xrandr --output HDMI-1 --auto --above LVDS1
</pre>
 
чтобы добавить второй монитор, который подключён к карте NVidia.
 
=== DRI3 ===
 
Реализация DRI3 стремится предоставить более пригодный способ использовать PRIME. Он требует несколько дополнительных шагов для установки:
 
* ядро версии 3.17 или выше
* XServer 1.16 с поддержкой DRI3
* Mesa 10.3 с поддержкой DRI3
* загруженный драйвера KMS для обоих карт
* загруженный драйвер DDX для первичной карты
 
''Необходимо, чтобы пользователь входил в группу <code>video</code>.''
 
Если всё хорошо, то ''оффлоадинг'' на вторичную карту осуществляется с помошью DRI_PRIME=1:
 
<pre>
$ DRI_PRIME=0 glxinfo | grep "OpenGL vendor string"
OpenGL vendor string: Intel Open Source Technology Center
$ DRI_PRIME=1 glxinfo | grep "OpenGL vendor string"
OpenGL vendor string: nouveau
</pre>


== Bumblebee ==
== Bumblebee ==
Строка 109: Строка 44:
5) Узнаем BusID видеокарт<ref>На Sisyphus за 20140209 для Lenovo B570e этот шаг и создание секции xorg.conf оказались по факту необязательны</ref>:
5) Узнаем BusID видеокарт<ref>На Sisyphus за 20140209 для Lenovo B570e этот шаг и создание секции xorg.conf оказались по факту необязательны</ref>:


<pre>$ lspci | grep VGA</pre>
<pre>$ lspci</pre>


<pre>00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
<pre>00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
Строка 116: Строка 51:
нас интересует BusID, относящийся к intel (00:02.0)
нас интересует BusID, относящийся к intel (00:02.0)


6) Создадим файл (от рута, можно через mc) /etc/X11/xorg.conf следующего содержания с указанием ранее полученного BusID:
6) Создадим файл (от рута, можно через mc) в /etc/X11/xorg.conf.d следующего содержания с указанием ранее полученного BusID:


<pre> Section "Device"
<pre> Section "Device"
Строка 172: Строка 107:
=== проверка ===
=== проверка ===
8) Перезагружаем систему и проверяем работоспособность видеокарты nvidia:
8) Перезагружаем систему и проверяем работоспособность видеокарты nvidia:
<pre>$ optirun glxinfo | grep OpenGL</pre>
<pre>$ optirun glxinfo | grep OpenGL</pre>
 
должно получиться нечто подобное:
должно получится нечто подобное:
<pre>
 
OpenGL vendor string: NVIDIA Corporation
<pre>OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 540M/PCIe/SSE2
OpenGL renderer string: GeForce GT 540M/PCIe/SSE2
OpenGL version string: 4.3.0 NVIDIA 310.19
OpenGL version string: 4.3.0 NVIDIA 310.19
OpenGL shading language version string: 4.30 NVIDIA via Cg compiler
OpenGL shading language version string: 4.30 NVIDIA via Cg compiler
OpenGL extensions:</pre>
OpenGL extensions:
 
</pre>
Можно запускать нужные приложения на видеокарте nvidia командой от пользователя, входящего в группу xgrp<ref>см. вывод команды id и файл /etc/group</ref>:
Можно запускать нужные приложения на видеокарте nvidia командой от пользователя, входящего в группу xgrp<ref>см. вывод команды id и файл /etc/group</ref>:
<pre>$ optirun приложение</pre>
<pre>$ optirun приложение</pre>
Запущенные без optirun приложения будут работать на видеокарте intel, при этом видеокарта nvidia будет выключена.
Запущенные без optirun приложения будут работать на видеокарте intel, при этом видеокарта nvidia будет выключена.


P.S. Замечено на р6, что на 32-х разрядных системах bumblebee падает после отработки команды optirun, для повторного запуска команды optirun необходимо перезапустить сервис bumblebee:
P.S. На р6 замечено, что на 32-разрядных системах bumblebee падает после отработки команды optirun, для повторного запуска команды optirun необходимо перезапустить сервис bumblebee:
 
<pre># service bumblebeed restart</pre>
<pre># service bumblebeed start</pre>
Замечено, что в ряде случаев сервис bumblebeed не стартует автоматически при перезагрузке системы и требуется его включение в явном виде. Для проверки следует выполнить команду:
 
Замечено что в ряде случаев сервис bumblebeed не стартует автоматически при перезагрузке системы и требуется его включение в явном виде. Для проверки следует выполнить команду:
<pre># service bumblebeed status</pre>
<pre># service bumblebeed status</pre>
Если сервис не активен (вместо active выводится  unknown или что-подобное), то для включения сервиса нужно выполнить команду:
Если сервис не активен (вместо active выводится  unknown или что-подобное), то для включения сервиса нужно выполнить команду:
<pre># service bumblebeed enable</pre>
<pre># service bumblebeed enable</pre>
после чего имеет смысл перезагрузить систему.
после чего имеет смысл перезагрузить систему.


== Primus ==
== Primus ==
Строка 240: Строка 165:


== Ссылки ==
== Ссылки ==
* [http://forum.altlinux.org/index.php/topic,28509.0.html Тема на форуме]
*[[nvidia]]
* [[nvidia]]
*[[Optimus]]
* https://fedoraproject.org/wiki/Bumblebee
*[http://forum.altlinux.org/index.php/topic,28509.0.html Тема на форуме]
* http://nouveau.freedesktop.org/wiki/Optimus/
*[https://fedoraproject.org/wiki/Bumblebee Бамблби]
* http://steamcommunity.com/app/221410/discussions/6/846939854395110175
*[http://nouveau.freedesktop.org/wiki/Optimus/ Открытые драйверы]
*[http://steamcommunity.com/app/221410/discussions/6/846939854395110175 Стим]


== Примечания ==
== Примечания ==

Текущая версия от 04:52, 5 августа 2023

Данное руководство предназначено для счастливых обладателей ноутбуков с nvidia optimus на борту, которые используют дистрибутивы на базе бранча p8.

Примечание: Начиная с p9 bumblebee не поддерживается, всё должно работать без bumblebee.


PRIME

Это единственный способ (кроме автоматического выбора режима), который работает в Сизифе и в бренче p10

Если у вас современная видеокарта, которая поддерживается драйвером версии 435 или новее (посмотреть можно в /proc/driver/nvidia/version), то у вас есть поддержка технологии NVIDIA PRIME, достаточно запускать программы при помощи nvidia-prime-run (входит в пакет nvidia_glx_common)

$ nvidia-prime-run имяпрограммы

Например, при установленном пакете glxinfo можно запустить

$ nvidia-prime-run glxinfo | grep -i 'renderer.*string'

, убедившись, какой 3D-ускоритель задействован.

Bumblebee

Рассмотрим процесс установки, настройки и запуска видеокарты nvidia посредством bumblebee.

установка

1) Обновляем систему и ядро до текущего бранча:

# apt-get update
# apt-get dist-upgrade
# update-kernel

2) Узнаем версию установленного ядра:

$ uname -r
3.4.27-std-def-alt0.M60P.1

3) Для запуска проприетарного драйвера nvidia удалим модуль ядра от свободного драйвера nouveau (обратите внимание на сборку ядра):

# apt-get remove kernel-modules-drm-nouveau-std-def

и установим (если не установлены) проприетарный драйвер nvidia и модуль ядра для него:

# apt-get install kernel-modules-nvidia-std-def

4) Устанавливаем bbswitch для своего ядра и bumblebee:

# apt-get install kernel-modules-bbswitch-std-def bumblebee

настройка

5) Узнаем BusID видеокарт[1]:

$ lspci
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [GeForce GT 540M] (rev ff)

нас интересует BusID, относящийся к intel (00:02.0)

6) Создадим файл (от рута, можно через mc) в /etc/X11/xorg.conf.d следующего содержания с указанием ранее полученного BusID:

 Section "Device"
    Identifier     "Device1"
    Driver         "intel"
    VendorName     "onboard"
    BusID          "PCI:0:2:0"
#обратите внимание на двоеточия и количество 0
EndSection

Section "Monitor"
    Identifier "Monitor0"
    Option         "DPMS"
EndSection

Section "Screen"
    Identifier     "Screen0"   
    Device         "Device1"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection 

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

Section "Device"
    Identifier     "Device1"
    Driver         "intel"
    Option "AccelMethod" "uxa"
    VendorName     "onboard"
    BusID          "PCI:0:2:0"
#обратите внимание на двоеточия и количество 0
EndSection
Section "Monitor"
    Identifier "Monitor0"
    Option         "DPMS"
EndSection
Section "Screen"
    Identifier     "Screen0"   
    Device         "Device1"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

7) Удаляем файл /etc/X11/xorg.conf.d/10-monitor.conf и желательно удалить компонент от альтератора alterator-x11 или не производить через него настройку дисплея.

проверка

8) Перезагружаем систему и проверяем работоспособность видеокарты nvidia:

$ optirun glxinfo | grep OpenGL

должно получиться нечто подобное:

OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 540M/PCIe/SSE2
OpenGL version string: 4.3.0 NVIDIA 310.19
OpenGL shading language version string: 4.30 NVIDIA via Cg compiler
OpenGL extensions:

Можно запускать нужные приложения на видеокарте nvidia командой от пользователя, входящего в группу xgrp[2]:

$ optirun приложение

Запущенные без optirun приложения будут работать на видеокарте intel, при этом видеокарта nvidia будет выключена.

P.S. На р6 замечено, что на 32-разрядных системах bumblebee падает после отработки команды optirun, для повторного запуска команды optirun необходимо перезапустить сервис bumblebee:

# service bumblebeed restart

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

# service bumblebeed status

Если сервис не активен (вместо active выводится unknown или что-подобное), то для включения сервиса нужно выполнить команду:

# service bumblebeed enable

после чего имеет смысл перезагрузить систему.

Primus

Для nvidia optimus собран primus, предлагающий некоторое улучшение производительности.

установка

9) Устанавливаем primus:

# apt-get install primus

проверка

Команда запуска приложений через primus:

$ primusrun приложение

Также остается возможность запуска приложений через VirtualGL:

$ optirun приложение

Для отключения вертикальной синхронизации у primus:

$ vblank_mode=0 primusrun приложение

Для нормальной работы 32-х разрядных приложений и игр на 64-х разрядной системе через primus должны быть установлены следующие пакеты: i586-primus, i586-xorg-drv-intel, i586-xorg-dri-intel, i586-nvidia_glx, i586-nvidia_glx_common.

Для запуска игр в steam на карте nvidia primus (особенно 32-х разрядный) обязателен к установке! Чтобы игра стартовала через primus необходимо в свойствах запуска игры в steam прописать следующее:

primusrun %command%

где %command% переменная (не надо ее менять на команду запуска игры), steam сам подставит нужную команду.

Запуск nvidia-settings с установленным bumblebee :

optirun nvidia-settings -c :8

или

primusrun nvidia-settings -c :8

Ссылки

Примечания

  1. На Sisyphus за 20140209 для Lenovo B570e этот шаг и создание секции xorg.conf оказались по факту необязательны
  2. см. вывод команды id и файл /etc/group