SUMMARY: Solaris Shared Memory Tuning Question

From: Dave Wreski (dave@ups.com)
Date: Tue Nov 25 1997 - 14:05:38 CST


Thanks to all. I was trying to determine the current shared memory status, and
how to change their values.

Original question:
--------------------

Do you know how to determine what the current value settings are for
the following:

shmsys:shminfo_shmmni
shmsys:shminfo_shmseg
shmsys:shminfo_shmmax
shmsys:shminfo_semmni
shmsys:shminfo_semmsl
shmsys:shminfo_semmns
shmsys:shminfo_semmnu

I have checked the /etc/system file and there are no entries for the
above, I assume that means the system is runing the defaults. What are
the defaults? I used the command sysdef and some of the above are listed
but, with the value 0. Does that mean the default is 0 or 0 represents
some default? How do I find out what the actual default values are?
Any help on this would be appreciated.

Responses:
-------------------

Response #1 -- Deepak_D_Wilson@notes.seagate.com
Hope this article helps you:-

The solaris 2.X kernel comes configured with defaults for shared memory
parameters which may not be enough for large applications, such as databases.
Many database manufacturers, such as Oracle, Sybase and Informix
require that shared memory parameters be increased to handle their
system. In general, any program which makes shared memory system
service calls will be affected.

Here are the shared memory parameters, what they are, what their default
values are, and what they represent. Please note that the maxima listed
here are based on values which will fit into their datatype, which is a
(4-byte) integer, and are not realistic. Realistic maxima are not easily
figured, as they must account for many factors, including the amount of
kernel memory required by everything else on the system, and the
amount of memory the system has.

shmmax 1048576 (1Meg) 2147482647

This is the maximum size of a shared memory segment, or the largest
value which can be requested of shmget(2). Setting this value high
does not hurt anything as the resource it controls is not
preallocated, but rather is allocated on demand.

shmmin 1 2147482647

This is the minimum size of a shared memory segment. There is no need
to change this from the default, as doing so will only break code
which allocates less than the new shmmin value allows.

shmseg 6 2147482647

This is the maximum number of shared memory segments per process. It
is used as a high limit, which is checked before another segment is
allocated. No resources are preallocated based on its value.

shmmni 100 2147482647

This is the maximum number of shared memory identifiers that can exist
systemwide. Every shared memory segment has an associated identifier,
returned from shmget(). Resources are preallocated based on this
value, (112 bytes of kernel memory per identifer) so don't set it too high.

Shared memory parameters are changed by editing the /etc/system file with
lines of the form:

  set shmsys:shminfo_variable = value

For example:

  set shmsys:shminfo_shmmni = 150

to change shmmni to 150.

After changing the /etc/system file, reboot the system to have it take
effect.

All InterProcess Communication (IPC) parameters, including those for shared
memory, are checked by doing the following:

  $ sysdef -i

Look toward the bottom of the output, for something like:

*
* IPC Shared Memory
*
1048576 max shared memory segment size (SHMMAX)
     1 min shared memory segment size (SHMMIN)
   100 shared memory identifiers (SHMMNI)
     6 max attached shm segments per process (SHMSEG)

The values at the left will reflect the values set in the /etc/system file.
If the values are zeros, load the shared memory module and try sysdef -i
again.
Do the following to load the shared memory module:

  # modload /kernel/sys/shmsys

Response #2 -- Carlo Cosolo <ccosolo@ulti.net>

Carlo suggested I call SecurID tech support, as he had problems with their
parameters and Sol 2.5.

Response #3 -- Ju-Lien Lim <julienlim@rocketmail.com>

man sysdef

Response #4 -- jyoung@educate.com

man ipcs

Response #5 -- Glenn Satchell - Uniq Professional Services
<Glenn.Satchell@uniq.com.au>

You can inspect the current value in th ekernel using adb:

# adb -k
physmem 3e40
shminfo_shmmni/D
symbol not found
^D
#

This means that this system is not using _any_ shared memory stuff as
the modules haven't even been loaded.

If you already have these values configured then just use the larger of
the two values (securid recommendation or current).

Response #6 -- "K.Ravi" <RAVKRISH.IN.oracle.com.ofcmail@in.oracle.com>

Hi,
 In Solaris, the shared memory module (or any other driver/module for that
matter) is not loaded into memory unless some process needs it. To know the
defaults, run 'modload /kernel/sys/shmsys' as root and then run 'sysdef'. If
sysdef doesn't report all the values, try this:
# adb -k /dev/ksyms /dev/mem
 
shmifno_shmmax/D
 
shminfo_shmseg/D
 
..
.
 
$q
#



This archive was generated by hypermail 2.1.2 : Fri Sep 28 2001 - 23:12:10 CDT