DVG Cluster How To
Written by: Infiscape Corporation
Aron Bierbaum and Allen Bierbaum
Introduction
The purpose of this document is to explain how to run a VR Juggler cluster application on a ORAD DVG cluster. At the time of this writing, the ORAD system has only been tested with two compositing modes: Split Image and Multi-Sampling/Anti-Alias. This document will briefly explain the needed DvgWrapper and VR Juggler configuration files along with providing tips to help you along the way.
DVG Configuration Files
In order for the DvgWrapper to know how to set up the compositing chain, you must provide a configuration file that specifies the compositing methods to be used. As the DVG documentation explains, there are multiple ways to specify a DVG wrapper configuration file. We recommend that you specify the configuration file by setting the DVG_GL_CONFIG environment variable. For example to use the attached example configuration file for a 4×4 tiled screen:
setenv DVG_GL_CONFIG /home/aronb/dvgconfig/DvgGL-four.cfg
Note: This must be set to your local configuration files.
Before discussing the specific compositing methods and how you configure them, it is worth noting a few key sections of the attached example configuration files that remain the same for all compositing methods. These sections will be explained briefly below.
Please see the DVG wrapper documentation for more detailed descriptions of all the following options. We will only discuss them as they pertain to VR Juggler operation.
Basic DVG Settings
The first two lines shown below specify the video output format to be used.
| Video Mode | You must have the VideoMode attribute set to VR for the DvgWrapper to function properly. For more information about the VROutputFormat attribute consult your DVG wrapper documentation. | | Genlocking | The next attribute, GenlockSource specifies the signal coming into the chain to use for Genlock. This attribute should be set to None for proper operation. | | Pass Through | The PassThrough attribute disables all functionality of the wrapper and defaults to 0. | | Barrier | The final attribute, SwapBarrier informs the wrapper if it should use its internal TCP/IP swap lock method. Since VR Juggler already provides a method to SwapLock the nodes, this should be disabled. |
<DvgConfig VideoMode = "VR" VROutputFormat = "60.02,1280,1328,1440,1688,1024,1025,1028,1066" GenlockSource = "None" Multisample = "0" PassThrough = "0" SwapBarrier = "0" />
X Server Configuration
There are a few X Server configuration settings that are recommended. The first MaximizeWindow forces any window opened to be full screen. This feature was tested, but seemed to only occasionally function. The last setting shown below, HideMouseCursor causes the X mouse curser to disappear.
<XConfig MaximizeWindow = "1" HideMouseCursor = "1" />
Synchronization Configuration
To correctly configure the syncronization of the DVG cluster, you must specify three things: SyncronizeDelay, SynchronizeOn, and a list of render nodes in your chain. The SyncronizeDelay attribute specifies the number of synchronization points that are initially skipped in order to ensure proper start-up of your application. The default value is 50, but smaller values will also work. The SynchronizeOn specifies which !OpenGL command the DvgWrapper will wait for to initiate each synchronization barrier.
<Synchronization> <Config SynchronizeDelay = "2" SynchronizeOn = "glXSwapBuffers" /> <Renderer HostName = "dvg1-a" /> <Renderer HostName = "dvg1-b" /> <Renderer HostName = "dvg2-a" /> <Renderer HostName = "dvg2-b" /> </Synchronization>
VR Juggler Configuration Files
Configuring your application to work properly on a DVG cluster is identical to any other configuration. There are a few things that you should keep in mind while creating the configuration files though.
DisplayWindows will only be visible at the end of the DVG composite chain if they are opened on the proper section of the X Server and are of the correct size. For example, assume that you have a single monitor attached to the last node in your DVG composite chain of four render nodes. Let's also assume that your final resolution is 1280×1024 and you want to split the image into four quadrants:
+------------------= =| | |
| Node 1 | Node 2 |
| | |
+-------= ----------+ =| | |
| Node 3 | Node 4 |
| | |
+------------------= =}}}
Since all nodes are drawing an equal sized section of the final image, on each node you must open a window at the origin with the proper size.
* Origin: (0,0)
* Size: (640, 512)
One method we have found usefull for debugging the imaging compositing is to hook into the VGA outputs of the chain in order testing for the correct outputs on each node.
= Important Environment Variables =
In order for the !DvgWrapper to know which X server to run your application you '''must''' set the `DISPLAY` environment variable to `:0` on each machine before running your application as shown below.
{{{
setenv DISPLAY :0
./runDvgGL myApp cluster.jconf
}}}
In order to see debug information from the !DvgWrapper you can set the `EB_MSG_LEVEL` environment variable to one of the following settings.
* warning - Only display warnings and errors.
* info - Show a more verbose level of debug output.
The last environment variable discussed, `DVG_NO_NOISE`, disables the PC speaker that makes noises while initializing the DVG composite chain.
= Miscellaneous Issues =
There are several issues that we have run into that can be good to watch for.
* Machine naming and resolving: In their default configurations, system utilities may not all return the same hostname information for a given DVG node due to the way networking, `/etc/hosts`, and various other settings of configured. This can cause some problems with VR Juggler clustering and with user-developed scripts.
* The wrapper settings can override and/or extend other graphics board specific settings. For example with nvidia Linux boards the antialiasing mode can be overridden by the wrapper configuration.
* The wrapper does not like to work with multi-threaded apps that Juggler creates. So, in a bind you can run the RunDvgGL script with glxgears for a minute to get the state set for the boards and then simply run your app without the wrapper.
Attachments
- DvgGL-four.cfg (0.9 kB) -
Example <nop>DvgWrapper? config file. (2x2 Split)
, added by dshipton on 02/01/07 19:47:07. - cluster.sim.jconf (32.1 kB) -
VR Juggler Clustered Simulator Config File
, added by dshipton on 02/01/07 19:47:08. - orad.cluster.jconf (1.6 kB) -
VR Juggler cluster config file.
, added by dshipton on 02/01/07 19:47:09. - example.dvg.jconf (58.5 kB) -
Example VR Juggler configuration file. (2x2 Split)
, added by dshipton on 02/01/07 19:47:10.
