使用中のグラフィックコントローラを確認する方法

使用中のグラフィックコントローラを確認する方法

私の Linux ラップトップには、2 つの VGA 互換コントローラーがあります (情報元: lshw)。

  • 製品: GK107 [GeForce GT 640M]
    物理 ID: 0
    バス情報: pci@0000:01:00.0
    ..
    クロック: 33MHz
    機能: pm msi pciexpress vga_controller bus_master cap_list
    構成: ドライバー = nouveau レイテンシ = 0
    リソース: irq:16 メモリ:f2000000-f2ffffff メモリ:e0000000-efffffff メモリ:f0000000-f1ffffff ioport:3000(サイズ = 128)
  • 製品: 第 3 世代 Core プロセッサ グラフィックス コントローラ
    物理 ID: 2
    バス情報: pci@0000:00:02.0
    クロック: 33MHz
    機能: 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 プロセッサー グラフィックス コントローラー (rev 09)
  • 01:00.0 VGA互換コントローラ: NVIDIA Corporation GK107 [GeForce GT 640M] (rev a1)

実行すると、glxgears次の出力が得られます (アプリケーションの実行中)。

libGL エラー: ドライバーのロードに失敗しました: i965
 libGL エラー: 詳細については、LIBGL_DEBUG=verbose でもう一度試してください。
 XIO: X サーバー上の致命的な IO エラー 11 (リソースが一時的に利用できません) ":0"
       2968 件のリクエスト (既知の処理数は 2966 件) 後、イベントは 0 件残っています。

それで、Intel VGA では失敗するのでしょうか?

以下のドライバーをインストールしました:

  • インテル-DRI
  • xf86-video-intel 2.20 (X.org Intel i810/i830/i915/945G/G965+ ビデオ ドライバー)
  • xf86 ビデオ ヌーボー

1システム/プログラムがどのコントローラーを使用しているかを確認するにはどうすればいいですか?

2特定のコントローラーを確実に使用できるようにするにはどうすればいいですか?

3 出力から i915 ではなく i965 ドライバーがロードされていることを確認するにはどうすればよいでしょうかlshw? (私の Intel AGP には適切です)

4なぜlshwショークロック: 33MHz? GeForce 640Mの場合は625MHz

私はLinux Archを使用しています。

答え1

  1. システム/プログラムによって現在使用されているグラフィック コントローラーを確認するには、次の 2 つのコマンドを使用します。

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

    最初のファイルでは、ロードされているすべてのモジュール (または X がロードしようとしたモジュール) のリストが表示され、2 番目のファイルでは、ボックスで実行するように設定されているすべてのデバイスのリストが表示されます。これらのファイルの共通部分から、実行中のコントローラーがわかります。

  2. 定義する/etc/X11/xorg.conf

    あまり詳細には立ち入りませんが、セクションDriver内の行を定義します。Device

  3. にインストールされ、設定されている場合は/etc/X11/xorg.conf、実行されます。ドライバーは汎用的な場合があることに注意してください。つまり、エヌビディアはすべての NVIDIA カード用のドライバーなので、i915 は i965 に適したドライバーである可能性があります。

  4. lshw@Hennes はすでに上で部分的に回答しています。PCIまたは PCIe 上のすべてのデバイスの PCI バス速度を表示するのはバグのようです。次の画像を確認してください:NVIDIA GeForce GT220(私のものではないが、私は 2 つの NVidia を持っており、両方の lshw は 33MHz を示します)。

答え2

  • 4

625 は PCIe のバス周波数ではありません。ライン速度、プラグ速度、PCI バス速度を混同していると思います。ライン速度はビットあたりの速度です。一方、PCI バスは 32 ビット幅です。したがって、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 デバイスは二重にマップされるのはそのためです。USB3 デバイスを USB2 ツリー内にマップすることは、とりわけ、電源管理 (他の USB2 デバイスを追加した後、ブランチごとに消費される合計電流を計算するため) のために必要です。

そのため、33MHz バスより下の 625MHz のアイテムを見ても、私は驚きも心配もしません。

あるいは、625 は PCI バスとはまったく関係のない RAM 速度かもしれません。

答え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 を無視する可能性があり、そのこと (およびその理由) さえ示していないという、Xorg に対する 12 個のバグを報告しています。

関連情報