Download the Visapult Source Code!
February 9, 2003
Access to the Visapult source will resume after we complete some
Tech Transfer paperwork. Please check back after 1 March 2003. Sorry
for the inconvenience.
July 9, 2002
Note: at this time, the version of Visapult source linked on this
page is out-of-date, and has some known compilation problems. Following
up from the recent 10Gig demonstration, efforts are underway
to bring the information and software distributions on this page
up-to-date. Look for more information on or about July 12, 2002.
Sorry for the inconvenience.
Index
- Components of the implementation, and other software you will need to download
- How to build and run all this stuff
- Adding Netlogger instrumentation and DPSS data sources to Visapult
- Sample data? (AVS, DPSS and F-DPSS formats)
- Release Notes Summaries
- Give us feedback
Quick Links
- The latest visapult tarball, dated 16 November 2000 (added fully overlapped I/O&rendering support, uses OpenRM version 1.3.0). Check out the Release Notes Summaries.
- Libcvdev source tarball, needed to build the trackd(CAVE) enabled version of the Visapult viewer.
- OpenRM, the 3D rendering engine
- Netlogger Info
- DPSS Info
- The Fast Light Toolkit . Provides GUI services for the November 2001 version of Visapult.
- Download the Slam! Source (support tool, not necessary for Visapult)
Components of the Distribution
In order to run the bare-bones version of the LBL Visapult system, you'll need to make sure you have the following components.
- LBL Visapult Source
- This is the implementation of the LBL Visapult viewer, and a sample MPI-based data rendering engine.
- The source code is a rooted subtree that looks like this:
visapult/ visapult/viewer visapult/backEnd visapult/common
- There are no restrictions upon the placement of the Visapult tree, it can be under your home directory, in /tmp, or wherever.
- At this time (16 November 2001), the back end data engine is capable of reading data in one of four formats: AVS-format "volume files", by connecting directly to a DPSS, a file-based version of the DPSS volume data format (called FDPSS), or an experimental data format used by UCSF for confocal microscopy data (called UCSF). Support was added for a custom UDP-based protocol for the SC01 Bandwidth Challenge, which is not documented on any of these pages.
- Pthreads
- The viewer uses a pthreads-based parallelization model. The backEnd uses a combination of MPI and pthreads. Pthreads was "already on" all the machines we used for development and testing, so you may already have this on your machine. We have built and run the viewer on: Solaris 2.6/2.7, IRIX 6.5, Linux RH 7.2/7.3.
- MPI
- The host that runs the data back-end needs to either have native MPI, or you need to grab, build and install MPICH. Mpich is a free, buildable implemenation of MPI that runs on a wide variety of machines. Note that you are free to write your own data engine that uses some other parallel programming model.
- OpenRM Scene Graph
- The guts of the renderer is a scene graph API. You can grab source or binaries for this tool for free from the OpenRM website. This tool is an Open Source project, and provides many of the same features as something like Performer or Inventor.
- We usually install the libraries & header files for OpenRM into a semi-public location on the workstation, such as /usr/local. Many of the Visapult Makefiles assume this location. This version of Visapult (16 November 2001) is built using the 1.4.2 version of OpenRM (note: OpenRM 1.4.2 was released in late June 2002, but the current Visapult tarball has been tested against both the 1.4.2 and 1.4.1 versions of OpenRM - both those versions are API compatible as far as Visapult is concerned).
- The Fast Light Toolkit
- The Fast Light Toolkit (FLTK) is an Open Source GUI layer that provides GUI services on Win32 and X11 platforms. It may be downloaded for free from www.fltk.org. We used version 1.0.11 with the Nov 2001 release of Visapult, and have not tried newer versions of FLTK. Check the viewer Makefile's to see where we install this stuff on our development platforms.
- This is the implementation of the LBL Visapult viewer, and a sample MPI-based data rendering engine.
The Visapult core contains hooks to two other useful resources, Netlogger and DPSS. Should you wish to use either of these resources, please visit the links below. Use of Netlogger and DPSS is optional, and the IBRAVR prototype will compile and run without the need to obtain either DPSS or Netlogger.
- Netlogger
- Netlogger is an instrumentation facility for profiling applications. It has emphasis in the area of profiling distributed applications, and is useful for measuring and visually presenting in a timeline format the elapsed time consumed by applications during lengthy operations, such as transmission of data over WANs.
- DPSS
- We use the DPSS as a "network cache". In other words, the DPSS is viewed as a remote resource that holds large data sets.
- Netlogger is an instrumentation facility for profiling applications. It has emphasis in the area of profiling distributed applications, and is useful for measuring and visually presenting in a timeline format the elapsed time consumed by applications during lengthy operations, such as transmission of data over WANs.
Building and Running Visapult
This distribution is a snapshot of a working prototype. It is not intended to be a finished product, nor intended to install and build smoothly on all machines. We assume that you are intimately familiar with building complex programs on Unix systems, and a working knowledge of "make".
Building Visapult Core
Following are instructions for building the Visapult core. We're going to assume that:
- OpenRM is installed in /usr/local/rm142
- MPI is available as MPICH in /usr/local/mpich
- Pthreads is already on your machine (solaris, Irix or Linux).
- The Visapult tarball is located in /tmp/visapult-postSC01.tgz
- FLTK includes are located in /usr/local/include, and libfltk.a is located in /usr/local/lib.
- We're going to unpack and build the Visapult package under our home directory in $HOME/visapult
To build the Visapult package, please do the following:
- Unpack the tarball.
% cd $HOME % gunzip -dc /tmp/visapult-postSC01.tgz | tar xvf -
- The sources are rooted in a visapult subdirectory, so you don't need to explicitly create that directory.
- Make links from visapult/backEnd/ and visapult/viewer to visapult/common.
% cd $HOME/visapult % ./makelinks.csh
- This script creates symbolic links inside of the viewer and backEnd directories, since the networking code is shared by both client and server.
- Configure the makeinclude file used in subdirectories.
% cd $HOME/visapult % ./config.csh [-dpss=/dpss/dir] [-netlog=/netlog/dir]
- This script creates a file in $HOME/visapult called makeinclude. The purpose of this file (at this time) is to set make flags that will be used to conditionally compile in either DPSS or Netlogger.
- Build the viewer.
- The $HOME/visapult/viewer subdirectory is the location of the viewer code. Unfortunately, to build the viewer (and the backEnd) you have to start swimming through makefiles. There are two Makefiles, one for X11 and one for Win32. This discussion focuses on the X11 Makefile, which is just called "Makefile." Inside the Makefile are includes that pick up architecture specific definitions, e.g., makeinclude.linux. Pick the include that is the closest fit to your environment and start changing pathnames to in that makeinclude to match your environment. You should only need to change pathnames, not the list of libraries, etc. Then, build the viewer using your new makefile.
- Build "backEnd," the MPI data client.
- The $HOME/visapult/backEnd subdirectory is the home for the MPI data engine. Again, pick the makeinclude that most closely matches your environment, make a copy, and start changing pathnames. We have both MPICH 1.1 and MPICH 1.2 Makefiles, and they are pretty verbose. Then, build the back end using your new Makefile.
- The sources are rooted in a visapult subdirectory, so you don't need to explicitly create that directory.
Running The Two Components, the Viewer and the BackEnd
From a high level view, the viewer needs to be started (run) before the back end is started. The reason is that the viewer does the listen() and accept() calls, while the back end attempts to connect() to the viewer over the network.
Running the Viewer
After making sure that your LD_LIBRARY_PATH variable is set to include OpenRM (and optionally the DPSS libraries, and to Mesa on Linux for the OpenGL libraries), cd into $HOME/visapult/viewer.
Starting with the November 2001 version of Visapult, two versions of the viewer are created: viewer and viewerFltk. The latter uses FLKT for GUI, and is not documented here at this time. It does run, and in fact, is what we use here at LBL more than we use the non-FLTK version of the viewer. Documentation is not being included at this time because we are in the midst of a major rewrite.
Next, run the viewer from the command line with:
% cd $HOME/visapult/viewer % ./viewer [args]or
% cd $HOME/visapult/viewer % ./viewerFltk [args - not documented]
All of the following command line options are optional. (note that some or all of these may not work with the FLTK-enabled viewer)
- -w displayWindowPixelWidth (default is 640)
- -h displayWindowPizelHeight (default is 512)
- These two options allow you to specify the size of the display window.
- -e gridResolutionMultiplier (default is no grid)
- Use a floating point value between 0.0 and 1.0 for the parameter gridResolutionMultiplier. A value of 0.5 will result in an elevation grid that is one-half the (X- and Y-) resolution of the source data; a value of 0.25 produces an elevation grid that is one-quarter the resolution of the source data, etc.
This command line option changed during the transition from "IBRABR" to "Visapult."
- In addition to sending 2D texture maps to the viewer, the back end can also compute and send a second channel of data that can be considered roughly as "elevation" data. This second channel is basically a 2D array of values that indicate the position (depth) of the nearest non-transparent voxel from the source data with respect to the viewer. This elevation map is often useful for adding real geometric depth to what would otherwise appear as flat quadrilaterals in the viewer. The benefit of the elevation map is that the objects can be rotated in the viewer a few more degrees before the IBRAVR technique begins to lose fidelity.
- The elevation map can be at any arbitrary resolution, it doesn't need to be the same size as a slice of volume data. In fact, you don't want or need to use that much resolution. We have experimented, and find that values for gridWidth and gridHeight that are, say 1/8 or 1/16 the size of the original volume resolution are adequate. So, if a single slice from the original volume data is 256x256, using a value of 16 for gridWidth and gridHeight should work adequately. "Adequate" is highly data-set dependent; your mileage may vary.
- The gridResolutionMultiplier is a scalar that is multiplied with the original u-v dimensions of the volume to produce a grid of a different resolution. gridResolutionMultiplier should be in the range 0..1. When set to 1.0, the elevation map will be the same u-v resolution as the underlying volume data. When set to 0.5, the elevation map will be one-half the resolution of the original data volume, in each of the u- and v-directions.
- -line (default is filled polygons)
- Render the quads (or quad meshes if using -e to generate an elevation map) using line segments rather than filled polygons. Outlines are occasionally useful for debugging. The line segments are still textured and transparent (according to the contents of the 2D texture maps sent over from the back end), so they may be hard to see.
- -t (default is no network bandwidth usage reporting)
- When the -t option is present, the viewer will report the network bandwidth consumed during the transfer of high-payload data (texture and elevation maps) over the course of the application for thread zero only.
- -boxes (default is no boxes)
- When -boxes is specified, the back-end is instructed to send over a stream of data that will be used in grid visualization. The backEnd program included in this distribution sends over an empty box - this option is not very exiting with the data back-end provided. However, our AMR-aware back-end (not included with this distribution) sends over grid information. It looks like this:
- -b pixelDepthBytes (default is 2) March 3, 2000: The "-b pixelDepthBytes" command-line argument has been removed from the viewer. It may make a re-appearance at some point in the future.
- This argument is used to set the number of channels of pixel data in the 2D texture maps sent to the viewer from the back end. A value of 2 means that the pixels arriving from the back end will be treated as Luminance-Alpha, a value of 1 means the pixels are just Alpha, and a value of 4 means the pixels are RGB-Alpha.
- (15 Dec 99) When -b 4 is specified on the command line, the back-end will use a colormap of it's own choosing (see the command line options for the mpiDataEngine for more info). In the future, the mtserver program will be able to send a colormap and transfer function to the back end for use in deriving colors from raw scalar data.
Note that the TCP window size is controlled by the back-end, not the viewer. Please see below for more information. (21 Jan, 2000).
Once the back-end is running, an object will appear in the mtserver's display window. While holding and dragging with the middle mouse button depressed, you can rotate the object around. Note how the IBRAVR technique loses fidelity as you rotate the object. This is normal. According to Crawfis, you can expect at a maximum a total of 16 degrees of rotation before fidelity drops, and that number is when the view-enhancing elevation map is also used.
- Render the quads (or quad meshes if using -e to generate an elevation map) using line segments rather than filled polygons. Outlines are occasionally useful for debugging. The line segments are still textured and transparent (according to the contents of the 2D texture maps sent over from the back end), so they may be hard to see.
Running the Back End
Since the backEnd is MPI based, you will launch this program like any other MPI job, using mpirun. Thus, launch the job thus:
% cd $HOME/visapult/backEnd % mpirun -np NN ./backEnd [args]
Where "-np NN" specifies the number of PEs to use. The "-np" syntax varies between implementation, check your local documentation. Also, beware that many builds of MPICH use rsh to start up processes even on the local machine, so you you get a "Permission denied" error after this job starts, that's probably the problem (remedied with an ~/.rhosts file).
Configuration and Arguments
There is a file called mpiclient-config in the mpiclient directory that contains text like the following:
#set useHostName 0 set useHostName 1 # host name example set connectString bozo.lbl.gov # IP address example #set connectString 192.168.0.2
You must modify this file so that the backEnd program knows the location of the viewer. You can specify either a hostname, such as bozo.lbl.gov, or a dotted-quad IP number. If you want to use a real hostname, make sure the set useHostName 1 line is uncommented, and set useHostName 0 is commented away.
Of the following backEnd command line arguments, you must specify a data source (using either -avs fname or -dpss fname). All other parameters are optional.
- -avs fname (no default)
- Tells the back end to read the file named fname and that it is in AVS-volume format. See below under "Sample Data" for more info.
- -dpss URL (no default)
- The DPSS URL is of the form x-dpss://dpss.lbl.gov/fileName, where dpss.lbl.gov is the DPSS master. The fileName refers to a special type of metadata file, which is described in more detail below.
- -fdpss filename (no default)
- Provide the filename of an "FDPSS config file." See below for more information. Use this file format for large (greater than 2 gigabytes) data files.
- -pal fname (no default)
- Tells the back end to load a color palette from the file named fname. The "color palette" file format is pretty simple, it's four groups of 256 bytes, where the first group is the red channel, the second group the green channel, the third group the blue channel and the fourth group the alpha channel. 0 means off or transparent, and 255 means full "on", or opaque.
- -min minVal and -max maxVal
- Sets the minimum and maximum values in the transfer function. By default, the data minimum and maximum are computed as the data is read in to the back end. These values can be used to override the computed min/max. Overriding these values can be useful when you want to use global min/max for time-varying data.
- -n nloops (default = 1)
- By default, the AVS data set is read in, rendered and trasmitted once to the viewer. By setting this value, you may tell the back end to read, render and transmit the volume a number of times. This is a useful standalone test to push a lot of data over the network from the back-end to the viewer. The same data set is read and processed repeatedly, so the result is not visually interesting.
- -bs tcpWindowSizeBytes (default = 256Kbytes)
- Sets the TCP window size to tcpWindowSizeBytes. The back-end will transmit this information to the viewer, and both viewer and back-end will use the requested TCP window size.
- About the TCP window size: the recommended TCP window size is the product of the network bandwidth with the delay. Thus, if the bandwidth is 10MB/sec, and the delay is 5 msec, then the TCP window size should be 10MB*0.05, or 512Kbytes. For more information about computing a good TCP window size, as well as information about the tools needed to obtain bandwidth and delay, please refer to Brian Tierney's TCP tuning page as well as to the Slam! source code page.
- Developers may change the default TCP window size inside the back-end code by looking in visapult.h, and modifying the DEFAULT_TCPWINDOW_SIZE definition.
- Tells the back end to read the file named fname and that it is in AVS-volume format. See below under "Sample Data" for more info.
Building and Running with Netlogger
Please refer to this page for more information concerning instrumentation of Visapult with Netlogger.
Building and Running with DPSS
The Distributed Parallel Storage System, or DPSS for short, can be thought of as a network cache for data. The DPSS itself is described in more detail at http://www-didc.lbl.gov/DPSS.
For more information concerning Visapult DPSS data and metadata files, as well as information about building and running the DPSS-enabled Visapult, please refer to the Visapult-DPSS page.
Sample Data
AVS Volumes
A number of sample volume are distributed with the AVS system. If you don't have access to this distribution, we can't post these files on the web because they belong to AVS. You might check at the International AVS Center (www.iavsc.org). In the AVS distribution, the sample volumes are located in $AVS/data/volume, and all have a .dat suffix.
However, the file format is pretty simple, so you can create some sample data in pretty quick order. Here's the file format:
Byte 0: the X size of the volume (varies fastest) Byte 1: the Y size of the volume (next fastest) Byte 2: the Z size of the volume (varies slowest) X*Y*Z bytes of data.
Note that with this format, the largest possible volume you can have is 255*255*255.
F-DPSS Combustion Sample Data, May 15, 2000
The term F-DPSS refers to a file-based representation of the format used on the DPSS. The DPSS is not completely a production system, so a small file-based version of some sample DPSS is being made available in this tarball (~110 Mbytes).
The contents of the tarball are as follows:
- Base14-config
- This is a small ASCII file containing configuration information:
/judgedee/tmp/wes/data/Base14 640 256 256 3 1 density 1.345 2.45495
- The first line is a file basename. You will need to modify this line so the part up to "Base14" contains the directory where this tarball is unpacked on your system. The second line says that the grid is of size 640x256x256 points, has 3 timesteps, and one variable. The final line is the name of the species, or variable, and the following two numbers are the minimum and maximum data values contained in the entire dataset (all grid points and timesteps of the Base14 dataset).
- The Base14-config file and it's reader are very fragile: no comments, no extraneous characters, etc. You must modify the path on line 1 of this file to reflect the location of the other Base14-* files on your system. Lines may not be rearranged, etc.
- Base14-boxes
- This is a file containing raw, binary box data for each time step. There are no user-configurable knobs in this file.
- Base14-boxes-config
- This file contains configuration information about the Base14-boxes file; there are no user configurable options for this file.
- Base14-density
- This file contains the raw density data in big-endian, IEEE floating point format. There are 640x256x256x3 data points in this file. There are no user configurable options for this file.
F-DPSS Usage
Unpack the Base14.tgz tarball somewhere on your system thus:
% gunzip -dc Base14.tgz | tar xvf -
Uncompressed, it will expand into about 492 Mbytes.
No special steps are needed to use the FDPSS format on the viewer side. However, when you run the Visapult back end, use the following command line arguments (example):
% mpirun -np 4 ./mpiDataEngine -fdpss /someDirectory/Base14-config
Note the use of the -fdpss switch. The filename that follows points to the Base14-config file. Inside the Base14-config file, be sure that you've edited the first line to contain the directoy path to the location of the other Base14 files.
Internal to the Visapult back end, a family of filenames is built from the first line of the Base14-config file. Therefore, a value of /someDirectory/Base14 inside the Base14-config file will be expanded into /someDirectory/Base14-boxes, /someDirectory/Base14-boxes-config, and /someDirectory/Base14-density (because the variable name "density" is contained within the config file.
Note that since the species file, "density" in this case, is a flat file, it is possible to concatenate together large blobs of raw data, and to access them as a single blob of data via the config file. Unfortunately, there is no support for file chaining. The Visapult back end has been tested with large files (> 4Gbytes), and will work fine for large files. Beware, however, that most implementations of NFS are not 64-bit safe, so you'll probably want to put your large files on a local disk, and not one that is NFS mounted.
Below are two sample images from the 3rd time step of the Base14 tarball, with and without grid boxes. The command lines used to generate these pictures are:
Visapult viewer % viewer -boxes Visapult backend % mpirun -np 4 ./mpiDataEngine -fdpss /tmp/Base14-config -pal ./sc99Palette
DPSS Resident Data
A number of sample data sets are resident on the DPSS at LBL, including the Base14 example (above). In fact, the FDPSS version of the DPSS-resident version was created by first "dpss_get"'ing all the Base14-* files from the DPSS, editing the Base14-config file, then rolling up a tarball.
In order to access the DPSS, you will need to closely examine the instructions for building a DPSS-enabled Visapult backEnd. Those instructions, along with a description of the data format, is listed on the Visapult-DPSS page.
UCSF Format
Data in the UCSF format consists of two files: a big wad of binary data, and a small ascii file containing metadata. The binary volume data consists of a header component, followed by raw voxel data stored as big-endian, unsigned shorts. Each short is purported to be a 12-bit voxel stored in a 16-bit word, but examination shows that only 8 significant bits of data are present in the low-order byte of each short. Thus, at this time (23 Aug 2000), the upper 8bits of data is discarded (ignored), and the low-order bytes are converted to floats in the range 0..1.0.
The small ASCII metdata file is something we added to aid in describing the data in the binary wad, and is particular to Visapult. Here's the contents of a sample file:
/tmp/binaryWad 256 256 64 1 11264
Line one contains the full path name to the raw binary file. Line two contains the dimensions of the raw volume data. In this example, the volume consists of 64 slices of data, each slice is 256 by 256 pixels, and there is only one time step's worth of data. Line three is the number of bytes of header to skip over in the binary data file. All information in the header is ignored - we didn't have any documentation on the contents of this header: it's length may be subject to change from binary file to binary file, and may not work on all files (that's why we call this "preliminary support").
The binary file for this example will consist of 11264 bytes of header data, which we ignore, followed by 256x256x64xsizeof(short) voxels worth of data.
Release Notes Summaries
9 July 2002
This release, referred to as the "Post SC01" release, contains all changes made to support full UDP interaction with Cactus, and was the code used in the 10Gb Ethernet demonstration at Berkeley in July 2002.
- Uses OpenRM 1.4.2 (or OpenRM 1.4.1)
- Uses FLTK v1.0.11 for GUI operations
- Viewer runs on Win32 or Unix/Linux platforms
16 November 2000
Post SC00 release.
- Improved DPSS support.
- Fully overlapped read/render/write.
- OpenRM 1.3.0.
- Pre-implementation of omniaxis viewing code. Disabled in this release for use at SC00.
23 August 2000
- Preliminary support for UCSF-format confocal microscopy data.
- At the request of UCSF, we have added preliminary support for their data format. Refer to this description for more information about this data format.
09 August 2000
- NLV Config file changes.
- Modified the NLV config files so that nicer output files are created. See the overlapped I/O and rendering page fore more details.
- This version of Visapult was used to generating recent timings and diagrams for the SC00 paper.
09 June 2000
- Overlapped I/O and Rendering
- The visapult backend was modified so that each MPI process will spin off a pthread that performs reads (disk files or network i/o). Rendering occurs within the MPI process, while all reading occurs in the pthread. On some platforms, the effective duty cycle of the Visapult backend will double in speed (effective throughput). Check this page for more information, including profiling analysis.
- Note about DPSS.
- We have observed that files larger than 4G on the DPSS exhibit some level of corruption. The problem is being investigated by DPSS staff.
16 May 2000
- FDPSS reader
- The "file based" fDPSS reader was added to provide support for reading large disk files. More information and sample data is available below.
- A nasty bug involving 32 vs. 64 bit offsets was located and exterminated in both the DPSS and FDPSS readers. Problems occured as one tried to seek past the magical 2G boundary - but no more.
- Makefiles were rearranged for more painless linking with the DPSS and/or NetLogger libraries.
- This version of Visapult reflects hardening that occured during the April 12 campaignlet, as well as the May 10 trip to ANL.
27 March 2000
- Mike Lewis at EVL reported additional problems compiling visapult/viewer/viewer.c with CC under IRIX. These problems were remedied by adding #ifdef __cplusplus directives to some of the Visapult support .h files.
- Libcvdev was updated to support compilation with CC.
24 March 2000
- Mike Lewis at EVL reported a problem compiling visapult/viewer/render.c with CC under IRIX. This was due to a missing include file in the render.c source.
- Preliminary DPSS support, but not quite ready for general use yet - the code needs more testing, and support for grid geometry needs to be added.
7 March 2000
- Added image scaling code to the backEnd. OpenGL requires that texture images be an even power of 2 in size. Prior to this upgrade, we were restricted to only certain scientific data sets that met those size restrictions. Now, the images will be resized to the nearest power of two that is less than or equal to the source image size.
3 March 2000
- Direct support for OpenRM v1.2.0.
22 Feb 2000
- Name change to Visapult. Due to the awkwardness of yet another acronym, the application is now officially called "Visapult". (RIP, IBRABR).
- Architecture Modifications. The entire communications and IPC infrastructure was rewritten to be more streamlined. There is now zero communication from the viewer to the backEnd during the data processing loop, thereby improving overall throughput. These changes will be documented in detail in an upcoming white paper.
- CaveViewer consolidation. In previous IBRAVR releases, there were two viewer directories, one called "mtserver" and one called "caveViewer." Now, there is just one viewer, called "viewer." (Yes, that's pretty boring). However, the one code base supports both trackd-style device input, as well as desktop UI models. The difference is in compile-flags. Use a make target of "caveViewer" to build the trackd-enabled vierer. Currently, this is tested under Irix6 only. You'll need the libcvdev.a distribution, as well as to have trackd installed on your target viewer machine. For access to libcvdev.a, see the "Quick Links" section on this page.
- Netlogger key changes. The Netlogger keys in both the viewer and backEnd were changed to be slightly more descriptive.
21 Jan 2000
- Added "-boxes" command line argument to the viewer (both mtserver and the caveViewer) to instruct the back-end to send over grid data for visualization purposes.
- Added TCP window negotiation code to sockio.c. The basic idea is
that the TCP window size information may be specified via a command-line
argument or a compile-time constant to the back-end.
The handshake between viewer and backend has been changed so that the very first socket connection from the back-end to the viewer is used to transmit the requested TCP window size to the viewer. The viewer and back-end then close that first connection, each sets the TCP window (back-end has the TCP window size, the viewer received it from the back-end), then normal operations begin. All subsequent socket connections use the new TCP window size.
We have observed a noticable delay between the first and subsequent socket connections. Since this occurs only during the startup and initialization phase, there is no adverse performance cost during the "business part" of the IBRAVR exchange. However, the delay was unexpected, and we are investigating. By "noticable delay", we mean a pause of 3 or 4 seconds when the program is starting up.
- Slam! source code updated to implement the TCP window size negotiation code.
- Added DavidR's Netlogger page.
Jan 7, 2000
- Added bandwidth usage (Mb/s) measurement and reporting code.
- Release of Slam! That tool shares code in common with the IBRAVR, specifically the byte-movement and TCP configuration code. Slam! provided the testbed for manipulating TCP parameters and verifying correct usage.
Feedback
Please send any feedback to ewbethel at lbl dot gov.