4.94 Release Notes for SGI IRIX Computers
Back to Release Notes.
CONTENTS
1. FEATURES THAT AFFECT SGI USERS
2. OBJECT-CODE FORMATS
3. KERNEL RECONFIGURATION FOR DATABASE SERVERS
4. KERNEL RECONFIGURATION FOR System V IPC
5. KERNEL RECONFIGURATION FOR 64-bit Merlinserver
6. SHARED OBJECTS and RUNTIME DYNAMIC LINKING
7. THORSERVER & MERLINSERVER
---------------------------------------------------------------------------
1. FEATURES THAT AFFECT SGI USERS
The following shell scripts are provided to run XView programs
under SGI's default "4dwm" window manager;
xvmerlin4d
xvpcmodels4d
xvthor4d
sgi4d
These scripts are supported but are no longer absolutely required. Changes
to the Daylight "Options Manager" system allows automatic adjustment of
options which are window-environment specific (details below). In most
cases, the user environment can be arranged so that these scripts are not
needed. You may safely stop using the "4d" scripts under these conditions:
o you are not using SGI's default "4dwm" window manager, OR
o your client programs are running on an IRIX operating system, OR
o you have set the environment variable DY_WINDOW_ENVIRONMENT to SGI_4DWM
AND
o you are willing to set your default font as described below.
If you stop using the "4d" scripts, you must add a line similar to this to
your X Resources database (i.e. to the file $HOME/.Xdefaults):
Font.Name: -adobe-helvetica-medium-r-normal--14-100-100-100-p-76-iso8859-1
Without this specified, XView programs will work correctly, but fonts used
for titles and buttons may be big and ugly. This normally takes effect when
you start X-Windows. To make this change effective immediately, enter:
$ xrdb $HOME/.Xdefaults
An example .Xdefaults that contains this line can be found in
$DY_ROOT/contrib/home/sgi/.Xdefaults.
Background:
A bug in the IRIX X Window system combined with bad habits in Sun's XView
code caused the IRIX window system to "lock up" when Daylight applications
were run. In addition, many of the default options (such as fonts, and
graphics parameters) had to be changed for optimum performance when running
under SGI's default window manager "4dwm".
To solve this, Daylight supplies a set of "wrapper" scripts, "xvmerlin4d",
"xvthor4d", and "xvpcmodels4d", that invokes XView programs with parameters
appropriate for use with IRIX X-servers and the 4dwm window manager.
With release 4.33 and later ...
These features are added to the Daylight "Options Manager" package:
1. A new "#if/#else/#endif" feature was added to the Daylight options
manager. This allows selective processing of options.
2. If the environment variable DY_OPERATINGSYSTEM is not defined at
runtime, the Daylight options manager will automatically set it to
the client's operating system (e.g., "IRIX", "SunOS", "HP-UX").
3. A new version of dy_sysprofile.dat is provided as a suggested
system profile. This file uses the new "#if" feature to set up
O/S- and window-specific options from environment variables
DY_OPERATINGSYSTEM and DY_WINDOW_ENVIRONMENT. Options for these
environments are provided: SGI_4D, HP_VUE, MAC_X, and SUN_OLWM.
The file dy_sysprofile.dat sets default SGI_4D option values for IRIX
operating systems, HP_VUE values for HP-UX, SUN_OLWM values for SunOS.
These values will be overridden if the DY_WINDOW_ENVIRONMENT variable
is defined. The MAC_X environment must be specified when needed.
---------------------------------------------------------------------------
2. OBJECT-CODE FORMATS
This version of the Daylight system has been compiled under IRIX 6.5.
A single set of binaries, which run under all IRIX6 machines (on R4000 or
newer CPUs) is distributed. For users of the toolkit libraries, the
situation is complicated by the object file formats.
Several years ago, in order to support 64-bit native systems, SGI changed
its object code (.o) file formats. Under IRIX 6.X, SGI supports
three separate object file formats: 'old 32-bit', 'new 32-bit'
and '64-bit'.
The SGI C and Fortran compilers and linker can generate all three object
format files. SGI supplies system libraries in all three formats.
Format Compiler flag System Library path
old 32-bit -32 /usr/lib
new 32-bit -n32 /usr/lib32
64-bit -64 /usr/lib64
SGI now uses three environment variables for the dynamic linker:
LD_LIBRARY_PATH: default shared library path (/lib:/usr/lib)
LD_LIBRARYN32_PATH: new 32-bit shared library path (/lib32:/usr/lib32)
LD_LIBRARY64_PATH: 64-bit shared library path (/lib64:/usr/lib64)
At runtime, the dynamic linker decides which format libraries are required
and uses the appropriate library path environment variable to search for the
needed libraries. LD_LIBRARY_PATH is searched first for libraries which
match the required format. Hence, the typical Daylight installation
only requires that LD_LIBRARY_PATH includes $DY_ROOT/lib. Furthermore,
it is legal to include different format library paths in LD_LIBRARY_PATH,
and omit the definition of LD_LIBRARYN32_PATH or LD_LIBRARY64_PATH.
For this version, Daylight is using -n32 as the default format for all
compilations and executables. We are using slightly different
naming conventions for our libraries.
The old 32-bit format libraries are no longer supported and are not
shipped with this release.
The new 32-bit format libraries are in the $DY_ROOT/lib directory.
They are compiled using the -n32 option for cc and f77, which are now
default on the SGI C-compiler. (See previous paragraph)
Under IRIX6.X, Daylight supports 64-bit native toolkit code. The 64-bit
toolkit libraries are available in the directory $DY_ROOT/lib64.
Unfortunately, XView is not available in 64-bit format in this release.
If you are developing XView programs using the Daylight widgets, they must
be compiled using the new format 32-bit libraries. In this case, at
runtime, LD_LIBRARY_PATH must include $DY_ROOT/lib in order for the
runtime linker to find the appropriate files.
To compile the contrib code in new 32-bit format in $DY_ROOT/contrib/src
type "make install". To compile the contrib code in 64-bit format
in $DY_ROOT/contrib/src type "make install64".
---------------------------------------------------------------------------
3. KERNEL RECONFIGURATION FOR DATABASE SERVERS
The Problem:
If you have a very large database, such as the SPRESI database, your
kernel may be configured with a memory limit that is too small.
When you try to load the database into the Merlin server, the server
will report "Out of memory," even when there is plenty of memory.
The Solution:
Use the "systune" program to reconfigure your system. The following
example illustrates raising the memory limits for each process to 1
gigabyte (only the super-user can do this):
# systune -i
systune-> resource
group: resource (statically changeable)
rlimit_rss_max = 536870912 (0x20000000)
rlimit_rss_cur = 1054482432 (0x3eda2000)
rlimit_vmem_max = 536870912 (0x20000000)
rlimit_vmem_cur = 536870912 (0x20000000)
rlimit_nofile_max = 2500 (0x9c4)
rlimit_nofile_cur = 200 (0xc8)
rlimit_core_max = 2147483647 (0x7fffffff)
rlimit_core_cur = 2147483647 (0x7fffffff)
rlimit_stack_max = 536870912 (0x20000000)
rlimit_stack_cur = 67108864 (0x4000000)
rlimit_data_max = 536870912 (0x20000000)
rlimit_data_cur = 536870912 (0x20000000)
rlimit_fsize_max = 2147483647 (0x7fffffff)
rlimit_fsize_cur = 2147483647 (0x7fffffff)
rlimit_cpu_max = 2147483647 (0x7fffffff)
rlimit_cpu_cur = 2147483647 (0x7fffffff)
systune-> rlimit_data_max 0x40000000
rlimit_data_max = 536870912 (0x20000000)
Do you really want to change rlimit_data_max to 1073741824
(0x40000000)? (y/n) y
In order for the change in parameter rlimit_data_cur to become
effective, reboot the system.
Do the same for:
systune-> rlimit_data_max 0x40000000 (shown above)
systune-> rlimit_data_cur 0x40000000
systune-> rlimit_vmem_cur 0x40000000
systune-> rlimit_vmem_max 0x40000000
systune-> rlimit_rss_cur 0x40000000
systune-> rlimit_rss_max 0x40000000
One customer trying to use more than 1 GB reports that several other
parameters had to be changed:
rsshogfrac to 98
gpgshi -- still experimenting?
gpgslo -- still experimenting?
See the system administration manual for complete details, and consult
your SGI representative for more assistance.
---------------------------------------------------------------------------
4. KERNEL RECONFIGURATION FOR System V IPC
The Problem:
Beginning with Version 4.41, the nearneighbors program
uses System V semaphores for scheduling and process management.
In some environments, the default number of semaphores configured
into the kernel may be too small. This is indicated by problems
starting either of the above applications.
The Solution:
Reconfigure the kernel with more semaphores. This is accomplished by
performing the following steps:
1. Run 'systune -i' as root. Within this shell, enter the following
two commands:
semmns 256
semmsl 128
2. Exit the systune shell.
3. Reboot.
This procedure should increase the number of semaphores sufficiently
for almost all installations.
---------------------------------------------------------------------------
5. KERNEL RECONFIGURATION FOR 64-bit Merlinserver
The Problem:
If you have a very large database, such as the SPRESI database, your
kernel may be configured with a memory limit that is too small.
The 64-bit merlinserver enables loading of multiple large databases
provided the process limits and combined RAM and swap allow so.
When you try to load the database into the Merlin server, the server
will report "Out of memory," even when there is plenty of memory.
In practice it has been found that 32-bit Merlinserver can't have a pool
size greater than 1.7 GB on IRIX. For any pool size above this, we
recommend using 64-bit Merlinserver
The Solution:
Use the "systune" program to reconfigure your system. The following
example illustrates raising the memory limits for each process to be
unlimited i.e. limited only by the combined RAM + swap space which should
exceed the combined size of the databases to be loaded.
(only the super-user can do this):
# systune -i
systune-> resource
group: resource (statically changeable)
rlimit_rss_max = 536870912 (0x20000000)
rlimit_rss_cur = 1054482432 (0x3eda2000)
rlimit_vmem_max = 536870912 (0x20000000)
rlimit_vmem_cur = 536870912 (0x20000000)
rlimit_nofile_max = 2500 (0x9c4)
rlimit_nofile_cur = 200 (0xc8)
rlimit_core_max = 2147483647 (0x7fffffff)
rlimit_core_cur = 2147483647 (0x7fffffff)
rlimit_stack_max = 536870912 (0x20000000)
rlimit_stack_cur = 67108864 (0x4000000)
rlimit_data_max = 1073741824 (0x40000000)
rlimit_data_cur = 1073741824 (0x40000000)
rlimit_fsize_max = 2147483647 (0x7fffffff)
rlimit_fsize_cur = 2147483647 (0x7fffffff)
rlimit_cpu_max = 2147483647 (0x7fffffff)
rlimit_cpu_cur = 2147483647 (0x7fffffff)
systune-> rlimit_data_max 0x7fffffffffffffff
rlimit_data_max = 1073741824 (0x40000000)
Do you really want to change rlimit_data_max to 9223372036854775807
(0x7fffffffffffffff)? (y/n) y
In order for the change in parameter rlimit_data_cur to become
effective, reboot the system.
Do the same for:
systune-> rlimit_data_max 0x7fffffffffffffff (shown above)
systune-> rlimit_data_cur 0x7fffffffffffffff
systune-> rlimit_vmem_cur 0x7fffffffffffffff
systune-> rlimit_vmem_max 0x7fffffffffffffff
systune-> rlimit_rss_cur 0x7fffffffffffffff
systune-> rlimit_rss_max 0x7fffffffffffffff
To obtain the currently available swap space
# swap -l
which outputs something similar to
swap path dev pri swaplo blocks free maxswap vswap
2 /usr3/swap/swap1
0,315 2 0 8388608 3564512 8388608 0
1 /dev/swap
0,263 0 0 1048576 4128 1048576 0
The swap space is normally mentioned in blocks, each block corresponding to
approximately 0.5K. The combined RAM + swap must be at least as large as
the combined sizes of the databases to be loaded in the pool.
The available RAM on a system can be obtained by running the command
#hinv
which outputs something like
6 195 MHZ IP27 Processors
CPU: MIPS R10000 Processor Chip Revision: 2.6
FPU: MIPS R10010 Floating Point Chip Revision: 0.0
Main memory size: 1024 Mbytes
Instruction cache size: 32 Kbytes
Data cache size: 32 Kbytes
...
The Main memory size refers to the available RAM on the system (in this
case ~1GB)
To increase the swap space several alternatives are available and are
detailed on the system documentation (accessible with the command "insight"
or with "man swap")
After doing this if you're using the C-Shell or a derivative such as tcsh,
make sure that your user limits are all set to be unlimited or are set to
the hard limits set by the OS. To check your limits run:
csh% limit
cputime unlimited
filesize unlimited
datasize unlimited
stacksize 65536 kbytes
coredumpsize unlimited
memoryuse 2097152 kbytes
descriptors 1024
vmemoryuse unlimited
To unlimit any parameter that is limited (e.g. memoryuse) run the command:
csh% limit memoryuse unlimit
If the limit command still shows a limit for memoryuse, this is a parameter
that is hard set in your kernel. If the limit is not sufficient (i.e., it
is < 4GB (2^32)) see the top part of this section for information on
how to increase this limit if needed.
csh% limit datasize unlimit
The datasize limit controls the maximum size of the data segment.
This limit should either be set to unlimited or to a value larger than the
expected merlinserver size.
---------------------------------------------------------------------------
6. SHARED OBJECTS and RUNTIME DYNAMIC LINKING
Beginning with version 4.61, Daylight has converted all of its
executables to use dynamic runtime linking. This feature
allows the operating system to more efficiently use its
resources when multiple users are executing Daylight programs.
The operating system only needs to load one copy of the
Daylight libraries into memory to service all program users.
This saves memory, and can significantly improve overall
system throughput for a heavily loaded system.
A secondary benefit of this change is that the binaries
of Daylight programs are smaller by a factor of 5 - 10X.
Basically, this is due to the fact that the core toolkit
code is not duplicated in every binary.
There are two issues related to making this switch to dynamic
shared objects. First, there is a slight startup penalty
while the operating system figures out where the dynamic
shared libraries are found. This delay is on the order
of 10 milliseconds and should not be noticed by interactive
users. Furthermore, the overall performance of applications
appears to be better, because the system doesn't have
to load a copy of the toolkit for every application.
The second issue is the requirement that an additional environment
variable be set by every Daylight user. The environment variable
LD_LIBRARY_PATH is used by the operating system as a search path to
find dynamic shared objects. If the needed shared objects are not
found, then a program will not execute. The default library search
path is typically set to: /usr/lib:/lib/
The directory $DY_ROOT/lib/ must be added to this path.
sh and ksh:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DY_ROOT/lib/
export LD_LIBRARY_PATH
csh:
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${DY_ROOT}/lib/
Once set, Daylight executable programs will run without
further intervention. If this variable is set incorrectly,
Daylight programs will fail with the following messages:
$ thorls
29525:thorls: rld: Fatal Error: cannot map soname 'libdt_thor.so'
using any of the filenames /usr/lib/libdt_thor.so:/lib/libdt_thor.so:
-- either the file does not exist or the file is not mappable
(with reason indicated in previous msg)
This message indicates that the runtime linker can't figure
out where the file 'libdt_thor.so' is located. Correctly
setting the LD_LIBRARY_PATH will fix this problem.
NOTE: The program testlicense is not dynamically linked, since
the license management code must be present in every executable.
Testlicense will run successfully even though the LD_LIBRARY_PATH
variable is not set.
For IRIX6, the situation is slightly complicated by the fact
that SGI supports three separate binary formats. Daylight
supports n32 and 64 binary formats of the Dynamic Shared
libraries. We recommend setting the different environment
variables as follows:
sh and ksh:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DY_ROOT/lib
LD_LIBRARY64_PATH=$LD_LIBRARY64_PATH:$DY_ROOT/lib64
export LD_LIBRARY_PATH LD_LIBRARY64_PATH
csh:
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${DY_ROOT}/lib/
setenv LD_LIBRARY64_PATH ${LD_LIBRARY64_PATH}:${DY_ROOT}/lib64/
Once these three environment variables are set, the system will
automagically use the correct libraries for a given binary.
---------------------------------------------------------------------------
7. THORSERVER & MERLINSERVER
The thorserver uses 34-bit file offsets and has a database file size
limit of 16GB. Writing data beyond the limit will cause database
corruption. As a protective measure, the thorserver will deny I/O
and issue a nonfatal error when a load of a TDT begins within 1MB
of the limit. If you want to load large (>1MB) TDT's, you are
unprotected from writing beyond the limit.
Back to Release Notes.
|