A questão
Às vezes, parece que os aplicativos estão sendo renderizados lentamente. Não sei qual das várias GPUs está fazendo o trabalho para esse aplicativo específico. Gostaria de saber qual GPU está renderizando uma janela ou aplicativo. Como faço para descobrir isso por janela ou por processo?
Informação do sistema
Meu desktop está executando o Ubuntu 23.10 em um Intel Skull Canyon NUC. Ele contém um estranho híbrido de CPU/GPU com CPU Intel e GPU AMD, no mesmo chip.
alan@nuc:~$ lscpu | grep Model\ name
Model name: Intel(R) Core(TM) i7-8809G CPU @ 3.10GHz
alan@nuc:~$ lspci | grep AMD
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI]
Polaris 22 XT [Radeon RX Vega M GH] (rev c0)
Eu também tenho uma GPU externa em um gabinete Thunderbolt.
alan@nuc:~$ lspci | grep GeForce
40:00.0 VGA compatible controller: NVIDIA Corporation
TU102 [GeForce RTX 2080 Ti Rev. A] (rev a1)
Tenho três monitores 1080p conectados ao NVIDIA 2080 Ti. Nenhum monitor está conectado aos conectores HDMI ou DisplayPort internos.
alan@nuc:~$ xrandr | grep "*"
1920x1080 60.00*+ 59.99 59.94 50.00
1920x1080 60.00*+ 59.94 50.00 29.97
1920x1080 60.00*+ 59.99 59.94 50.00
Estou executando a versão mais recente do driver da Nvidia.
alan@nuc:~$ lsmod | grep ^nvidia\
nvidia 56811520 920 nvidia_uvm,nvidia_modeset
alan@nuc:~$ modinfo nvidia | grep ^version
version: 535.161.07
alan@nuc:~$ dpkg -l nvidia-driver* | grep ^ii
ii nvidia-driver-535 535.161.07-0ubuntu0.23.10.1 amd64
NVIDIA driver metapackage
Editar : Adicionando isso graças à resposta abaixo de Alistair Buxton. Interessante que a GPU AMD seja o "Padrão" (que suspeito não ser o que desejo).
Então a resposta é que preciso usar switcheroo launch
ou iniciar usando o inicializador de aplicativos GNOME.
alan@nuc:~$ switcherooctl list
Device: 0
Name: Advanced Micro Devices, Inc. [AMD®/ATI] Polaris 22 XT [Radeon RX Vega M GH]
Default: yes
Environment: DRI_PRIME=pci-0000_01_00_0
Device: 1
Name: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A]
Default: no
Environment: __GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only
Meu fluxo de trabalho
Normalmente inicio aplicativos a partir de seu ícone no inicializador do GNOME Shell ou a partir de um script de shell que executo manualmente, que inicia todos os meus aplicativos de desktop na inicialização. No entanto, também existe a opção no inicializador para “Iniciar usando placa gráfica integrada”.
Por exemplo, aqui está o menu padrão do ícone do iniciador do Steam:
O problema
Às vezes, sinto que os aplicativos estão sendo renderizados lentamente.
Reafirmando a pergunta
Gostaria de saber como saber qual GPU está em uso por um processo ou janela.
Fico feliz em ouvir outras opiniões como:
- Você está vendo coisas
- É o raio que é lento
Não estou inclinado a fazer nada disso: :)
- Usar Wayland
- Use o driver nouveau de código aberto
- Remova a GPU NVidia
Execute
switcherooctl list
e você verá uma saída como esta para cada GPU:Observe a seção de meio ambiente. O Gnome Shell lança programas com
switcherooctl launch
, que apenas insere essas variáveis no ambiente do programa. Portanto, quando você quiser determinar em qual GPU um programa está sendo executado, verifique/proc/$pid/environ
as variáveis de ambiente que correspondem a um dos dispositivos da lista.Edite para adicionar: meu entendimento é que o Gnome só usa switcheroo se você escolher explicitamente uma das opções "integradas" ou "discretas". Caso contrário, ele apenas executa o programa normalmente. Você não verá nenhum conjunto de variáveis no ambiente e, na ausência de qualquer outra configuração, o programa estará sendo executado em qualquer GPU à qual seu monitor esteja conectado.
Mas observe que não uso o Gnome ou uma configuração de GPU dupla, então posso estar errado sobre isso.
Você pode verificar se
switcheroo launch
funciona para um cartão específico usando-o para iniciarglxgears -info
e verificando o valorGLX_RENDERER
na parte superior da saída.