リモート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/memo

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」にも修正を加える. フレーム数が落ちる現象への対処みたい.

--- /etc/X11/xorg.conf.orig     2024-09-04 22:25:31.728445815 +0900
+++ /etc/X11/xorg.conf  2024-09-04 22:26:07.479847975 +0900
@@ -42,6 +42,7 @@
     Driver         "nvidia"
     VendorName     "NVIDIA Corporation"
     BusID          "PCI:19:0:0"
+    Option         "HardDPMS" "true"
 EndSection
 
 Section "Screen"
@@ -52,5 +53,6 @@
     SubSection     "Display"
         Depth       24
     EndSubSection
+    Option         "HardDPMS" "true"
 EndSection

これで設定は一応完了. 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が出たら準備は成功かな.

接続方法: TurboVNC 経由

まずは 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」番号を添えてます

2024y09m05d_005644987.png
無事サーバにアクセスできると定義したパスワードが問われます.
2024y09m05d_005925194.png

定義したパスワードを入力して承認されると画面が表示されます
2024y09m05d_010052162.png

一応ベンチマークも取ってみた. 使ったアプリはこれ https://benchmark.unigine.com/ の 「SUPERPOSITION 2017」(サイズ1564MB)

2024y09m05d_015831248.png 2024y09m05d_015802304.png 2024y09m05d_015819896.png
感想:けっこう動きました

作業が終わったら繋げていた vnc サービスを停止します

[saber@rockylinux ~]$ /opt/TurboVNC/bin/vncserver -kill :1    <-- 停止は「X DISPLAY」の値を入れます

接続方法: mac xquartz 経由

一応 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に対して「そのまま開く」ボタンが現れる。直前の情報を加味して「これを本当に入れる?」って聞いてくるみたい。っで「そのまま開く」ボタンを押下して進めます。
2024y09m05d_221617850.png
すると下図の左が右に代わってインストールができます。
2024y09m05d_221727705.png 2024y09m05d_222154089.png

っで使ってみる. 接続方法が違いますから要注意

[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]$

結果の値は下図になります。

2024y09m05d_233612644.png

TurboVNCよりは低いけど使えるレベルかなと。

接続方法: mac 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 を起動します
2024y09m05d_234937649.png
っで起動したパネルにアクセス先とディスプレイ番号を入れてconnectすると、パスワードが聞かれて、認証さると windows 版と同じく相手先のディスクトップが表示されます
2024y09m05d_235449231.png 2024y09m05d_235630511.png

っで同じようにベンチマークテストを行ったら
2024y09m06d_000846622.png

windows版よりも高速みたいです。

macの方は vglconnect を使わずに TurboVNC の方がいいのかな。まぁーディスプレイ番号が面倒だけど、vncpasswordをきちんと定義すれば大丈夫かな

最新の60件
2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-06 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29 2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17 2024-09-12 2024-09-09 2024-09-08 2024-09-06 2024-09-05 2024-09-04 2024-09-02 2024-09-01 2024-08-31 2024-08-28 2024-08-18 2024-08-17 2024-08-16 2024-08-15 2024-08-14 2024-08-11

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-09-06 (金) 01:26:25