Como utilizar duas gpus em notebook optimus com drive legacy 390xx

1. Como utilizar duas gpus em notebook optimus com drive legacy 390xx

Eduardo Solano
proxlu

(usa Outra)

Enviado em 05/10/2023 - 23:59h

Como utilizar bumblebee e nvidia-xrun com o mesmo bbswitch e ambos no mesmo sistema!

O intuito desse artigo é obter uma funcionalidade semelhante a notebooks optimus da quarta geração de gpus em diante, que é o "prime_render_offload", e acredito que se você chegou a esse artigo é porque o "prime_render_offload" não funcionou para você por alguma falta de suporte.

Nesse artigo irei ensinar a forma que uso a gpu nvidia em conjunto com a gpu intel, para obter o melhor desempenho/economia em notebooks optimus com microarquitetura kepler (serie 6xx e 7xx) ou inferior. (3ª geração de gpus ou menor)
O que será mostrado aqui se aplica apenas ao drive legacy 390xx da nvidia ou inferior, ja que o mesmo não possui a funcionalidade "prime_render_offload" implementada a ele, apenas drivers da linha principal o possuem. Dado todos os avisos, continue acompanhando o artigo até o final para que tudo dê certo para você.

Sendo direto ao ponto, notebooks desse tipo não são muito compátiveis com distros como Ubuntu 20.04 LTS (Focal Fossa) ou maior, e derivados do Ubuntu também sofrem do mesmo problema. Ja que em seu kernel e servidor xorg, o Ubuntu fez mudanças significativas em como o sistema lida com o drive da nvidia, além disso, distros com soluções personalizadas para uso do "prime_render_offload", como OpenSuse e o "SusePrime" também tem sua forma específica de lidar com esses drivers, lesando assim notebooks optimus mais antigos.
Pelos motivos ditos anteriormente, recomendo fortemente que utilize distros Debian-Like, mas acredito que dê para adaptar o passo a passo para distros como Arch e SlackWare também.

Para esse passo a passo utilizaremos os seguintes pacotes:
- bumblebee
- nvidia-xrun (github)
- bbswitch
- virtualgl (sourceforge)
- primus

instale o drive legacy, caso não tenha instalado:

sudo apt install -y nvidia-legacy-390xx-driver


Instale o git, para instalar o nvidia-xrun do github:

sudo apt install -y git


Instale todos os pacotes com o comando abaixo:

sudo apt install -y nvidia-settings bbswitch-dkms bumblebee bumblebee-nvidia primus;wget https://sonik.dl.sourceforge.net/project/virtualgl/3.1/virtualgl_3.1_amd64.deb;sudo dpkg -i virtualgl_3.1_amd64.deb;sudo ln -s /opt/VirtualGL/bin/glxspheres64 /bin/glxspheres64;git clone https://github.com/Acatorn/nvidia-xrun.git;cd nvidia-xrun;sudo chmod +x bin/nvidia-xrun;sudo mv bin/nvidia-xrun /bin;sudo mv X11/* /etc/X11;sudo mv default/nvidia-xrun /etc/default;sudo mv modules-load.d/bbswitch.conf /etc/modules-load.d;sudo mv modeprobe.d/* /etc/modprobe.d;cd ..;rm -r nvidia-xrun


E por fim configure os arquivos informados da seguinte forma:
/etc/bumblebee/bumblebee.conf

# Configuration file for Bumblebee. Values should **not** be put between quotes

## Server options. Any change made in this section will need a server restart
# to take effect.
[bumblebeed]
# The secondary Xorg server DISPLAY number
VirtualDisplay=:8
# Should the unused Xorg server be kept running? Set this to true if waiting
# for X to be ready is too long and don't need power management at all.
KeepUnusedXServer=false
# The name of the Bumbleblee server group name (GID name)
ServerGroup=bumblebee
# Card power state at exit. Set to false if the card shoud be ON when Bumblebee
# server exits.
TurnCardOffAtExit=false
# The default behavior of '-f' option on optirun. If set to "true", '-f' will
# be ignored.
NoEcoModeOverride=false
# The Driver used by Bumblebee server. If this value is not set (or empty),
# auto-detection is performed. The available drivers are nvidia and nouveau
# (See also the driver-specific sections below)
Driver=nvidia
# Directory with a dummy config file to pass as a -configdir to secondary X
XorgConfDir=/etc/bumblebee/xorg.conf.d
# Xorg binary to run
XorgBinary=/usr/lib/xorg/Xorg

## Client options. Will take effect on the next optirun executed.
[optirun]
# Acceleration/ rendering bridge, possible values are auto, virtualgl and
# primus.
Bridge=virtualgl
# The method used for VirtualGL to transport frames between X servers.
# Possible values are proxy, jpeg, rgb, xv and yuv.
VGLTransport=proxy
# List of paths which are searched for the primus libGL.so.1 when using
# the primus bridge
PrimusLibraryPath=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primus
# Should the program run under optirun even if Bumblebee server or nvidia card
# is not available?
AllowFallbackToIGC=false


# Driver-specific settings are grouped under [driver-NAME]. The sections are
# parsed if the Driver setting in [bumblebeed] is set to NAME (or if auto-
# detection resolves to NAME).
# PMMethod: method to use for saving power by disabling the nvidia card, valid
# values are: auto - automatically detect which PM method to use
# bbswitch - new in BB 3, recommended if available
# switcheroo - vga_switcheroo method, use at your own risk
# none - disable PM completely
# https://github.com/Bumblebee-Project/Bumblebee/wiki/Comparison-of-PM-methods

## Section with nvidia driver specific options, only parsed if Driver=nvidia
[driver-nvidia]
# Module name to load, defaults to Driver if empty or unset
KernelDriver=nvidia-legacy-390xx
PMMethod=bbswitch
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib/x86_64-linux-gnu/nvidia:/usr/lib/i386-linux-gnu/nvidia:/usr/lib/x86_64-linux-gnu:/usr/lib/i386-linux-gnu
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib/nvidia,/usr/lib/xorg/modules
XorgConfFile=/etc/bumblebee/xorg.conf.nvidia
# If set to true, will always unload the kernel module(s) even with
# PMMethod=none - useful for newer Optimus models on which the kernel power
# management works out of the box to power the card on/off without bbswitch.
AlwaysUnloadKernelDriver=false

## Section with nouveau driver specific options, only parsed if Driver=nouveau
[driver-nouveau]
KernelDriver=nouveau
PMMethod=auto
XorgConfFile=/etc/bumblebee/xorg.conf.nouveau

/etc/X11/nvidia-xorg.conf

Section "Files"
ModulePath "/usr/lib/nvidia/legacy-390xx"
ModulePath "/usr/lib/x86_64-linux-gnu/nvidia"
ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg/modules"
ModulePath "/usr/lib/xorg"
ModulePath "/usr/lib/xorg/modules"
EndSection

Section "ServerLayout"
Identifier "layout"
Screen 1 "nvidia"
Inactive "intel"
EndSection

Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "PCI:1:0:0"
EndSection

Section "Screen"
Identifier "nvidia"
Device "nvidia"
# Option "AllowIndirectGLX" "on"
# Option "IndirectGLX" "on"
# Option "AllowEmptyInitialConfiguration" "Yes"
# Option "UseDisplayDevice" "none"
EndSection

Section "Device"
Identifier "intel"
Driver "modesetting"
Option "AccelMethod" "glamor"
Option "DRI" "3"
EndSection

Section "Screen"
Identifier "intel"
Device "intel"
EndSection

Para utilizar o bumblebee:

optirun -b none nvidia-settings -c :8
optirun -b primus /opt/VirtualGL/bin/glxspheres64
optirun /opt/VirtualGL/bin/glxspheres64

E para utilizar o nvidia-xrun:
Tecle ctrl+alt+f2, faça login e...

nvidia-xrun xterm


E é isso pessoal, espero ter ajudado e conforme forem surgindo problemas nos comentários eu vou atualizando esse artigo abaixo.

Problemas conhecidos e suas soluções:
...


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts