SoftLayerにVirtualGLをインストールする (Installing VirtualGL on SoftLayer)

# はじめに _Introduction_

GPUを利用して3D描画を高速化できても、それをリモートのクライアントからも利用できないと意味がありません。
ここでは、VirtualGLを利用して、3Dグラフィックスをリモートから高速に描画する方法をご紹介します。
NVIDIAの公式ガイドによると、Tesla M60を仮想化して、リモートから3Dグラフィックスを高速描画するためには、XenDesktopもしくはVMware Horizonを使用することになっています。しかしこれらのデスクトップ仮想化技術は大掛かりでコストもかかります。
ここではオープンソースのVirtualGLとTurboVNCを利用して、仮想化されたGPU環境のデスクトップ画面をリモートのPCで描画、操作するための手順を紹介します。
_Even if you can speed up 3D rendering using the GPU, it is meaningless unless it can be used from remote clients.
Here, we will show you how to draw 3D graphics remotely from the remote using VirtualGL.
According to NVIDIA's official guide, in order to virtualize Tesla M60 and draw high-speed 3D graphics remotely, XenDesktop or VMware Horizon is supposed to be used. But these desktop virtualization technologies are massive and costly.
Here, we introduce the procedure for drawing and manipulating the desktop screen of the virtualized GPU environment on remote PC using open source VirtualGL and TurboVNC._

# VirtualGLのダウンロード _Downloading VirtualGL_

VirtualGLのインストール手順はこちらにあります。
_The installation procedure of VirtualGL is here._
https://cdn.rawgit.com/VirtualGL/virtualgl/2.5.2/doc/index.html#hd004001

VirtaulGLのダウンロードサイトはこちらです。
_The download site of VirtaulGL is here._
https://sourceforge.net/projects/virtualgl/files/2.5.2/

以下のコマンドを実行して32ビット版と64ビット版をダウンロードします。
_Execute the following command to download 32-bit version and 64-bit version._

```
# wget https://sourceforge.net/projects/virtualgl/files/2.5.2/VirtualGL-2.5.2.x86_64.rpm/download
# mv download VirtualGL-2.5.2.x86_64.rpm
# wget https://sourceforge.net/projects/virtualgl/files/2.5.2/VirtualGL-2.5.2.i386.rpm/download
# mv download VirtualGL-2.5.2.i386.rpm
```

# VirtualGLのインストール _Installing VirtualGL_

次のコマンドを実行して、32ビット版と64ビット版のVirtualGLをインストールします。
_Execute the following command to install 32-bit version and 64-bit version VirtualGL._

```
# yum install VirtualGL*.rpm
```


# VirtualGLのセットアップ _Setting up VirtualGL_

次のコマンドを実行して、X Windowを停止します。
_Execute the following command to stop the X Window._

```
# init 3
```

次のコマンドを実行して、VirtualGLを構成します。
_Execute the following command to configure VirtualGL._

```
# /opt/VirtualGL/bin/vglserver_config
```

もし次のようなエラーが表示されたら、前提パッケージをインストールします。
_If you get an error like the following, install the prerequisite package._

```
ERROR: SELinux is enabled, but the semanage program is not installed.  This
program is usually contained in a package called "policycoreutils" or
policycoreutils-python or "policycoreutils-python-utils".  On systems with
YUM or DNF, try running "yum install /usr/sbin/semanage" or
dnf install /usr/sbin/semanage.
```

```
# yum install "policycoreutils" "policycoreutils-python" "policycoreutils-python-utils"
```

再び、VirtualGLの構成を行います。
_Again, we will configure VirtualGL._


```
[root@caepbs99 ~]# /opt/VirtualGL/bin/vglserver_config                          
1) Configure server for use with VirtualGL
2) Unconfigure server for use with VirtualGL
X) Exit

Choose:
1

Restrict 3D X server access to vglusers group (recommended)?
[Y/n]


Restrict framebuffer device access to vglusers group (recommended)?
[Y/n]


Disable XTEST extension (recommended)?
[Y/n]
n
... Creating vglusers group ...
... Granting read permission to /etc/opt/VirtualGL/ for vglusers group ...
... Setting SELinux contexts to allow vglgenkey to run within GDM ...
... 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* ...
... Attempting to remove nvidia module from memory so device permissions
    will be reloaded ...
ERROR: Module nvidia is in use by nvidia_modeset
... Granting write permission to /dev/nvidia-modeset /dev/nvidia0 /dev/nvidiactl for vglusers group ...
... Modifying /etc/X11/xorg.conf.d/99-virtualgl-dri to enable DRI permissions
    for vglusers group ...
... Modifying /etc/X11/xorg.conf to enable DRI permissions
    for vglusers group ...
... Adding vglgenkey to /etc/gdm/Init/Default script ...
... Enabling 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.

IMPORTANT NOTE: Your system uses modprobe.d to set device permissions. You
must execute rmmod nvidia with the display manager stopped in order for the
new device permission settings to become effective.


1) Configure server for use with VirtualGL
2) Unconfigure server for use with VirtualGL
X) Exit

Choose:
x
```

X Windowを起動します。
_Start X Window._

```
# init 5
```

vglusersグループにvncuserユーザを登録します。
_Register the vncuser user in the vglusers group._

```
# usermod -aG vglusers vncuser
```

/etc/groupを確認します。
_Check /etc/group._

```
# cat /etc/group | grep vglusers
vglusers:x:501:vncuser
```

以降の手順はVNC Viewerを使って行います。
VNC Viewerで接続しているデスクトップ画面で操作します。
_The following procedure is done using VNC Viewer.
Operate on the desktop screen connected with VNC Viewer._

```
$ xauth merge /etc/opt/VirtualGL/vgl_xauth_key
$ xdpyinfo -display :0
$ /opt/VirtualGL/bin/glxinfo -display :0 -c
```

# 設定を確認する _Confirm settings_

VirtualGLが正しく導入されて、Direct Renderingが有効になっているか確認します。
_Make sure VirtualGL is installed correctly and Direct Rendering is enabled._

```
$ vglrun /opt/VirtualGL/bin/glxinfo -c
```

vglrunコマンドは、OpenGLアプリケーションをVirtualGL上で稼働させるために必須です。
_The vglrun command is mandatory for running OpenGL applications on VirtualGL._

glxinfoの出力に下記の2行が存在することを確認します。特にdirect renderingがYesとなっていないと、Softwareによる描画になり非常に低速となってしまいます。
_Make sure the following two lines are present in the glxinfo output. Especially if direct rendering is not Yes, it will be rendered by Software and it will become very slow._


```
direct rendering: Yes
OpenGL renderer string: Quadro FX GRID M60-8Q/PCI/SSE2
```

サンプルアプリケーションを実行します。
_Run the sample application._

```
$ vglrun /opt/VirtualGL/bin/glxsphere64
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/165689/7cce50a5-2391-3d88-c7ea-9c7f704a20d6.png)

なめらかに画像が回転している様子が見えると思います。
_You may see a smooth image rotation._

以上でセットアップは完了です。
_This completes the setup._