Chromium Renderserver Overview



This page describes the software and hardware components involved in the Chromium Renderserver.  For installation and configuration details see the Chromium Renderserver setup guide.


[XXX Insert CRRS Diagram here]

1. DMX X Server

DMX (Distributed Multi-head Xinerama) is a special X server used for consolidating a collection of workstation screens as an aggregate display.  This allows a display wall to be constructed from a number of screens such that the wall appears as a single X desktop to application programs.

DMX is not a required component of Chromium Renderserver; it's only needed when a multi-screen display is involved. Without DMX, Chromium Renderserver can be used to remotely view/use a conventional single-screen desktop.

The DMX X server process can run on any host in the cluster.  X rendering commands sent from the client application are propogated by the DMX X server to the back-end X servers.  The DMX server can use the keyboard and mouse of any back-end display for input.

For an application to appear on the DMX display, it only has to use the appropriate X display name.  This is typically hostname:1 where hostname is the name of the computer on which the Xdmx process is running.

For the Chromium Render Server project, the DMX server has been enhanced with input-only VNC ability.  This means VNC clients can connect to the DMX server and sent mouse/keyboard events to it, but it cannot handle RFB update-request messages.  This is all the functionality that's required by the VNC Proxy since the VNC Proxy will obtain RFB updates from the back-end X servers, not the DMX server.

In principle the DMX server could implement full VNC/RFB functionality.  That is, when the VNC viewer asked the DMX/VNC extension for framebuffer updates the DMX server would retrieve the needed pixel data from the back-end servers.  However, the burdon on the DMX server (and cluster network) would increase with each additional VNC viewer.

2. Backend X Servers

When using a DMX configuration, each of the individual back-end displays is controlled by a conventional X server.  Each display also has hardware-accelerated OpenGL.

For the Chromium Render Server,the back-end X servers also have two particular X extensions: VNC and XClipList.  The VNC extension allows VNC viewers to connect to the X server while the XClipList extension is used by the VNC SPU (described below).

3. Chromium

Chromium is used to run OpenGL applications on the DMX display wall.  When not using DMX, Chromium is still used to send OpenGL renderings to the VNC Proxy and Viewer.

In particular, the application links with a special Chromium library which sends the application's OpenGL commands directly to the back-end displays.  An alternative to Chromium is the GLX Proxy extension to DMX.  The GLX Proxy is less-efficient, however, because each OpenGL rendering command must make two hops: from the application to the DMX server and from the DMX server to the back-end display(s).

For the Chromium Render Server project, Chromium is used as follows. Things work a bit differently depending on whether DMX is being used.

With DMX: Without DMX:
Note that after the system has been configured, none of this complexity is apparent to the end-user; OpenGL applications can be started in the usual manner, they appear on the display (or DMX display wall) and behave just as they do on a conventional workstation screen.

4. VNC SPU

The VNC SPU  is a new component developed for the Chromium Render Server project.  Like the Render SPU, it renders OpenGL commands into a window.  Additionally, the VNC SPU is a VNC server.  This allows VNC viewers to connect to it and view the OpenGL rendering in the SPU's window.

The VNC SPU uses OpenGL's glReadPixels command to quickly copy the image from the window to a buffer in main memory.  This is  done upon the SwapBuffers command or glFlush/glFinish when rendering to the front color buffer.  The VNC server, running in a separate thread, accepts RFB update-request messages from the VNC Proxy and sends RFB update messages (image data) in return.

Incidentally, an ordinary VNC viewer may connect to the VNC SPU to view just the OpenGL rendering.

Ideally, there would be no need for the VNC SPU: the VNC extension to the back-end X servers would detect when the contents of OpenGL windows changed and send updated pixel data to the VNC clients (just like all other X windows).  This doesn't work for two reasons:
  1. OpenGL uses direct rendering to bypass the X server to achieve maximum performance.  This means the X server does not know when the contents of an OpenGL window have changed.  In fact, a VNC viewer connected to the screen will only see blank windows where OpenGL rendering should appear.
  2. The VNC SPU can copy image data out of the window with glReadPixels much faster than the X server can copy data out of the framebuffer.  Though with X server optimization this disadvantage could be mitigated.

5. VNC Proxy

The VNC Proxy is a new program developed for the Chromium Render Server project.  It operates between the application workstation (or DMX display cluster) and some number of VNC viewers, acting as a VNC aggregator and reflector.

The back-side of the VNC Proxy connects to the X servers and VNC SPUs. The front-side of the VNC Proxy connects to some number of VNC viewers operated by the users.

The VNC Proxy works as follows:
Another approach to the problem of viewing a DMX display with a VNC viewer would be to write a special VNC viewer which directly connected to all the back-end hosts rather than a Proxy.  There are several problems with that approach, however:

6. VNC Viewer

Any VNC viewer may be used with the Chromium Render Server.  Be aware that not all VNC viewers are created equally.  The VNC/RFB protocol supports a variety of image encoding techniques and extensions which can effect the performance and, in some cases, the functionality of the viewer.

The VNC viewer from the XF4VNC project has been specially modified for the Render Server project to measure performance.
 
The VNC Proxy also supports a Java-based VNC Viewer that can be run inside any Java-capable web browser.  See the VNC Proxy User Guide for details.