
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 VGA
saí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, glxgears
recebo 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 lshw
saída)? (o adequado para meu intel agp)
4Por que lshw
mostrarelógio: 33 MHz? Para GeForce 640M deve ser 625 MHz.
Estou usando o Linux Arch.
Responder1
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.
Defina-o em
/etc/X11/xorg.conf
Não quero entrar em muitos detalhes, mas defina
Driver
a linha naDevice
seção.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.@Hennes já respondeu parcialmente acima. Parece que é um
lshw
bug 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).