como verificar qual controlador gráfico está em uso

como verificar qual controlador gráfico está em uso

No meu laptop Linux, tenho dois controladores compatíveis com VGA (informações de lshw):

  • produto: GK107 [GeForce GT 640M]
    id físico: 0
    informações do barramento: pci@0000:01:00.0
    ..
    relógio: 33MHz
    capacidades: pm msi pciexpress vga_controller bus_master cap_list
    configuração: driver=nouveau latência=0
    recursos: irq:16 memória: f2000000-f2ffffff memória:e0000000-efffffff memória:f0000000-f1ffffff porta io:3000(tamanho=128)
  • produto: processador Core de 3ª geração
    ID físico do controlador gráfico: 2
    informações de barramento: pci@0000:00:02.0
    relógio: 33MHz
    capacidades: msi pm vga_controller bus_master cap_list
    configuração rom: driver=i915 latência=0
    recursos: irq:44 memória:f3000000- f33fffff memória:d0000000-dfffffff ioport:4000(tamanho=64)

lspci | grep VGAsaída:

  • 00: 02.0 Controlador compatível com VGA: Controlador gráfico do processador Intel Corporation de 3ª geração Core (rev 09)
  • 01:00.0 Controlador compatível com VGA: NVIDIA Corporation GK107 [GeForce GT 640M] (rev a1)

Quando executo, glxgearsrecebo a seguinte saída (enquanto o aplicativo está em execução):

Erro libGL: falha ao carregar o driver: i965
 Erro libGL: tente novamente com LIBGL_DEBUG=verbose para mais detalhes.
 XIO: erro fatal IO 11 (recurso temporariamente indisponível) no servidor X ":0"
       após 2.968 solicitações (2.966 conhecidas processadas) com 0 eventos restantes.

Então suponho que falhe com Intel VGA?

Eu instalei os seguintes drivers:

  • intel-dri
  • xf86-video-intel 2.20 (drivers de vídeo X.org Intel i810/i830/i915/945G/G965+)
  • xf86-video-novo

1Como posso verificar qual controlador é usado pelo sistema/programas?

2Como posso garantir que um controlador específico seja usado?

3 Como posso garantir que o driver i965 seja carregado, em vez do i915 (da lshwsaída)? (o adequado para meu intel agp)

4Por que lshwmostrarelógio: 33 MHz? Para GeForce 640M deve ser 625 MHz.

Estou usando o Linux Arch.

Responder1

  1. Para descobrir qual controlador gráfico é usado atualmente pelo sistema/programas, use os dois comandos a seguir:

    grep LoadModule /var/log/Xorg.0.log
    grep Driver /etc/X11/xorg.conf
    

    O primeiro lhe dará uma lista de todos os módulos carregados (ou módulos que o X tentou carregar), e o segundo lhe dará uma lista de todos os dispositivos que estão configurados para rodar em sua máquina. A interseção desses arquivos fornece o controlador em execução.

  2. Defina-o em/etc/X11/xorg.conf

    Não quero entrar em muitos detalhes, mas defina Drivera linha na Deviceseção.

  3. Se estiver instalado e configurado em /etc/X11/xorg.conf, ele será executado. Tenha em mente que os drivers às vezes são genéricos, o que significanvidiaé o driver para todas as placas nvidia, então i915 pode ser o driver apropriado para i965.

  4. @Hennes já respondeu parcialmente acima. Parece que é um lshwbug mostrar a velocidade do barramento PCI para cada dispositivo em PCI ou PCIe. Verifique esta foto:Nvidia GeForce GT220(não é meu, mas tenho duas NVidias e lshw para ambas diz 33MHz).

Responder2

  • 4

625 não é uma frequência de barramento para PCIe; Acho que você está confuso entre a velocidade da linha, a velocidade do plug e a velocidade do barramento PCI. A velocidade da linha é bit por bit. Enquanto o barramento PCI tem largura de 32b. Portanto, um barramento PCI pode suportar 33MHz*32=1056Mb/s (compartilhado entre todos os dispositivos). Embora PCIe v1 forneça 2,5GT/s por linha, mas uma transação não é um pouco (uma transação é um pouco na linha de dados, mas as linhas de dados precisam transferir muitos cabeçalhos de descrições de pacotes; então você pode esperar 2,3Gb/ s por linha).

Mas... PCIe não é mapeado da mesma maneira; na verdade, ele é roteado e alocado dinamicamente. Portanto, as placas filhas são declaradas em um barramento PCI (leia 32b 33MHz), mas mapeadas fisicamente no switch PCI; e o switch pode alocar mais recursos (largura 64b) com velocidade não declarada.

USB é quase a mesma bagunça. USB3 são taxas de 5 Gb/s, estabelecidas em um hub que indica 480 Mb/s. O hub raiz nunca pode declarar mais do que "alta velocidade" (480). Portanto, o dispositivo está mapeado lá. Mas, dentro do "link de alta velocidade", você pode usar uma "taxa de dados de 5 Gb/s". É por isso que as árvores USB sempre mostram 2 árvores quando o USB3 está por perto; e dispositivos USB3 são mapeados duas vezes. O mapeamento de um dispositivo USB3 dentro da árvore USB2 é necessário, entre outras coisas, para gerenciamento de energia (para calcular a corrente total consumida por ramificação após adicionar outros dispositivos USB2).

É por isso que não estou surpreso ou preocupado em ver um item de 625 MHz abaixo de um barramento de 33 MHz.

Ou talvez 625 seja a velocidade da RAM, sem nenhuma relação com o barramento PCI.

Responder3

  • 1

Para saber se um cartão é manuseado por um motorista:

$ lspci | grep -E "VGA|3D" | cut -f1 -d" " | while read id ; do lspci -v -s $id ; done | grep -i -e "VGA" -e "3D" -e "Kernel driver" -e "Kernel module"
01:05.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI RS880 [Radeon HD 4200] (prog-if 00 [VGA controller])
        Kernel driver in use: radeon
        Kernel modules: radeon
02:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI RV710 [Radeon HD 4350/4550] (prog-if 00 [VGA controller])
        Kernel driver in use: radeon
        Kernel modules: radeon
03:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI RV710 [Radeon HD 4350/4550] (prog-if 00 [VGA controller])
        Kernel driver in use: radeon
        Kernel modules: radeon

# lspci | grep -E "VGA|3D" | cut -f1 -d" " | while read id ; do lspci -v -s $id ; done | grep -i -e "VGA" -e "3D" -e "Kernel driver" -e "Kernel module"
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09) (prog-if 00 [VGA controller])
        Kernel driver in use: i915
        Kernel modules: i915
01:00.0 VGA compatible controller: NVIDIA Corporation GF108GLM [NVS 5200M] (rev a1) (prog-if 00 [VGA controller])
        Kernel driver in use: nvidia
        Kernel modules: nvidia

Para saber qual cartão é o padrão para X:

$ cat /var/log/Xorg.0.log | grep "PCI:"
[  4328.398] (--) PCI: (0:1:5:0) 1002:9710:1458:d000 rev 0, Mem @ 0xd8000000/134217728, 0xfdae0000/65536, 0xfd900000/1048576, I/O @ 0x0000ae00/256
[  4328.398] (--) PCI:*(0:2:0:0) 1002:954f:1462:1618 rev 0, Mem @ 0xb0000000/268435456, 0xfd6e0000/65536, I/O @ 0x0000ee00/256, BIOS @ 0x????????/131072
[  4328.398] (--) PCI: (0:3:0:0) 1002:954f:1462:1618 rev 0, Mem @ 0xc0000000/268435456, 0xfdfe0000/65536, I/O @ 0x0000de00/256, BIOS @ 0x????????/131072

# cat /var/log/Xorg.0.log | grep "PCI:"
[    30.924] (--) PCI:*(0@0:2:0) 8086:0166:1028:0534 rev 9, Mem @ 0xf6400000/4194304, 0xd0000000/268435456, I/O @ 0x0000f000/64, BIOS @ 0x????????/131072
[    30.924] (--) PCI: (1@0:0:0) 10de:0dfc:1028:1534 rev 161, Mem @ 0xf5000000/16777216, 0xe0000000/268435456, 0xf0000000/33554432, I/O @ 0x0000e000/128, BIOS @ 0x????????/524288

Porém, o Kernel mostrará o driver em uso mesmo se o X não manusear a placa.

  • 2/3

xorg.conf pode (deveria muito) ajudar, mas já relatei uma dúzia de bugs contra o Xorg sobre o fato de ele poder ignorar o conf, e nem mesmo dizer isso (nem por que).

informação relacionada