1. 序章

多くの場合、ベアボーンですが、Linuxマシンには、ビデオカードまたはグラフィックカードとも呼ばれるグラフィックプロセッシングユニット(GPU)が搭載されている場合があります。 暗号通貨マイニング、ゲームサーバー、または単にデスクトップエクスペリエンスを向上させるために、アクティブなグラフィックカードの監視と制御が不可欠な場合があります

このチュートリアルでは、現在アクティブで使用中のGPUを確認する方法について説明します。 最初に、いくつかの一般的なビデオカードのセットアップについて説明します。 次に、グラフィックスコントローラーを列挙する方法について説明します。 その後、GPU情報を取得する手段としてレンダラー情報を検討します。 最後に、ドライバユーティリティと、プロセスごとにグラフィックの使用状況を一覧表示する方法について詳しく説明します。

このチュートリアルのコードは、GNU Bash5.1.4を使用したDebian11(Bullseye)でテストしました。 ほとんどのPOSIX準拠環境で機能するはずです。

2. GPUセットアップ

GPUは、メモリ、速度、パフォーマンスの点で大きく異なる可能性があります。 このため、マシンには2つ以上ある場合があります。

たとえば、マルチモニターゲームは、デュアル、トリプル、またはそれ以上のビデオカードで最適化できます。 ほとんどの場合、これは同じGPUのいくつかを意味します。 他の設定では、カードが異なる場合があります。 たとえば、3次元(3D)レンダリングでは、ライブ画像と静止画像のどちらが必要かが重要になります。

一方、暗号通貨マイニングやその他のGPUを多用するアプリケーションは、ハードウェアの障害に敏感です。 このような設定では、障害を簡単に確認して修正できるはずです。

最後に、 GPUはディスクリート(外部)または統合(内部)にすることができます。 両方のタイプが利用可能な場合、それらを切り替える機能は便利であるだけでなく、多くの場合必要になります。

もちろん、仕事に適したツールを見つけるには、カードのメーカーとモデルを知ることが重要です。

3. pciutilsおよびlshwを使用したデバイスの一覧表示

市場に出回っているビデオカードの大部分はPCI(Express)で動作するため、これらのバスアーキテクチャを対象とした基本情報を抽出できます。

たとえば、グラフィックカードのモデルを見つけて作成するには、pciutilsパッケージの一部であるlspciを使用します。

$ lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) (rev 03)
00:03.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 01)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 02)
01:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Sun LE [Radeon HD 8550M / R5
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 10)

ここでは、2つのGPUがあります。1つは外部、もう1つは統合されています。 さらに、VGA互換コントローラーおよびディスプレイコントローラーの後のテキストから、正確な製造元とタイプがわかります。

または、 lshw (ハードウェアの一覧表示)ツールを使用することもできます。

$ lshw -C display
  *-display
       description: VGA compatible controller
       product: Hyper-V virtual VGA
       vendor: Microsoft Corporation
       physical id: 8
       bus info: pci@0000:00:08.0
       version: 00
       width: 32 bits
       clock: 33MHz
       capabilities: vga_controller bus_master
       configuration: driver=hyperv_fb latency=0
       resources: irq:11 memory:f8000000-fbffffff memory:c0000-dffff
  *-graphics
       product: hyperv_fb
       physical id: 1
       logical name: /dev/fb0
       capabilities: fb
       configuration: depth=32 resolution=1024,768

上記の出力は仮想マシンからのものであることに注意してください。 ただし、productおよびvendorには、必要なデータが表示されます。

これらの詳細を取得する別の方法を見てみましょう。ただし、OpenGLとMesaを使用します。

4. レンダラー情報を表示する

システムによって識別されたハードウェアを取得したら、displayレンダラーに基づいてハードウェアを確認できます。 この目的のために、 glxinfo (グラフィックライブラリ拡張情報)を使用できます。

 $ glxinfo -B
name of display: :0
display: :0  screen: 0
[...]
OpenGL vendor string: X.Org
OpenGL renderer string: AMD RV620 (DRM 2.50.0 / 5.10.12-arch1-1, LLVM 11.0.1)
[...]

プロパティを取得するには、ディスプレイを開く必要があることに注意してください。 実際、これはディスプレイのレンダリングに使用されるGPU、つまりそのアクティブなビデオカードが実際に表示されていることを意味します。

または、[X21X] –listprovidersスイッチを使用してxrandrを実行することもできます。

$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x11f cap: 0x1, Source Output crtcs: 4 outputs: 6 associated providers: 0 name:NVIDIA-0
Provider 1: id: 0x52 cap: 0x2, Sink Output crtcs: 3 outputs: 3 associated providers: 0 name:modesetting

xrandr の出力は、現在の構成と物理的な接続によって異なります。 特に、上記の NVIDIA-0 は、現在のディスプレイにそのドライバーを使用していることを意味します。

一般に、より詳細なチェックに使用するツールは、使用するドライバーに大きく依存します。

5. GPUユーティリティ

実際、 GPUを管理する最良の方法は、ターゲットツールを使用することです。 ビデオカード市場は複占であるため、2つの主要ベンダーを見ていきます。

5.1. NVIDIA

このブランドの場合、主なユーティリティはnvidia-utilsまたは一般的なドライバーパッケージに含まれています。 特に、nvidia-smiは十分なデータを提供できます

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.14                 Driver Version: 390.14                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX TIT...  Off  | 0000:04:00.0     Off |                  N/A |
| 21%   50C    P8    31W / 250W |  11666MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX TIT...  Off  | 0000:06:00.0     Off |                  N/A |
| 21%   60C    P8    18W / 250W |    666MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX TIT...  Off  | 0000:07:00.0     Off |                  N/A |
| 25%   66C    P2    72W / 250W |   8656MiB / 12207MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
| GPU        PID    Type   Process name                                 Usage |
|=============================================================================|
|   1        666       G   /usr/bin/X                                 587 MiB |
|   0        667       C   perl                                     11307 MiB |
[...]
+-----------------------------------------------------------------------------+

それぞれのメモリ使用量が異なる3枚のNVIDIAカードがあります。 また、下の表は、ビデオカードを使用したプロセスを示しています。

実際、最初の列は一番上のテーブルへの参照であり、使用中のGPU番号が含まれています。 このため、グラフィックカードのアクティビティと使用状況の概要と統計があります。

5.2. AMD

同様に、レガシーATI /AMDCatalystドライバーパッケージのaticonfigも、同様の目的を果たすことができます。

$ aticonfig --odgc --odgt
Default Adapter - AMD Radeon HD 7970
                            Core (MHz)   Memory (MHz)
           Current Clocks :     880         1375
             Current Peak :     880         1375
  Configurable Peak Range : [800-1000]   [1300-1600]
                 GPU load :    66%

Default Adapter - AMD Radeon HD 7970
           Sensor 0: Temperature - 66.60 C

この場合、データが不足していることに注意してください。 さらに、新しいAMDGPUAll-OpenおよびAMDGPU-Proドライバーはまだそのようなツールを提供していないようです。

この出力が手元にあるので、アクティブなGPUがどれであり、何が機能しているかを確認するためのより多くの方法を調べてみましょう。

6. よりアクティブなビデオカードの検出方法

NVIDIAでは、ディスクリートカードでディスプレイまたはツールを確実に実行するために、 bumblebee パッケージの両方の部分であるoptirun(Optimized Run)またはその後継のprimusrunを使用できます。

$ primusrun glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce 940M/PCIe/SSE2
OpenGL core profile version string: 4.5.0 NVIDIA 387.34
OpenGL core profile shading language version string: 4.50 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 387.34
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:

GeForceカードがアクティブなNVIDIAGPUであることがわかります。 この記事の執筆時点では、AMD用の同様のツールはありません。

さらに、radeontopまたはnvtopツールを介してどのプロセスが外部カードを使用しているかを確認できます。 後者は大量のデータとオプションを提供します。

$ nvtop
 Device 0 [NVIDIA GeForce GTX 1060 6GB] PCIe GEN 3@ 8x RX: 328.1 MiB/s TX: 28.32 MiB/s
 GPU 1518MHz MEM 4006mhz TEMP  45 C FAN  27% POW  28 / 120 W
 GPU[|||                     12%] MEM[||                0.404Gi/5.933Gi]
 Device 1 [NVIDIA GeForce GTX 1060 6GB] PCIe GEN 1@ 8x RX: 0.000 KiB/s TX: 0.000 KiB/s
 GPU 139MHz  MEM 405MHz  TEMP  30 C FAN  33% POW   6 / 120 W
Setup       Chart Options              Metric Displayed in Graph (NVIDIA GeForce GTX 1060)
General     [ ] Reverse plot direction Maximum of 4 metrics per GPU
Devices      -> Displayed all GPUs     [*] GPU utilization rate
Chart     >  -> Displayed GPU 0        [ ] GPU memory utilization rate
Processes    -> Displayed GPU 1        [*] GPU encoder rate
                                       [ ] GPU decoder rate
                                       [ ] GPU temperature
                                       [ ] Power draw rate (current/max)
                                       [ ] Fan speed
                                       [ ] GPU clock rate
                                       [ ] GPU memory clock rate
                                                                                           
                                                                                           
EnterToggle ESCExit Arrow keysNavigate Menu +/-Increment/Decrement Values F12Save Config

対照的に、radeontopはかなり制限されています。

$ radeontop
      radeontop v1.2-29-g50cc248, running on VEGA10 bus 44, 120 samples/sec      
                                                                                 
                    Graphics pipe  81,67% |]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
------------------------------------------+--------------------------------------
                     Event engine   0,00% |                                      
      Vertex Grouper + Tesselator  10,00% |]]]
                                          |                                      
                Texture addresser  41,67% |]]]]]]]]]]]]]]]                       
                                          |                                      
                    Shared Export  52,50% |]]]]]]]]]]]]]]]]]]]
      Sequencer Instruction Cache   1,67% |
              Shader Interpolator  55,00% |]]]]]]]]]]]]]]]]]]]]
                                          |                                      
                   Scan Converter  57,50% |]]]]]]]]]]]]]]]]]]]]]
               Primitive Assembly  13,33% |]]]]
                                          |                                      
                      Depth Block  50,00% |]]]]]]]]]]]]]]]]]
                      Color Block  50,00% |]]]]]]]]]]]]]]]]]
                                          |                                      
                496M / 8143M VRAM   6,10% |]]
                 153M / 8166M GTT   1,87% |
       0,95G / 0,94G Memory Clock 100,00% |]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
       1,77G / 1,75G Shader Clock 101,33% |]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
[...]

明らかに、どちらもLinux topのインターフェースをコピーすることを目的としています。 アクティブなカードは、メモリ使用量によって識別されます。

複数のGPUを搭載したradeontopの場合、詳細を表示するには、 -b –bus )経由でバスを選択する必要があります。与えられたカード。

7. 概要

この記事では、Linuxシステムのアクティブなビデオカードをチェックおよび監視するためのオプションについて説明しました。 結論として、このデータを取得するための普遍的な方法と特殊な方法の両方があり、後者はドライバーと外部ユーティリティに依存します。