This chapter describes the change history of specific parameters. Parameters whose functionality has been removed are listed also.
Signed integer
Lesser of the amount of memory in Mbytes and 1024
1 to 2048
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.
Users
No. After computation of dependent variables is done, maxusers is never referenced again.
None
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 |
Unstable
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
Signed integer
10 + (16 x maxusers)
266 to value of pidmax
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.
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.
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.
Unstable
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.
The Solaris 8 release changes the way file system pages are cached. These changes subsume the priority paging capability.
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.
Obsolete
See cachefree (Solaris 2.6 and Solaris 7 Releases) for more information.
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.
Unsigned long
Value of lotsfree unless priority_paging is set, which means cachefree is 2 times lotsfree
lotsfree to physical memory on system
Pages
Yes
If less than lotsfree, it is reset to the value of lotsfree.
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.
Obsolete
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.
Remove both cachefree and priority_paging settings in the /etc/system file.
Obsolete
See priority_paging (Solaris 2.6 and 7 Releases) for more information.
Enables priority paging feature. When set, this variable sets cachefree to 2 times lotsfree, thereby enabling priority paging.
Signed integer
0
0 (priority paging disabled unless cachefree set separately) or 1 (enabled)
Toggle (on/off)
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.
None
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.
Obsolete
Minimum amount of swap space that TMPFS leaves for the rest of the system.
Signed long
256
0 to maximum swap space size
Bytes
Yes
None
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 |
Unstable
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.
Unsigned long
Maximum of the triplet (200, tune_t_minarmem + 100, [10% of memory available at boot time])
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.
Pages
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.
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 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.
Unstable
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.
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.
Signed integer
0 (disabled)
0 (disabled), 1 (enabled)
Toggle (on/off)
Yes. Does not affect currently running processes—only those created after the value is set.
None
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.
Unstable
“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.
Signed integer
64
1 to MAXINT
File descriptors
No. Loaded into rlimits structure.
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 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.
Unstable
“Hard” limit on file descriptors that a single process might have open. To override this limit requires superuser privilege.
Signed integer
1024
1 to MAXINT
File descriptors
No
None
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.
Unstable
This parameter was moved to the General Parameters section of Chapter 2, Solaris Kernel Tunables and was updated. For more information, see segkpsize.
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 systems running 64–bit kernels. Systems running 64-bit kernels use a default stack size of 24 Kbytes.
Unsigned long
64–bit kernels, 2 Gbytes
32–bit kernels, 512 Mbytes
64–bit kernels, 512 Mbytes - 24 Gbytes
32-bit kernels, 512 Mbytes
Mbytes
No
Value is compared to minimum and maximum sizes (512 Mbytes and 24 Gbytes for 64-bit systems) and if smaller than the minimum or larger than the maximum, it is reset to 2 Gbytes and a message to that effect is displayed.
The actual size used in creation of the cache is the lesser of the value specified in segkpsize after the constraints checking and 50% of physical memory.
This is one of the steps necessary to support large numbers of processes on a system. The default size of 2 Gbytes, assuming at least 1 Gbyte of physical memory is present, allows creation of 24–Kbyte stacks for more than 87,000 kernel threads. The size of a stack in a 64-bit kernel is the same whether the process is a 32-bit process or a 64-bit process. If more than this number is needed, segkpsize can be increased assuming sufficient physical memory exists.
Unstable
For information, see segkpsize (Pre-Solaris 7 and the Solaris 7 Release).
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.
Unsigned long
64–bit kernels, 2 Gbytes
32–bit kernels, 512 Mbytes
64–bit kernels, 512 Mbytes - 24 Gbytes
32-bit kernels, 512 Mbytes
Mbytes
No
None
Increase when more threads are desired.
Unstable
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.
Signed integer
48
0 to maxpid
logins/windows
No
None. Excessively large values hang the system.
When the desired number of users cannot log in to the system.
Unstable
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.
Signed integer
0
0 (disabled) or 1 (enabled)
No
None
Turn on when using System V Shared Memory attached with the SHARE_MMU flag set.
Unstable
Maximum size of system V shared memory segment that can be created. This parameter is an upper limit that is checked before the system sees if it actually has the physical resources to create the requested memory segment.
Attempts to create a shared memory section whose size is zero or whose size is larger than the specified value will fail with an EINVAL error.
Unsigned long
8,388,608
0 - MAXINT on 32-bit systems, MAXINT64 on 64-bit systems
Bytes
No. Loaded into shmmax field of shminfo structure.
None
When the default value is too low. Generally changed at the recommendation of software vendors, but unless the size of a shared memory segment needs to be constrained, setting this parameter to the maximum possible value has no side effects.
Unstable
The depth of the syncq (number of messages) before a destination streams queue generates a QFULL message.
2 messages
1 to 0 (unlimited)
No
When NCA is running on a system with a lot of memory, increase this parameter to allow drivers to queue more packets of data. If a server is under heavy load, increase this parameter so modules and drivers may process more data without dropping packets or getting backlogged.
Unstable
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.
Specifies size of chunks system uses to manage space for message buffers. Obsolete since the Solaris 8 release.
Signed integer
40
0 to MAXINT
No. Loaded into msgtql field of msginfostructure.
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 the default value is not enough. Generally changed at the recommendation of software vendors.
Obsolete
Number of messages the system supports. Obsolete since the Solaris 8 release.
Signed integer
100
0 to MAXINT
No
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 the default value is not enough. Generally changed at the recommendation of software vendors.
Obsolete
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.
Signed short
1024
0 to 32,767
No
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 the default value is not enough. Generally changed at the recommendation of software vendors.
Obsolete
Obsolete. Variable is present in kernel for compatibility reasons but is no longer used.
Obsolete. Any values entered are ignored.
Obsolete. Variable is present in kernel for compatibility reasons but is no longer used.
Obsolete. Variable is present in kernel for compatibility reasons but is no longer used.
Obsolete as of the Solaris 8 release.