On 3/5/15 5:55 AM, Patric Schmitz wrote:
> I am trying VirtualGL for remote rendering on our visualization
> cluster and have it running by now. I am streaming to a GNU/Linux
> workstation using the VGL transports as of yet. The remote has a
> NVIDIA GeForce GTX 780 GPU.
>
> I measured the following framerates with glxgears:
>
> Locally, on my client machine: ~4500 fps
>
> Remote, without any forwarding or transport: ~27500

Do not use GLXgears as a benchmark.  It isn't an OpenGL benchmark.  It 
uses such a tiny geometry and screen size that, really, all it's 
measuring when you run it on a local display is the CPU speed and bus 
bandwidth.  And the results have absolutely no meaning in a remote 
display setting.  I mean, 27,000 fps?!  What does that even mean?!  Most 
people can't perceive more than 30 fps and definitely no more than 60.

Secondly, always disable frame spoiling (vglrun -sp) when running 
benchmarks in VirtualGL.  Otherwise, you are just measuring how fast 
VirtualGL can read back frames on the server, not how fast it can 
actually send them to the client.  (This is all in the VirtualGL User's 
Guide, by the way.)

The correct benchmark to use when measuring frame rates for VirtualGL is:

   /opt/VirtualGL/bin/glxspheres64

If you want a fair comparison of remote X11 vs. VirtualGL, then I 
suggest the following comparisons:

Run this in Remote X11:
   /opt/VirtualGL/bin/glxspheres64 -m

Run this in VirtualGL:
   vglrun -sp /opt/VirtualGL/bin/glxspheres64 -m


> X11 forwarding (no virtualgl): ~4500 - ~11000
> here the window stays black. Might that be related to the remote
> GLX implementation being nvidia and the local is AMD? If I test
> with another NVIDIA client, it doesn't work at all, failing with
> X Error of failed request:  BadValue (integer parameter out of
> range for operation). Is that expected behavior?

Obviously diagnosing bugs in remote display solutions that don't use 
VirtualGL is out of scope for a VirtualGL support list, but I can tell 
you that, yes, it's entirely possible that this is due to a mismatch in 
client vs. server GLX.  It is unclear from your description whether you 
are using SSH to forward X11, but if so, that could be the issue as 
well.  SSH won't let you forward certain X extensions (including GLX) 
unless you establish the connection with 'ssh -Y' instead of 'ssh -X'.


> Anyways using VirtualGL with the different compression types yields:
>
> proxy (X11): ~240 (with 370Mb/s of the 1000Mb/s LAN connection used)
>
> rgb: ~3300 (880Mb/s used)
>
> jpeg: ~3100 (110Mb/s used)
>
> xv: ~19300 BUT the client window stays black again. What can be
> reasons for this, and can I expect such a framerate realistically
> in case it works (on a high bandwidth connection)?

Again, the frame rates in GLXgears are completely bogus.  Use a real 
benchmark.  You may be running into the same SSH permission issue with 
XV as described above, so try 'ssh -Y'.  However, please note that the 
XV Transport is not intended for remote usage.  It was developed for the 
(now discontinued) Sun Ray ultra-thin client, which included an X proxy 
(called the Sun Ray Server Software or SRSS) that supported the X Video 
extension as a means of sending pre-encoded YUV frames through the Sun 
Ray Server and to the client without the server re-encoding them.  The 
idea was that you would run VirtualGL and SRSS on the same machine.

For remote usage with the VGL Transport, you want to use YUV encoding 
instead.  It is similar, but it delivers the encoded YUV frames using 
the VGL Transport and displays them using X Video on the client side.

I really do recommend JPEG, though, as the best means of delivering 
frames in VirtualGL.  We're using libjpeg-turbo, which accelerates JPEG 
encoding/decoding by as much as 5x relative to libjpeg.


> yuv: does not work, failing with
> [VGL] ERROR: in operator=--
> [VGL]    437: Invalid compression type
> Any idea what's happening there?
>
> I want to know wether these are reasonable rates/limitations,
> especially the jpeg transport which seems CPU-bound (using 140% cpu
> in top). Increasing -np did not change anything significantly.

JPEG probably will be CPU-limited on a fast network, but you're also 
seeing a lot of unnecessary CPU time because you're running an 
unrealistic benchmark.  Ultimately, the goal of remote display is to 
produce a solution that the user perceives as local, so really the whole 
"local vs. remote" comparison isn't valid.  If the application generates 
50 fps locally and 30 fps remotely, to the user it's going to be 
perceived very similarly, as long as the 3D rendering keeps up with the 
mouse movement (which is why the VirtualGL frame spoiling feature exists 
and why it should always be used with an interactive application but 
never with a benchmark.)  Also, bear in mind that, when using a real 
application, the server won't be spitting out frames all the time.

We have deployments of hundreds of users in various 
organizations/companies worldwide, and generally these larger 
deployments are able to provision 2 or more users per CPU core, although 
it's important to note that not all users will be actively using the 
server at the same time, nor will any one user be banging away on it 
100% for the whole time they are using it.

Let me simplify it-- ultimately, what you want is "local-like" 
performance.  You can probably achieve that on a gigabit pipe using 
either RGB or YUV encoding with the VGL Transport, but on 100 Mbit or 
less, you will absolutely never get more than a few frames/second unless 
you use JPEG.  The difference between JPEG and RGB or YUV on a 100 Mbit 
pipe will be the difference between 50 Megapixels/second and 3-5 
Megapixels/second.


> Also, what is the preferred way of contributing, just send patches
> here? I had to fix some stuff in the build system as well as the
> scripts to get everything up and running.

If you're just talking about one or two patches, then you can send 
patches to the virtualgl-devel list.  Otherwise, please create a 
SourceForge patch tracker item.  What specifically wasn't working?  Bear 
in mind that a bunch of companies and research institutions are 
building/testing VirtualGL actively, so if there was anything major 
wrong with the build system, it would have surfaced before now.

------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
VirtualGL-Users mailing list
VirtualGL-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtualgl-users

Reply via email to