如何检查正在使用哪个图形控制器

如何检查正在使用哪个图形控制器

在我的 Linux 笔记本电脑上,我有两个 VGA 兼容控制器(信息来自lshw):

  • 产品:GK107 [GeForce GT 640M]
    物理 ID:0
    总线信息:pci@0000:01:00.0
    ..
    时钟:33MHz
    功能:pm msi pciexpress vga_controller bus_master cap_list
    配置:driver=nouveau Latency=0
    资源:irq:16 内存:f2000000-f2ffffff 内存:e0000000-efffffff 内存:f0000000-f1ffffff ioport:3000(size=128)
  • 产品:第三代核心处理器图形控制器
    物理 ID:2
    总线信息:pci@0000:00:02.0
    时钟:33MHz
    功能:msi pm vga_controller bus_master cap_list rom
    配置:driver=i915 delay=0
    资源:irq:44 内存:f3000000-f33fffff 内存:d0000000-dfffffff ioport:4000(size=64)

lspci | grep VGA输出:

  • 00:02.0 VGA 兼容控制器:英特尔公司第三代酷睿处理器图形控制器(rev 09)
  • 01:00.0 VGA 兼容控制器:NVIDIA Corporation GK107 [GeForce GT 640M](rev a1)

当我运行时,glxgears我得到了以下输出(应用程序正在运行时):

libGL 错误:无法加载驱动程序:i965
 libGL 错误:使用 LIBGL_DEBUG=verbose 重试以获取更多详细信息。
 XIO:X 服务器“:0”上发生致命 IO 错误 11(资源暂时不可用)
       已处理 2968 个请求(已知已处理 2966 个),剩余事件为 0 个。

所以我猜想英特尔 VGA 会出现故障?

我已经安装了以下驱动程序:

  • 英特尔
  • xf86-video-intel 2.20(X.org Intel i810/i830/i915/945G/G965+ 视频驱动程序)
  • xf86-新视频

1如何检查系统/程序使用了哪个控制器

2如何确保使用特定的控制器

3 我如何确保加载驱动程序 i965,而不是 i915(从输出lshw)?(适合我的英特尔 agp)

4为什么lshw显示时钟:33MHz? GeForce 640M 应为 625 MHz

我正在使用 Linux Arch。

答案1

  1. 要找出系统/程序当前使用哪个图形控制器,请使用以下两个命令:

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

    第一个文件将为您提供所有已加载模块(或 X 尝试加载的模块)的列表,第二个文件将为您提供配置为在您的机器上运行的所有设备的列表。这些文件的交集为您提供了正在运行的控制器。

  2. 定义在/etc/X11/xorg.conf

    不要讲太多细节,而是分部分定义Driver线条Device

  3. 如果已在 中安装和配置/etc/X11/xorg.conf,它将运行。请记住,驱动程序有时是通用的,这意味着英伟达是所有 nvidia 卡的驱动程序,因此 i915 可能是 i965 的适当驱动程序。

  4. lshw@Hennes 上面已经部分回答了这个问题。显示 PCI 或 PCIe 上每个设备的 PCI 总线速度似乎是一个错误。查看此图片:NVidia GeForce GT220(不是我的,但我有两个 NVidia,并且 lshw 都显示 33MHz)。

答案2

  • 4

625 不是 PCIe 的总线频率;我认为您混淆了线路速度、插头速度和 PCI 总线速度。线路速度是位/位。而 PCI 总线宽度为 32b。因此,PCI 总线可以支持 33MHz*32=1056Mb/s(所有设备共享)。虽然 PCIe v1 提供每条线路 2.5GT/s,但事务不是位(事务是数据线上的位,但数据线需要传输大量数据包描述标头;因此您可能希望每条线路 2.3Gb/s)。

但是... PCIe 的映射方式不同;事实上,它是动态路由和分配的。因此,子卡在 PCI 总线上声明(读取为 32b 33MHz),但物理上映射到 PCI 交换机上;交换机可能会分配更多资源(64b 宽度),速度未说明。

USB 的情况也差不多。USB3 的速率为 5Gb/s,通过标明 480Mb/s 的集线器建立。根集线器永远不能声明超过“高速”(480)。因此设备被映射到那里。但是,在“高速链路”内,您可以使用“5Gb/s 数据速率”。这就是为什么当 USB3 出现时,USB 树总是显示 2 棵树;并且 USB3 设备是双重映射的。在 USB2 树内映射 USB3 设备是必需的,除其他外,还用于电源管理(在添加其他 USB2 设备后计算每个分支消耗的总电流)。

这就是为什么当我看到 625MHz 的设备频率低于 33MHz 总线时我并不感到惊讶或担心。

或者 625 是 RAM 速度,与 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 的错误,它可能会忽略该配置,甚至没有说出来(也没有说明为什么)。

相关内容