(1) glxgearsは、以下のようなオブジェクトイメージです。
# ldd /usr/bin/glxgears
linux-vdso.so.1 (0x00007ffff7ffa000)
libGL.so.1 => /lib64/libGL.so.1 (0x00007ffff7943000)
libm.so.6 => /lib64/libm.so.6 (0x00007ffff75c1000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007ffff727e000)
libc.so.6 => /lib64/libc.so.6 (0x00007ffff6eb8000)
libGLX.so.0 => /lib64/libGLX.so.0 (0x00007ffff6c86000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007ffff6a73000)
libGLdispatch.so.0 => /lib64/libGLdispatch.so.0 (0x00007ffff67bd000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ffff65b9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffff6399000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffff7dcf000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007ffff6170000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007ffff5f6c000)
(2) この時、
/usr/lib/libGLX.so.0、および
/usr/lib/libGLdispatch.so.0は、"GL Vendor-Neutral Dispatch library"によって提供されるベンダーに依存しないグラフィックス ライブラリです。
これらのライブラリは現在、NVIDIA の EGL 実装に完全な OpenGL ディスパッチ サポートを提供するために使用されています。
上記(1)の例では、 lddによって報告されるライブラリのリストには、libGLX.so.0、 およびlibGLdispatch.so.0が含まれていますので、ベンダーに依存しないグラフィックス ライブラリを利用しています。
(3) GLX クライアント ライブラリが GLVNDである場合、いくつかの環境変数で動作が変わります。
# glxinfo|grep OpenGL | # __GLX_VENDOR_LIBRARY_NAME=mesa glxinfo|grep OpenGL
OpenGL vendor string: NVIDIA Corporation | OpenGL vendor string: Mesa/X.org
OpenGL renderer string: Quadro P2200/PCIe/SSE2 | OpenGL renderer string: llvmpipe (LLVM 14.0.6, 256 bits)
OpenGL core profile version string: 4.6.0 NVIDIA 470.74 | OpenGL core profile version string: 4.5 (Core Profile) Mesa 22.1.5
OpenGL core profile shading language version string: 4.60 NVIDIA | OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none) OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile OpenGL core profile profile mask: core profile
OpenGL core profile extensions: OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 470.74 | OpenGL version string: 4.5 (Compatibility Profile) Mesa 22.1.5
OpenGL shading language version string: 4.60 NVIDIA | OpenGL shading language version string: 4.50
OpenGL context flags: (none) <
OpenGL profile mask: (none) <
OpenGL extensions: <
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 470.74 <
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 <
OpenGL ES profile extensions: <
下記の左右の出力を良く観察してみてください。__GLX_VENDOR_LIBRARY_NAME=mesaを指定するだけで速度が変化します。
# glxgears # __GLX_VENDOR_LIBRARY_NAME=mesa glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
297 frames in 5.0 seconds = 59.203 FPS 7738 frames in 5.0 seconds = 1547.462 FPS
293 frames in 5.0 seconds = 58.404 FPS 8054 frames in 5.0 seconds = 1610.700 FPS
mesa はオープンソースの OpenGL 実装で、これを介在させることで、最適なGLX実装を呼び出しますが、NVIDIAのプロプライエタリドライバはサポートされていません。
NVIDIAのプロプライエタリドライバをインストールした状態で、リフレッシュレートを無視した速度を得るためには、環境変数__GL_SYNC_TO_VBLANKを利用してください。
(RedHawkのOSバージョンを問いません)
# nvidia-smi
Wed Dec 21 09:14:15 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.74 Driver Version: 470.74 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Quadro P2200 On | 00000000:17:00.0 On | N/A |
| 47% 35C P8 4W / 75W | 135MiB / 5050MiB | 2% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 6214 G /usr/bin/Xorg 63MiB |
| 0 N/A N/A 7962 G /usr/bin/gnome-shell 69MiB |
+-----------------------------------------------------------------------------+
# __GL_SYNC_TO_VBLANK=1 glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
300 frames in 5.0 seconds = 59.808 FPS
300 frames in 5.0 seconds = 59.990 FPS
# __GL_SYNC_TO_VBLANK=0 glxgears
69655 frames in 5.0 seconds = 13930.989 FPS
75425 frames in 5.0 seconds = 15084.951 FPS
75414 frames in 5.0 seconds = 15082.797 FPS
75422 frames in 5.0 seconds = 15084.340 FPS
なお、これらの環境変数の説明は、NVIDIAサイトのREADME
Chapter 11.Specifying OpenGL Environment Variable Settings

に記述されています。
また、システム全体にこの値を設定するためには、
/etc/environment または、ファイルに下記の内容を追加してください。
__GL_SYNC_TO_VBLANK=0
__GLX_VENDOR_LIBRARY_NAME=nvidia
ユーザーがログインする際、最初に/etc/environment ファイルから環境変数を設定します。
ログインを伴わない場合には、
~/.bashrcファイル等で環境変数を設定します。
export __GL_SYNC_TO_VBLANK=0
export __GLX_VENDOR_LIBRARY_NAME=nvidia
注意:
__GLX_VENDOR_LIBRARY_NAME=nvidiaは、OpenGLのライブラリに対して、NVIDIA社のプロプライエタリドライバの利用を強制するための設定です
この設定は、下記の/lib64/libGLX_{$__GLX_VENDOR_LIBRARY_NAME}.so.0を呼び出すことになります。
# ls -l /lib64/libGLX*
lrwxrwxrwx 1 root root 15 4月 13 2022 /lib64/libGLX.so -> libGLX.so.0.0.0
lrwxrwxrwx 1 root root 15 4月 13 2022 /lib64/libGLX.so.0 -> libGLX.so.0.0.0
-rwxr-xr-x 1 root root 141256 4月 13 2022 /lib64/libGLX.so.0.0.0
lrwxrwxrwx. 1 root root 23 6月 29 13:47 /lib64/libGLX_indirect.so.0 -> libGLX_nvidia.so.470.74
lrwxrwxrwx 1 root root 20 11月 8 19:17 /lib64/libGLX_mesa.so.0 -> libGLX_mesa.so.0.0.0
-rwxr-xr-x 1 root root 502032 11月 8 19:19 /lib64/libGLX_mesa.so.0.0.0
lrwxrwxrwx. 1 root root 23 6月 29 13:47 /lib64/libGLX_nvidia.so.0 -> libGLX_nvidia.so.470.74
-rwxr-xr-x. 1 root root 1289616 9月 14 2021 /lib64/libGLX_nvidia.so.470.74
lrwxrwxrwx 1 root root 27 11月 8 19:17 /lib64/libGLX_system.so.0 -> /usr/lib64/libGLX_mesa.so.0