远程屏幕外渲染


10

我的研究实验室最近添加了一个服务器,该服务器具有强大的NVIDIA图形卡,我们希望将其用于科学计算。由于它不是工作站,因此我们必须通过ssh连接远程运行我们的作业。我们的大多数应用程序都需要将opengl渲染到屏幕外的缓冲区中,然后在CUDA中对结果进行图像分析。

我的初步调查表明,X11转发是个坏主意,因为opengl渲染将在客户端计算机(或更确切地说是X11服务器,这是一个令人困惑的命名约定!)上发生,并且在发送大量纹理时会遇到网络瓶颈。我们将永远不需要显示输出,因此似乎不需要X11转发,但是Opengl需要将$ DISPLAY设置为有效值,否则我们的应用程序将无法运行。我确定存在执行此操作的渲染场,但是如何完成呢?我认为这可能是一个简单的X11配置问题,但我对它太陌生,无法知道从哪里开始。

我们正在运行未安装gdm,gnome等的Ubuntu服务器10.04。但是,已安装xserver-xorg软件包。


我会尝试<code> x11vnc </ code>,但是它不太可能工作
Hubert Kario 2010年

Answers:


6

自问这个问题已经有一段时间了,所以我想我提到了我们最终使用的解决方案。

劫持本地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)或pbuffer)不存在此问题。

劫持服务器的本地Xscreen并不是理想的解决方案,因此,在此过程中,我找到了一些替代方案:

虚拟帧缓冲区

Xvfb是一个选项,但是它对我不起作用,因为OpenGL不能从硬件加速中受益,并且不支持帧缓冲对象,而这是CUDA与OpenGL互操作所必需的。但是,这在不接受劫持本地屏幕或用户无法获得xhost特权的情况下可能是一个可行的选择。

虚拟GL

从VirtualGL网站:

VirtualGL是一个开源软件包,它使任何Unix或Linux远程显示软件都能够以完全3D硬件加速运行OpenGL应用程序。

这正是我想要的,并且看起来很有希望,但是我没有时间处理新的库依赖关系,因此我没有对其进行测试。我的猜测是,一旦可以对其进行编译,安装和配置,这就是理想的解决方案。这就是VirtualBox和某些VNC服务器用来支持硬件加速3D的东西。


0

您可以在计算机上运行vfb-虚拟帧缓冲区,就像虚拟X11一样。我们曾经运行过那些需要HAD打开未曾看过的Xwindow的应用程序,而只是安装了vfb并将$ DISPLAY导出到该窗口-有点像cli HTH上的屏幕


2
谢谢你的提示!我开始研究xvfb,看起来渲染不使用图形硬件,而是渲染到虚拟内存中。有人可以确认/否认吗?如果是这种情况,我认为这种解决方案将不是很好,因为我们希望利用我们显卡的功能。
redmoskito
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.