Solaris Tunable Parameters Reference Manual

Appendix A Tunable Parameter Change History

This chapter describes the change history of specific parameters. Parameters whose functionality has been removed are listed also.

Kernel Parameters

Process Sizing Tunables

maxusers (Solaris 7 Release)

Description

The maxusers parameter drives max_nprocs and maxuprc.

Data Type

Signed integer

Default

Lesser of the amount of memory in Mbytes and 1024

Range

1 to 2048


Note –

Values greater than 1024 must be specified in /etc/system. If a value greater than 2048 is provided, calculations clamps the value at 2048, but later processing sets the value to the provided value.


Units

Users

Dynamic?

No. After computation of dependent variables is done, maxusers is never referenced again.

Validation

None

When to Change

If the default number of user processes derived by the system is insufficient. This insufficiency is seen by the following messages on the system console or messages file.


out of processes
Commitment Level

Unstable

max_nprocs (Pre-Solaris 8 Releases)

Description

Maximum number of processes that can be created on a system. Includes system and user processes. Prior to the Solaris 8 release, the value was determined by computation and then used in the setting of maxuprc.

This value is also used in determining the size of several other system data structures. For releases prior to Solaris 8, if a value is provided in the/etc/system file it is used rather than the computed value. Other data structures where this variable plays a role are:

  • Determining the size of the directory name lookup cache (if ncsize is not specified)

  • Allocating disk quota structures for UFS (if ndquot is not specified)

  • Verifying that the amount of memory used by configured system V semaphores does not exceed system limits

  • Configuring Hardware Address Translation resources for the sun4d, sun4m, and Intel platforms

Data Type

Signed integer

Default

10 + (16 x maxusers)

Range

266 to value of pidmax

Dynamic?

No. max_nprocs is assigned to the v_proc element of the v structure after the initial parameter calculation is completed. Changing v.v_proc on a running system almost certainly results in a system crash or silent data corruption.

Validation

Compared to maxpid and set to maxpid, if larger. On the sun4d and Intel platforms, an additional check is made against a platform-specific value. max_nprocs is set to the smallest value in the triplet (max_nprocs, maxpid, platform value). Both platforms use 65,534 as the platform value.

When to Change

Starting with the Solaris 8 release, this value can be changed to enable more than 30,000 processes on a system. Changing this parameter is one of the steps necessary to enable support for more than 30,000 processes on a system.

Commitment Level

Unstable

Paging Related Tunables

In certain revisions of the Solaris 2.6 kernel patch (105181-10 for SPARC platforms and 105182-09 for Intel platforms) and in the Solaris 7 release, a new parameter is introduced: priority paging. A new starting point for pageout thread activity (cachefree) is also used. When available memory is between cachefree and lotsfree, priority paging modifies the page-checking algorithm to skip the page, if it came from an executable (text, stack, or data). After memory falls below lotsfree, every page is considered equally. The facility is not enabled by default, but can be enabled by either setting cachefree to a value greater than lotsfree or by setting the priority_paging variable to a non-zero value, which sets cachefree to 2 times lotsfree.

cachefree (Solaris 8 Releases)

Description

The Solaris 8 release changes the way file system pages are cached. These changes subsume the priority paging capability.


Note –

Remove both cachefree and priority_paging settings in the /etc/system file.


The caching changes remove most of the pressure on the virtual memory system resulting from file system activity. Several statistics exhibit new behavior:

  • Page reclaims are higher because pages are now explicitly added to the free list after I/O completes.

  • Free memory is now higher because the free memory count now includes a large component of the file cache.

  • Scan rates are drastically reduced.

Commitment Level

Obsolete

Change History

See cachefree (Solaris 2.6 and Solaris 7 Releases) for more information.

cachefree (Solaris 2.6 and Solaris 7 Releases)

Description

Enables priority paging feature, provided cachefree is greater than lotsfree. This variable is available for systems running the Solaris 2.6 release, with at a minimum, revision 10 of patch 105181 installed, and for systems running the Solaris 7 release. By default, this feature (cachefree equals lotsfree) is disabled.

Data Type

Unsigned long

Default

Value of lotsfree unless priority_paging is set, which means cachefree is 2 times lotsfree

Range

lotsfree to physical memory on system

Units

Pages

Dynamic?

Yes

Validation

If less than lotsfree, it is reset to the value of lotsfree.

When to Change

Should always be enabled unless the system is tight on memory, and does excessive I/O where the contents of the files are needed in the future.

Commitment Level

Obsolete

priority_paging (Solaris 8 Releases)

Description

This variable sets cachefree to 2 times lotsfree.

The Solaris 8 release changes the way file system pages are cached. These changes subsume the priority paging capability.


Note –

Remove both cachefree and priority_paging settings in the /etc/system file.


Commitment Level

Obsolete

Change History

See priority_paging (Solaris 2.6 and 7 Releases) for more information.

priority_paging (Solaris 2.6 and 7 Releases)

Description

Enables priority paging feature. When set, this variable sets cachefree to 2 times lotsfree, thereby enabling priority paging.

Data Type

Signed integer

Default

0

Range

0 (priority paging disabled unless cachefree set separately) or 1 (enabled)

Units

Toggle (on/off)

Dynamic?

No. Sets the value of cachefree at boot time only. Runtime enabling can be achieved by setting cachefree with mdb while the system is running.

Validation

None

When to Change

Should always be enabled unless the system is tight on memory, and does excessive I/O where the contents of the files are needed in the future.

Commitment Level

Obsolete

tmpfs:tmpfs_minfree

Description

Minimum amount of swap space that TMPFS leaves for the rest of the system.

Data Type

Signed long

Default

256

Range

0 to maximum swap space size

Units

Bytes

Dynamic?

Yes

Validation

None

When to Change

To maintain a reasonable amount of swap space on systems with large amounts of TMPFS usage, you can increase this number. The limit has been reached when the console or system messages file displays the following message.


fs-name: File system full, swap space limit exceeded
Commitment Level

Unstable

pages_pp_maximum (Pre-Solaris 9 Releases)

Description

Defines the number of pages that the system requires be unlocked. If a request to lock pages would force available memory below this value, that request is refused.

Data Type

Unsigned long

Default

Maximum of the triplet (200, tune_t_minarmem + 100, [10% of memory available at boot time])

Range

Default value to no more than 20% of physical memory. The systems does no enforcement of this range other than that described in the Validation section.

Units

Pages

Dynamic?

Yes, unless dynamic reconfiguration operations that add or delete memory occur. At that point, the value is reset to whatever was provided in the /etc/system file or was calculated.

Validation

Maximum of the quadruplet (200, tune_t_minarmem + 100, [10% of memory available], and the value from /etc/system). No message is displayed if the value from /etc/system is increased. Done only at boot time.

When to Change

When memory locking requests or attaching to a shared memory segment with the SHARE_MMU flag fails, yet the amount of memory available seems to be sufficient. Keeping 10% of memory free on a 32-Gbyte system might be excessive.

Excessively large values can cause memory locking requests to fail unnecessarily.

Commitment Level

Unstable

General Kernel Variables

noexec_user_stack (Solaris 2.6, 7, and 8 Releases)

Description

Introduced in the Solaris 2.6 release to allow the stack to be marked as non-executable. This helps make buffer-overflow attacks more difficult.

In the Solaris 2.6 release, the value does not affect threaded applications. All 64-bit Solaris applications effectively make all stacks non-executable irrespective of the setting of this variable.


Note –

This variable exists on all systems running the Solaris 2.6, 7, or 8 release, but it is only effective on sun4u, sun4m, and sun4d architectures.


Data Type

Signed integer

Default

0 (disabled)

Range

0 (disabled), 1 (enabled)

Units

Toggle (on/off)

Dynamic?

Yes. Does not affect currently running processes—only those created after the value is set.

Validation

None

When to Change

Should be enabled at all times unless applications are deliberately placing executable code on the stack without using mprotect(2) to make the stack executable.

Commitment Level

Unstable

General I/O

rlim_fd_cur (Pre-Solaris 7 and the Solaris 7 Release)

Description

"Soft" limit on file descriptors that a single process can have open. A process might adjust its file descriptor limit to any value up to the "hard" limit defined by rlim_fd_max by using the setrlimit() call or issuing the limit command in whatever shell it is running. You do not require superuser privilege to adjust the limit to any value less than or equal to the hard limit.

Data Type

Signed integer

Default

64

Range

1 to MAXINT

Units

File descriptors

Dynamic?

No. Loaded into rlimits structure.

Validation

Compared to rlim_fd_max and if rlim_fd_cur is greater than rlim_fd_max, rlim_fd_cur is reset to rlim_fd_max.

When to Change

When the default number of open files for a process is not enough. Increasing this value means only that it is possibly not necessary for a program to use setrlimit(2) to increase the maximum number of file descriptors available to it.

Commitment Level

Unstable

rlim_fd_max (Solaris 8 Release)

Description

"Hard" limit on file descriptors that a single process might have open. To override this limit requires superuser privilege.

Data Type

Signed integer

Default

1024

Range

1 to MAXINT

Units

File descriptors

Dynamic?

No

Validation

None

When to Change

When the maximum number of open files for a process is not enough. Note that other limitations in system facilities can mean that a larger number of file descriptors is not as useful as it might be:

  • A 32-bit program using standard I/O is limited to 256 file descriptors. A 64-bit program using standard I/O can use up to 2 billion descriptors.

  • select(3C) is by default limited to 1024 descriptors per fd_set. Starting with the Solaris 7 release, 32-bit application code can be recompiled with a larger fd_set size (less than or equal to 65,536). A 64-bit application sees an fd_set size of 65,536, which cannot be changed.

An alternative to changing this on a system wide basis is to use the plimit(1) command. If a parent process has its limits changed by plimit, all children inherit the increased limit. This is useful for daemons such as inetd.

Commitment Level

Unstable

segkpsize (Pre-Solaris 7 and the Solaris 7 Release)

Description

Specify the amount of kernel pageable memory available. This memory is used primarily for kernel thread stacks. Increasing this number allows either larger stacks for the same number of threads or more threads. This parameter can only be set on 64–bit kernels. 64-bit kernels use a default stack size of 24 Kbytes.

Available for the Solaris 7 release with patch 106541-04 or the Solaris 7 5/99 and Solaris 8 releases.

Data Type

Unsigned long

Default

64–bit kernels, 2 Gbytes

32–bit kernels, 512 Mbytes

Range

64–bit kernels, 512 Mbytes - 24 Gbytes

32-bit kernels, 512 Mbytes

Units

Mbytes

Dynamic?

No

Validation

None

When to Change

Increase when more threads are desired.

Commitment Level

Unstable

Pseudo Terminals

pt_cnt (Pre-Solaris 7 and the Solaris 7 Release)

Description

Number of /dev/pts (the pseudo terminal devices used by telnet or rlogin for network logins) entries to create on a reconfiguration boot. This parameter effectively limits the number of users that can simultaneously be logged in across the net to the value of pt_cnt. You must do a reconfiguration boot (boot -r) after making the change to the /etc/system file for the additional device nodes to be created.

Data Type

Signed integer

Default

48

Range

0 to maxpid

Units

logins/windows

Dynamic?

No

Validation

None. Excessively large values hang the system.

When to Change

When the desired number of users cannot log in to the system.

Commitment Level

Unstable

Sun4u Specific

enable_grp_ism (Solaris 2.6 Release)

Description

Enables a shared memory Translation Setaside Buffer (TSB) capability for System V Shared Memory that has been attached with the SHARE_MMU flag set. This parameter is available in, at minimum, patch 105181-05 for the Solaris 2.6 release. Starting with the Solaris 7 release, the parameter name has been removed, but the system implements this parameter by default.

Data Type

Signed integer

Default

0

Range

0 (disabled) or 1 (enabled)

Dynamic?

No

Validation

None

When to Change

Turn on when using System V Shared Memory attached with the SHARE_MMU flag set.

Commitment Level

Unstable

Parameters With No Functionality

The following section describes parameters whose functionality has been removed, but the parameter might still be available for compatibility reasons. These parameters are ignored if they are set.

Paging-Related Tunables

tune_t_gpgslo

Description

Obsolete. Variable left in place for compatibility reasons.

tune_t_minasmem

Description

Obsolete. Variable left in place for compatibility reasons.

System V Message Parameters

msgsys:msginfo_msgssz

Description

Specifies size of chunks system uses to manage space for message buffers. Obsolete since the Solaris 8 release.

Data Type

Signed integer

Default

40

Range

0 to MAXINT

Dynamic?

No. Loaded into msgtql field of msginfo structure.

Validation

The space consumed by the maximum number of data structures that would be created to support the messages and queues is compared to 25% of the available kernel memory at the time the module is loaded. If the number is too big, the message queue module refuses to load and the facility is unavailable. This computation does include the space that might be consumed by the messages. This situation occurs only when the module is first loaded.

When to Change

When the default value is not enough. Generally changed at the recommendation of software vendors.

Commitment Level

Obsolete

msgsys:msginfo_msgmap

Description

Number of messages the system supports. Obsolete since the Solaris 8 release.

Data Type

Signed integer

Default

100

Range

0 to MAXINT

Dynamic?

No

Validation

The space consumed by the maximum number of data structures that would be created to support the messages and queues is compared to 25% of the available kernel memory at the time the module is loaded. If the number is too big, the message queue module refuses to load and the facility is unavailable. This computation does include the space that might be consumed by the messages. This situation occurs only when the module is first loaded.

When to Change

When the default value is not enough. Generally changed at the recommendation of software vendors.

Commitment Level

Obsolete

msgsys:msginfo_msgseg

Description

Number of msginfo_msgssz segments the system uses as a pool for available message memory. Total memory available for messages is msginfo_msgseg * msginfo_msgssz. Obsolete as of the Solaris 8 release.

Data Type

Signed short

Default

1024

Range

0 to 32,767

Dynamic?

No

Validation

The space consumed by the maximum number of data structures that would be created to support the messages and queues is compared to 25% of the available kernel memory at the time the module is loaded. If the number is too big, the message queue module refuses to load and the facility is unavailable. This computation does not include the space that might be consumed by the messages. This situation occurs only when the module is first loaded.

When to Change

When the default value is not enough. Generally changed at the recommendation of software vendors.

Commitment Level

Obsolete

System V Semaphore Parameters

semsys:seminfo_semmap

Obsolete. Variable is present in kernel for compatibility reasons but is no longer used.

semsys:seminfo_semusz

Obsolete. Any values entered are ignored.

System V Shared Memory

shmsys:shminfo_shmmin

Obsolete. Variable is present in kernel for compatibility reasons but is no longer used.

shmsys:shminfo_shmseg

Obsolete. Variable is present in kernel for compatibility reasons but is no longer used.

NFS Module Parameters

nfs:nfs_32_time_ok

Obsolete as of the Solaris 8 release.

nfs:nfs_acl_cache

Obsolete as of the Solaris 2.6 release.