10.8. Server-of-Server Casefile Format

EnSight, using an Enterprise license key has the capability of handling partitioned data in an efficient distributed manner by utilizing what we call a server-of-servers (SOS for short). An SOS server resides between a normal client and a number of normal servers. Therefore, it appears as a normal server to the client, and as a normal client to the various normal servers.

This arrangement allows for distributed parallel processing of the various portions of a model, and has been shown to scale quite well.

Currently, EnSight SOS capability is only available for EnSight5, EnSight6, EnSight Gold, Plot3d, and any EnSight User-Defined Reader data.

Please recognize that your data must be partitioned in some manner (hopefully in a way that will be reasonably load balanced) in order for this approach to be useful. The exception to this is the use of the auto_distribute capability for structured or unstructured data. This option can be used if the data are readable by all servers. It will automatically distribute each portion of the data over the defined servers - without the user having to partition the data. Please note that currently only EnSight Gold, Plot3d, and any 2.06 (or greater) user-defined readers (which have implemented structured reader cinching) should be used for structured auto_distribute - and that only EnSight Gold and any 2.08 (or greater) user-defined readers (which have implemented the "*_in_buffers" routines ) should be used for unstructured auto_distribute. Using an EnSight reader not written for SoS autodistribute will result in each server loading the entire model.

10.8.1. Partition Utility

Included in the EnSight distribution is a command-line utility named partition that will take most EnSight Case Gold binary unstructured datasets and spatially decompose the geometry into separate datasets by partitioning the geometry. Simply type partition at the command prompt to begin. This command line program will prompt you for the name of the input case file and the number of partitions in the x, y, and z and whether or not to use ghost elements, etc. and will create (in a directory of your choosing) a case sos file (.sos) pointing to the spatially-decomposed, partitioned case files ready for loading into EnSight server of server mode.

If the partitioned EnSight Case Gold files all remain on a network file system accessible by all the EnSight servers, then you can bypass the SOS casefile and simply use multi-case, see Read Data and Multiple File Interface.


Note:  If you do your own partitioning of data into EnSight6 or EnSight Gold format, please be aware that each part must be in each partition - but, any given part can be "empty" in any given partition. All that is required for an empty part is the "part" line, the part number, and the "description" line. If you use ENSHELL to start up your servers, and your format is EnSight Gold, then your SOS case file can be greatly simplified to just list the case files (see Load Spatially Decomposed Case Files ).


Each spatially decomposed partition dataset is actually a self contained set of EnSight data files, which could be successfully read by a normal client - server session of EnSight. For example, for EnSight gold format, there will be a casefile and associated gold geometry and variable results file(s). For optimal performance you can place each spatially decomposed Case Gold dataset of the model on the local file system of computer that will access that portion. You cannot use the Multiple File Interface if you manually place the spatially decomposed datasets on different computers. Rather you must use a SOS Casefile that is a simple, ASCII file which informs the SOS about pertinent information need to run a server on each computer that will host the EnSight server (and SOS) process(es) and what path and file(s) it needs to read. 


Note:  You will need to place the SOS casefile on the machine where the EnSight SOS will be run.


The format for the SOS casefile is as follows:


Note:  [ ] indicates optional information, and a blank line or a line with # in the first column are comments.


Table 10.1: Format

FORMATRequired
typemaster_server datatype (Required)
wheredatatype is required and is one of the formats of EnSight's
internal readers (which use the Part builder)
  • gold

  • ensight6

  • ensight5

  • plot3d

or it can be the string used to name any of the user-defined readers.

Note:  For user-defined readers, the string must be exactly that which is defined in the USERD_get_name_of_reader routine of the reader (which is what is presented in the Format pulldown of the Data Reader dialog).


If datatype is blank, it will default to EnSight6 data type.

[auto_distribute: server/reader/on/off] Optional for structured or unstructured data

Set this option to off if you have moved the decomposed data file(s) into separate directories or machines. Each server will simply read all of the data as specified in its data_path and casefile below.

Set this option to on or server (these two options are the same) if you want the EnSight server to automatically distribute data to the servers specified below. This requires that each of the servers have access to the same data (or identical copies of it). For structured data: use the ON or Server option only if the datatype is gold, plot3d or a 2.06 or greater user-defined reader (which has implemented structured cinching). For unstructured data: use only if the datatype is gold, or a 2.* user-defined reader (which has implemented the "*_in_buffers" routines).

Set this option to reader if you want EnSight to allow the readers to do the decomposition. This option requires that each of the servers have access to the same data (or identical copies of it). This is preferred over letting the server do the distribution. However the reader option will only work if the reader has told EnSight that it can do the distribution by setting the return value to TRUE in the USERD_prefer_auto_distribute reader routine.

[use_resources: on/off]

Optional, to use the specification of server machines from EnSight resources; this will override the machine names used in this file, see How To Use Resource Management.)

[do_ghosts: on/off]

Optional for unstructured auto_distribute - default is off starting with version 10.1.4(a).

Allows user to control whether ghost cells will be produced between the distributed portions.

This action can alternatively be set on by use of the -use_ghosts command line argument, or by setting the UNSTRUCT_AUTODISTRIBUTE_USE_GHOSTS environment variable to 1.

[buffer_size: n]

Optional for unstructured auto_distribute and do_ghosts - default is 100000

Allows user to modify the default buffer size that is used when reading node and element information of the model when producing ghost cells.

[want_metric: on/off]

Optional for unstructured auto_distribute and do_ghosts - default is off starting with version 10.1.4(a)

If set on, a simple metric will be printed in the shell window that can indicate the quality of the auto_distribution. The unstructured auto_distribute method relies on some coherence in the element connectivity - namely, that elements that lie next to each other are generally listed close to each other in the data format.

The metric is simply the (#total_nodes / #nodes_needed_if_no_ghosts).

When no ghosts, the value will be 1.0. The more ghosts you must have, the higher this metric will be. If the number gets much more than 2.0, you may want to consider partitioning yourself.

This action can alternatively be set on by use of the -use_metric command line argument, or by setting the UNSTRUCT_AUTODISTRIBUTE_USE_METRIC environment variable to 1.


Note:   This whole section is below optional. It is needed only when more than one network interface to the sos host is available and it is desired to use them. Thus distributing the servers to sos communication over more than one network interface.


Table 10.2: Network Interfaces

number of network interfaces: numRequired - if section used

where: num is the number of network interfaces to be used for the sos host.

network interface: sos_network_interface_name1Required - if section is used
network interface: sos_network_interface_name2Required - if section is used
network interface: sos_network_interface_namenumRequired - if section used

Table 10.3: Servers

SERVERSRequired
number of servers: numRequired

where: num is the number of servers that will be started and run concurrently.

#Server 1Comment only
machine id: midRequired

where: mid is the machine id of the server.

executable: /.../ensight_serverRequired, must use full path
[directory: wd]Optional

where: wd is the working directory from which ensight_server will be run

[login id: id]Optional

where: id is the login id. Only needed if it is different on this machine.

[data_path: /.../dd]Optional

where: dd is the data where the data resides. Full path must be provided if you use this line.

casefile: yourfile.caseRequired, but depending on format, may vary as to whether it is a casefile, geometry file, neutral file, universal file, etc. Relates to the first data field of the Data Reader Dialog.
[resfile: yourfile.res]Depends on format as to whether required or not. Relates to the second data field of the Data Reader Dialog.
[measfile: yourfile.mea]Depends on format as to whether required or not. Relates to the third data field of the Data Reader Dialog.
[bndfile: yourfile.bnd]Depends on format as to whether required or not. Relates to the fourth data field of the Data Reader Dialog.
#Server 2Comment only


Note:  Repeat pertinent lines for as many servers as declared to be in this file


Example

This example deals with a EnSight Gold dataset that has been partitioned into 3 portions, each running on a different machine. The machines are named joe, sally, and bill. The executables for all machines are located in similar locations, but the data is not.


Note:  The optional data_path line is used on two of the servers, but not the third.


FORMAT

type: master_server gold

SERVERS

number of servers: 3

#Server 1

machine id: joe

executable: /usr/local/bin/ensight102/bin/ensight102.server

data_path: /usr/people/john/data

casefile: portion_1.case

#Server 2

machine id: sally

executable: /usr/local/bin/ensight102/bin/ensight102.server

data_path: /scratch/sally/john/data

casefile: portion_2.case

#Server 3

machine id: bill

executable: /usr/local/bin/ensight102/bin/ensight102.server

casefile: /scratch/temp/john/portion_3.case

If we name this example sos casefile "all.sos", and we run it on yet another machine, one named george, the data would be distributed as follows:

On george: all.sos

On joe (in /usr/people/john/data): portion_1.case, and all files referenced by it.

On sally (in /scratch/sally/john/data): portion_2.case, and all files referenced by it.

On bill (in /scratch/temp/john): portion_3.case, and all file referenced by it.

By starting EnSight with the -sos command line option (which will autoconnect using ensight.sos instead of ensight_server), or by manually running ensight.sos in place of ensight_server, and providing all.sos as the casefile to read in the Data Reader dialog - EnSight will start three servers and compute the respective portions on them in parallel (see Command Line Start-up Options ).

For examples of structured and unstructured auto_distribute, see Use Server of Servers.

10.8.2. Spatially Decomposed Case Files

If you choose to read spatially decomposed case files using the same number of servers as case files, then this section is unnecessary. At some point you may encounter case files that are spatially decomposed and wish to read them with less servers than you have case files. At that point you will need to have this section with a keyword MULTIPLE_CASEFILES. There are several ways to specify the case files.

List them all by name:

MULTIPLE_CASEFILES
total number of cfilesn
cfiles global pathglobal_pathOptional
cfilespartition_1.case 
 partition_2.case 
 . 
 partition_n.case 
MULTIPLE_CASEFILES
total number of cfilesn
cfiles global pathglobal_pathOptional
cfiles patternpartition_*.case 
cfiles start number# 
cfiles increment# 
Use a separate file to containing the case filenames
MULTIPLE_CASEFILES
total number of cfilesn
cfiles fileall_together_cfilenames.txt
cfiles patternpartition_*.case
cfiles start number#
cfiles increment#

See Load Spatially Decomposed Case Files for detailed usage instructions.

10.8.3. Threading

By default, both the EnSight client and the server start up with an optimum number of threads (depending on the number of processors available and within the EnSight user license limits). Each executable of EnSight can be configured individually to limit the number of threads used. The following environment variables are used to specify the maximum number of threads that the executable should use for computation. These environment variables should be set in your shell startup script on the computers where the various EnSight executables run.

ENSIGHT10_MAX_THREADS

The maximum number of threads to use for each EnSight server. Server threads are used to accelerate the computation of streamlines, clips, isosurfaces, shock surfaces, most calculator functions (see Threaded Calculator Functions) and other compute-intensive operations.

ENSIGHT10_MAX_CTHREADS

The maximum number of threads to use for each EnSight client. Client threaded operations include transparency resort and display list creation.

ENSIGHT10_MAX_SOSTHREADS

The maximum number of threads to use on the server of server (SOS). The SOS uses threads in order to start up server processes in parallel rather than serially.

The number of threads is limited to 8 (per client or server) with a Standard license, while the upper limit for an Enterprise (formerly gold or hpc) license is 128. When setting these parameters it is a good idea to take into account the number of processors on the system. In general, you will not see benefit from setting the parameters higher than the number of total processors. Because the server, server-of-servers and client operate in a pipelined fashion, it is not necessary to limit one in order to apply more threads to another.

10.8.4. NETWORK_INTERFACES

If the machine named george had more than one network interface (say it had its main one named george, but also had one named george2), we could add the section shown below to our casefile example:

number of network interfaces: 2

network interface: george

network interface: george2

This would cause machine joe to connect back to george, machine sally to connect back to george2, and machine bill to connect back to george. This is because the sos is cycling through its available interfaces as it connects the servers. Remember that this is an optional section, and most users will probably not use it. Also, the contents of this section will be ignored if the -soshostname command line option is used (see Command Line Start-up Options ).