red*_*ito 11 x11 x11forwarding opengl
我的研究实验室最近添加了一台配备强大 NVIDIA 显卡的服务器,我们希望用它来进行科学计算。由于它不是工作站,我们必须通过 ssh 连接远程运行我们的作业。我们的大多数应用程序都需要对屏幕外缓冲区进行 opengl 渲染,然后在 CUDA 中对结果进行图像分析。
我的初步调查表明 X11 转发是一个坏主意,因为 opengl 渲染将发生在客户端机器上(或者更确切地说是 X11 服务器 - 多么令人困惑的命名约定!)并且在发送我们的大量纹理时会遇到网络瓶颈。我们永远不需要显示输出,所以似乎不需要 X11 转发,但是 Opengl 需要将 $DISPLAY 设置为有效的值,否则我们的应用程序将无法运行。我确定存在执行此操作的渲染农场,但它是如何完成的?我认为这可能是一个简单的 X11 配置问题,但我对它太陌生,不知道从哪里开始。
我们正在运行 Ubuntu 服务器 10.04,没有安装 gdm、gnome 等。但是,安装了 xserver-xorg 包。
自从我问这个问题已经有一段时间了,所以我想我会提到我们最终使用的解决方案。
劫持本地X屏
最后,我只是在服务器的本地 X 屏幕上运行远程 opengl 程序。机器运行的是Ubuntu服务器版,默认没有运行xserver,所以我必须设置一个xserver在启动时运行(我刚刚安装了Ubuntu的ubuntu-desktop包,用大锤杀死了一只蚊子),然后以 root 身份使用这些命令让我自己访问 X 屏幕:“export DISPLAY=:0.0; xhost + local:”。然后我可以 ssh 进入机器,调用“export DISPLAY=:0.0”,然后正常运行我的 opengl 程序。坐在远程机器上的任何人都会看到一个弹出窗口并观看我的程序运行,但我们没有连接显示器,所以这不是问题。
使用某种形式的离屏渲染很重要,因为如果窗口被另一个窗口遮挡,直接从屏幕颜色缓冲区读取像素可能会导致垃圾数据。由于您看不到 X 屏幕,因此很难知道是否发生了这种情况。离屏渲染(例如帧缓冲对象 (fbo) 或 pbuffers)没有这个问题。
劫持服务器的本地 Xscreen 并不是一个理想的解决方案,因此我在此过程中发现了一些替代方案:
虚拟帧缓冲区
Xvfb 是一个选项,但它对我不起作用,因为 OpenGL 没有从硬件加速中受益,并且不支持帧缓冲区对象,这是 CUDA 与 OpenGL 互操作性所必需的。尽管如此,这可能是一个可行的选择,其中劫持本地屏幕是不可接受的,或者用户无法获得 xhost 权限。
虚拟GL
从 VirtualGL 网站:
VirtualGL 是一个开源软件包,它使任何 Unix 或 Linux 远程显示软件都能够运行具有完整 3D 硬件加速的 OpenGL 应用程序。
这正是我想要的,看起来很有希望,但是我没有时间处理新的库依赖项,所以我没有测试它。我的猜测是,一旦我可以编译、安装和配置它,这就是理想的解决方案。这是 VirtualBox 和一些 VNC 服务器用来支持硬件加速 3D 的。
| 归档时间: |
|
| 查看次数: |
7892 次 |
| 最近记录: |