
На моем ноутбуке с Linux есть два VGA-совместимых контроллера (информация из lshw
):
- продукт: GK107 [GeForce GT 640M]
физический идентификатор: 0
информация о шине: pci@0000:01:00.0
..
тактовая частота: 33 МГц
возможности: pm msi pciexpress vga_controller bus_master cap_list
конфигурация: драйвер=nouveau задержка=0
ресурсы: irq:16 память:f2000000-f2ffffff память:e0000000-effffffff память:f0000000-f1ffffff ioport:3000(размер=128) - продукт: процессор Core 3-го поколения
физический идентификатор графического контроллера: 2
информация о шине: pci@0000:00:02.0
тактовая частота: 33 МГц
возможности: msi pm vga_controller bus_master cap_list
конфигурация rom: драйвер=i915 задержка=0
ресурсы: irq:44 память:f3000000-f33fffff память:d0000000-dfffffff ioport:4000(размер=64)
lspci | grep VGA
выход:
- 00:02.0 Контроллер, совместимый с VGA: Графический контроллер процессора Intel Corporation 3-го поколения Core (рев. 09)
- 01:00.0 Совместимый с VGA контроллер: NVIDIA Corporation GK107 [GeForce GT 640M] (rev a1)
При запуске glxgears
я получаю следующий вывод (во время работы приложения):
ошибка libGL: не удалось загрузить драйвер: i965 Ошибка libGL: попробуйте еще раз с LIBGL_DEBUG=verbose для получения более подробной информации. XIO: фатальная ошибка ввода-вывода 11 (ресурс временно недоступен) на X-сервере ":0" после 2968 запросов (из них 2966 обработано) с 0 оставшимися событиями.
Я так понимаю, что с Intel VGA это не сработает?
Я установил следующие драйверы:
- intel-dri
- xf86-video-intel 2.20 (видеодрайверы X.org Intel i810/i830/i915/945G/G965+)
- xf86-видео-новинка
1Как проверить, какой контроллер используется системой/программами??
2Как я могу гарантировать использование определенного контроллера??
3 Как мне убедиться, что загружен драйвер i965, а не i915 (из вывода lshw
)? (правильный для моего Intel AGP)
4Почему lshw
шоутактовая частота: 33 МГц? Для GeForce 640M должно быть 625 МГц.
Я использую Linux Arch.
решение1
Чтобы узнать, какой графический контроллер в данный момент используется системой/программами, используйте следующие две команды:
grep LoadModule /var/log/Xorg.0.log grep Driver /etc/X11/xorg.conf
Первый даст вам список всех загруженных модулей (или модулей, которые X пытался загрузить), а второй даст вам список всех устройств, которые настроены для работы на вашем компьютере. Пересечение этих файлов даст вам работающий контроллер.
Определите это в
/etc/X11/xorg.conf
Не вдаваясь в подробности, но определим
Driver
линию вDevice
сечении.Если он установлен и настроен в
/etc/X11/xorg.conf
, он будет работать. Пожалуйста, помните, что драйверы иногда являются универсальными, то естьnvidia— это драйвер для всех карт NVIDIA, поэтому i915 может быть подходящим драйвером для i965.@Hennes уже частично ответил на это выше. Похоже, это
lshw
ошибка, чтобы показывать скорость шины PCI для каждого устройства на PCI или PCIe. Посмотрите на эту картинку:NVidia GeForce GT220(не мой, но у меня две NVidia и lshw для обеих говорит 33MHz).
решение2
- 4
625 — это не частота шины для PCIe; я думаю, вы путаете скорость линии, скорость подключения и скорость шины PCI. Скорость линии — это бит на бит. В то время как шина PCI имеет ширину 32 бита. Таким образом, шина PCI может выдерживать 33 МГц * 32 = 1056 Мбит/с (совместно между всеми устройствами). В то время как PCIe v1 обеспечивает 2,5 ГТ/с на линию, но транзакция — это не бит (транзакция — это бит на линии данных, но линии данных должны передавать много описаний пакетов заголовков; поэтому вы можете надеяться на 2,3 Гбит/с на линию).
Но... PCIe не отображается таким же образом; на самом деле, он динамически маршрутизируется и выделяется. Таким образом, дочерние карты объявляются на шине PCI (читай 32b 33MHz), но физически отображаются на коммутаторе PCI; и коммутатор может выделять больше ресурсов (ширина 64b) с неуказанной скоростью.
USB — это примерно тот же беспорядок. USB3 — это скорости 5 Гбит/с, установленные через концентратор, который заявляет 480 Мбит/с. Корневой концентратор никогда не может объявить больше, чем «высокая скорость» (480). Поэтому устройство отображается там. Но внутри «высокоскоростного соединения» вы можете использовать «скорость передачи данных 5 Гбит/с». Вот почему деревья USB всегда показывают 2 дерева, когда USB3 рядом; и устройства USB3 отображаются дважды. Отображение устройства USB3 внутри дерева USB2 требуется, помимо прочего, для управления питанием (для вычисления общего тока, потребляемого на ветвь после добавления других устройств USB2).
Вот почему я не удивлен и не обеспокоен, увидев элемент с частотой 625 МГц ниже шины с частотой 33 МГц.
Или, может быть, 625 — это скорость оперативной памяти, вообще не связанная с шиной PCI.
решение3
- 1
Чтобы узнать, обслуживается ли карта водителем:
$ 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
Чтобы узнать, какая карта является картой по умолчанию для 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
Но ядро покажет используемый драйвер, даже если X вообще не обрабатывает карту.
- 2 / 3
xorg.conf может (и должен) очень помочь, но я уже сообщал о десятке ошибок в Xorg, связанных с тем, что он может игнорировать conf, и даже не говорил об этом (и почему).