リモートPCで3D描画速度を上げたい.
本家様https://virtualgl.org/ githubhttps://github.com/VirtualGL/virtualgl
Linux-PC環境において、X描画(2D/3D)を担当するPC側のXサーバ描画をより高速にするために、
大本のXクライアント側(計算機側)のリソースを使い描画を補助して、その結果をPC側に流して、PC側のX描画(2D/3D)の負担/未対応を減らす。
X11においてサーバとクライアントという名称はちょいと意味合いが違います. ややこしいのですが
3Dな重い処理はXクライアント側(計算機側)のグラフィックカードに任せるって感じで、その担当が「VirtualGL」となる.
VirtualGLをXクライアント(計算機)側にインストールします。RTX A2000を搭載したrockylinux8です.
最新版はgithubページから得られます
手順とかは右サイトで. https://rawcdn.githack.com/VirtualGL/virtualgl/3.1.1/doc/index.html
[root@rockylinux ~]# cat /etc/redhat-release
Rocky Linux release 8.10 (Green Obsidian)
[root@rockylinux ~]# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 535.183.01 Sun May 12 19:39:15 UTC 2024
GCC version: gcc version 8.5.0 20210514 (Red Hat 8.5.0-22) (GCC)
[root@rockylinux ~]# nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
[root@rockylinux ~]#
[root@rockylinux ~]# wget https://github.com/VirtualGL/virtualgl/releases/download/3.1.1/VirtualGL-3.1.1.x86_64.rpm
[root@rockylinux ~]# rpm -qpli ./VirtualGL-3.1.1.x86_64.rpm <--rpm中身の確認
[root@rockylinux ~]# dnf localinstall ./VirtualGL-3.1.1.x86_64.rpm
[root@rockylinux ~]# systemctl isolate multi-user.target <-- gdm関係を停止します
[root@rockylinux ~]# rmmod nvidia_drm nvidia_uvm nvidia_modeset nvidia <-- 一応nvidiaカーネルモジュールも外しておきます
[root@rockylinux ~]# nvidia-xconfig --enable-all-gpus --allow-empty-initial-configuration --use-display-device=None <-- /etc/X11/xorg.confを作っておきます
WARNING: Unable to locate/open X configuration file.
New X configuration file written to '/etc/X11/xorg.conf'
[root@rockylinux ~]#
*nvidia由来のopenglファイルが必要のようなのでnvidiaドライバーのインストール時は「--no-opengl-files --no-libglx-indirect」を含めないで入れます. NVIDIA#r0d41e3e
っで設定を施す.
「EGL back end only」で作れなかった. 「GLX + EGL back ends」で作ってます
[root@rockylinux ~]# /opt/VirtualGL/bin/vglserver_config
1) Configure server for use with VirtualGL (GLX + EGL back ends)
2) Unconfigure server for use with VirtualGL (GLX + EGL back ends)
3) Configure server for use with VirtualGL (EGL back end only)
4) Unconfigure server for use with VirtualGL (EGL back end only)
X) Exit
Choose:
1 <---- [1]を入力してリターン
WARNING: Configuring this server for use with VirtualGL will disable the
ability to log in locally with a Wayland session.
Continue?
[Y/n]
Y <---- [Y]を入力してリターン
Restrict 3D X server access to vglusers group (recommended)?
[Y/n]
n <---- [n]を入力してリターン
Restrict framebuffer device access to vglusers group (recommended)?
[Y/n]
n <---- [n]を入力してリターン
Disable XTEST extension (recommended)?
[Y/n]
Y <---- [Y]を入力してリターン
... Modifying /etc/security/console.perms to disable automatic permissions
for DRI devices ...
... Creating /etc/modprobe.d/virtualgl.conf to set requested permissions for
/dev/nvidia* ...
... Granting write permission to /dev/nvidia0 /dev/nvidiactl /dev/nvidia-modeset for all users ...
... Granting write permission to /dev/dri/card0 for all users ...
... Granting write permission to /dev/dri/renderD128 for all users ...
... Modifying /etc/X11/xorg.conf.d/99-virtualgl-dri.conf to enable DRI
permissions for all users ...
... Modifying /etc/X11/xorg.conf to enable DRI
permissions for all users ...
... Adding xhost +LOCAL: to /etc/gdm/Init/Default script ...
... Creating /usr/share/gdm/greeter/autostart/virtualgl.desktop ...
... Disabling Wayland in /etc/gdm/custom.conf ...
... Disabling XTEST extension in /etc/gdm/custom.conf ...
... Setting default run level to 5 (enabling graphical login prompt) ...
... Commenting out DisallowTCP line (if it exists) in /etc/gdm/custom.conf ...
Done. You must restart the display manager for the changes to take effect.
1) Configure server for use with VirtualGL (GLX + EGL back ends)
2) Unconfigure server for use with VirtualGL (GLX + EGL back ends)
3) Configure server for use with VirtualGL (EGL back end only)
4) Unconfigure server for use with VirtualGL (EGL back end only)
X) Exit
Choose:
X <---- [X]を入力してリターン
[root@rockylinux ~]#
そして「/etc/X11/xorg.conf」にも修正を加える. フレーム数が落ちる現象への対処みたい.
|
これで設定は一応完了. rebootして定義を読み込ませます.
[root@rockylinux ~]# reboot
ここで残念なお知らせです。これ以降ローカルでGUIログインはできなくなります。
この段階でコンソールからログインはできなくなります。
https://github.com/VirtualGL/virtualgl/issues/65
On Wayland-enabled Linux machines running GDM, configuring the machine as a VirtualGL server will disable the ability to log in locally with a Wayland session.
In general, logging in locally once the machine has been configured as a VirtualGL server is discouraged,
as this could disrupt VirtualGL's connection to the 3D X server and thus cause OpenGL applications running with VirtualGL to abort or freeze.
(google翻訳)
GDM を実行している Wayland 対応 Linux マシンでは、マシンを VirtualGL サーバーとして構成すると、Wayland セッションでローカルにログインする機能が無効になります。
一般に、マシンを VirtualGL サーバーとして構成した後は、ローカルにログインすることは推奨されません。
これは、VirtualGL と 3D X サーバーの接続が中断され、VirtualGL で実行されている OpenGL アプリケーションが中止またはフリーズする可能性があるためです。
このURLにはそれでもってならgreeterを駆使すればってありますが、、まぁー基本リモートからのSSH経由とVNC+VirtualGL経由のみって事になりそう.
正しくnvidiaドライバが有効であるか確認します
mobaXtermかTeraTerm+xmingとかでリモートアクセスします(X11有効にして)
[saber@c ~]$ ssh -l saber rockylinux -X
saber@rockylinux's password:
Activate the web console with: systemctl enable --now cockpit.socket
/usr/bin/xauth: file /home/saber/.Xauthority does not exist
[saber@rockylinux ~]$ glxinfo | grep -i opengl
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA RTX A2000/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 535.183.01
OpenGL core profile shading language version string: 4.60 NVIDIA
:
[saber@rockylinux ~]$
とglxinfoでNVIDIAが出たら準備は成功かな.
まずは vncサーバ を入れます. ここではTurboVNCを入れますhttps://www.turbovnc.org/ githubhttps://github.com/TurboVNC/turbovnc
RockyLinuxのリポジトリにある tigervnc でも行けるみたいですが上手く動かなかった...
[root@rockylinux ~]# dnf install https://github.com/TurboVNC/turbovnc/releases/download/3.1.2/turbovnc-3.1.2.x86_64.rpm
っで利用者ユーザでvncを利用する手続きを進めます
1. vncのパスワード付与
2. vncサービスプロセスを立ち上げる
っで利用者ユーザで計算機にSSH経由でログインして、vncアクセス時のパスワードを設けます
[saber@rockylinux ~]$ /opt/TurboVNC/bin/vncpasswd
Using password file /home/saber/.vnc/passwd
VNC directory /home/saber/.vnc does not exist, creating.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
[saber@rockylinux ~]$
次にvncサービスを立ち上げます
[saber@rockylinux ~]$ /opt/TurboVNC/bin/vncserver -vgl <--
Desktop 'TurboVNC: rockylinux:1 (saber)' started on display rockylinux:1
Starting applications specified in /opt/TurboVNC/bin/xstartup.turbovnc
(Enabling VirtualGL)
Log file is /home/saber/.vnc/rockylinux:1.log
[saber@rockylinux ~]$ /opt/TurboVNC/bin/vncserver -list <--確認
TurboVNC sessions:
X DISPLAY # PROCESS ID NOVNC PROCESS ID
:1 2924
[saber@rockylinux ~]$
その後、ユーザ側にある windows/mac の TurboVNC を開きます. vnc server欄には接続先のIP/マシン名と「X DISPLAY」番号を添えてます
無事サーバにアクセスできると定義したパスワードが問われます.
定義したパスワードを入力して承認されると画面が表示されます
一応ベンチマークも取ってみた. 使ったアプリはこれ https://benchmark.unigine.com/ の 「SUPERPOSITION 2017」(サイズ1564MB)
感想:けっこう動きました
作業が終わったら繋げていた vnc サービスを停止します
[saber@rockylinux ~]$ /opt/TurboVNC/bin/vncserver -kill :1 <-- 停止は「X DISPLAY」の値を入れます
一応 TurboVNCのintelmac版「TurboVNC-3.1.2-x86_64.dmg」の他に apple silicon向けの「TurboVNC-3.1.2-arm64.dmg」もあるので
xquartz経由でなくてもいいのかなと思いますが、xquartz で試してみます.
対象のmacは「Apple mac mini(M1)」 Apple M1 3.2GHz 8コア, 8GB mem, 256GB SSD, macOS Monterey 12.5 です。 apple siliconなmacです。
まずは macos版のVirtualGLを入れます. https://github.com/VirtualGL/virtualgl/releases/tag/3.1.1の「VirtualGL-3.1.1.dmg」を入手してインストール.
っが、「VirtualGL.pkgが悪質なソフトウエアかどうかAppleでは確認できないため、....」と掲示されてインストールできない。この場合は、この後システム設定の「プライバシーとセキュリティ」を開くと
下図のようにVirtualGL.pkgに対して「そのまま開く」ボタンが現れる。直前の情報を加味して「これを本当に入れる?」って聞いてくるみたい。っで「そのまま開く」ボタンを押下して進めます。
すると下図の左が右に代わってインストールができます。
っで使ってみる. 接続方法が違いますから要注意
[supervisor@mini-m1 ~]$ /opt/VirtualGL/bin/vglconnect saber@rockylinux <--- nvidia A2000を持つマシンに「vglconnect」でログインします
VirtualGL Client 64-bit v3.1.1 (Build 20240228)
Listening for connections on port 4242
Redirecting output to /Users/supervisor/.vgl/vglconnect-mini-m1.sybyl.local-org.xquartz:0.log
saber@rockylinux's password:
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu Sep 5 22:37:06 2024 from 192.168.0.158
[saber@rockylinux ~]$
[saber@rockylinux ~]$ glxinfo | grep -i opengl
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA RTX A2000/PCIe/SSE2
OpenGL version string: 4.6.0 NVIDIA 535.183.01
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
[saber@rockylinux ~]$
とアクセスできた。ここで TurboVNCの時と同様に ベンチマークを走らせてみた
[saber@rockylinux ~]$ cd Unigine_Superposition-1.1/
[saber@rockylinux Unigine_Superposition-1.1]$ /opt/VirtualGL/bin/vglrun ./Superposition
[VGL] NOTICE: Automatically setting VGL_CLIENT environment variable to
[VGL] 192.168.0.158, the IP address of your SSH client.
[saber@rockylinux Unigine_Superposition-1.1]$
結果の値は下図になります。
TurboVNCよりは低いけど使えるレベルかなと。
*前段のVirtualGLは不要です
xquartz 経由でもいいのですが、windowsと同じように TurboVNC の場合を記載します
https://www.turbovnc.org/ githubhttps://github.com/TurboVNC/turbovncからapple silicon向けの「TurboVNC-3.1.2-arm64.dmg」を入手して
mac mini(M1)に入れます
これも残念ながら弾かれるので「プライバシーとセキュリティ」を介してインストールします
その後、画面を引き出したい計算機にターミナルからSSHでログインして、vncserverを起動させます。
[supervisor@mini-m1 ~]$
[supervisor@mini-m1 ~]$ ssh -l saber rockylinux <-- mac miniのターミナルから計算機にアクセス
saber@rockylinux's password:
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu Sep 5 23:47:05 2024 from 192.168.0.158
[saber@rockylinux ~]$
[saber@rockylinux ~]$ /opt/TurboVNC/bin/vncserver -vgl <-- vncサーバ(vgl有効)を起動します
Desktop 'TurboVNC: rockylinux:1 (saber)' started on display rockylinux:1
Starting applications specified in /opt/TurboVNC/bin/xstartup.turbovnc
(Enabling VirtualGL)
Log file is /home/saber/.vnc/rockylinux:1.log
[saber@rockylinux ~]$ /opt/TurboVNC/bin/vncserver -list <-- 割り当てられたディスプレイ番号を確認
TurboVNC sessions:
X DISPLAY # PROCESS ID NOVNC PROCESS ID
:1 28192
[saber@rockylinux ~]$
っで mac miniにインストールした TurboVNC を起動します
っで起動したパネルにアクセス先とディスプレイ番号を入れてconnectすると、パスワードが聞かれて、認証さると windows 版と同じく相手先のディスクトップが表示されます
っで同じようにベンチマークテストを行ったら
windows版よりも高速みたいです。
macの方は vglconnect を使わずに TurboVNC の方がいいのかな。まぁーディスプレイ番号が面倒だけど、vncpasswordをきちんと定義すれば大丈夫かな