NoMachine NX

Artur Vill
  • Artur Vill

    Artur Vill - 2011-07-22


    I've got VGL and NX host running on CentOS box and NoMachine client on Mac.

    What would be a typical process to get VGL working in NX session.

    My sys admin says that once NX session is up and running, I need to open a terminal within that session and run usual vglconnect {host} and vglrun {my_app}.

    Is that right? Isn't it just running a client on the host and connects locally? Maybe I'm not entirely understand how X Window works and confusing it with VNC

  • DRC

    DRC - 2011-07-22

    It depends on where you want the 3D graphics to render.  If you want the 3D graphics to render on the same server as the NX server, then you only need use vglrun, not vglconnect.  If, however, the 3D graphics server is a different machine from the NX server, then you'd want to use vglconnect to connect to it from within the NX session.

    NX is an X proxy, so the standard rules apply to it just like with VNC.  The basic difference between it and VNC is that NX is doing X protocol compression, coalescence, and caching.  Thus, it farms out a lot of the 2D rendering to the client machine, whereas VNC does all X rendering on the server machine and sends just images.  From the point of view of VirtualGL, however, they both still act as X proxies.

    Note that the performance of NX won't be very good compared to TurboVNC or TigerVNC.

  • DRC

    DRC - 2011-07-22

    Additional notes:  When I say "the standard rules", I mean the information described in the VirtualGL User's Guide regarding the use of X proxies.  There is a section describing, in general terms, how to use VGL with an X proxy running on the 3D server and another section describing how to use it with an X proxy running on a different server.

  • Artur Vill

    Artur Vill - 2011-07-29


    I'm starting to understand now. We tested NX vs TurboVNC and difference is indeed very noticeable. Its mainly used over ADSL and NX seems to be better with 2D stuff and VNC much better for 3D.

    Interestingly user has to be logged in on a host machine for virtualGL to work. otherwise it can't find the display for some reason. Might be our CentOS config.

    Thanks again

  • DRC

    DRC - 2011-07-29

    Did you run vglserver_config?  That script configures the gdm startup so that it will allow access to selected users to display :0 while the machine is sitting at the login prompt (see VGL User's Guide for more info.)

    The fact that NX is better for 2D is not surprising.  Since it's doing X protocol compression, it can choose to send either images or X primitives, depending on which is more efficient, whereas VNC only sends images.  Since NX implements a full X server on the client machine, it can also do things like cache images.  TurboVNC is indeed specifically tuned for 3D workloads, often at the expense of performance on 2D workloads.  Some of these optimizations include using larger image tile sizes to increase throughput, but this can tend to increase the amount of bandwidth usage for 2D workloads.

    The other thing is that VNC is a "client pull" rather than a "server push" protocol.  Image updates are only sent to the client when the client requests them, and this effectively causes a full round trip for every update.  Thus, VNC doesn't tend to perform well on high-latency networks.  We (both The VirtualGL Project and the TigerVNC Project) are currently researching ways of addressing that.