This chapter describes the change history of specific tunable parameters. If a parameter is in this section, it has changed from a previous release. Parameters whose functionality has been removed are listed also.
The Solaris 10 description section was updated by removing the text “sun4m.”
This parameter is new in SXCE, build 111 or Open Solaris 2009.06 release. For more information, see ddi_msix_alloc_limit.
The igb network driver parameters are provided in SXCE, build 111 or Open Solaris 2009.06 release. For more information, see .
The ixgbe network driver parameters are provided in SXCE, build 111 or Open Solaris 2009.06 release. For more information, see ixgbe Parameters.
The default value is updated to include sun4v systems. For more information, see maxphys.
The text “126,976 (sun4m)” was removed from the Solaris 10 maxphys default section.
In the Solaris 8 version, the default is 1024. In later Solaris releases, the default is 65,536.
The Solaris 10 description section was updated by removing the text “and sun4m” and adding the text “64–bit SPARC and AMD64.”
The Solaris 10 description section was updated by adding default and maximum values for AMD64.
The Solaris 10 default value for SPARC platforms was changed to 24,576.
The Solaris 9 description section was updated by removing the text “and sun4d.”
In previous Solaris 9 releases, units were incorrectly identified as Mbytes instead of 8-Kbyte pages. In addition, the following text is removed from the range and default descriptions in the Solaris 10 release because this parameter is only available on systems running 64-bit kernels:
32-bit kernels, 512 Mbytes
In the Solaris Express Community Edition release, the description was clarified by including that number of physical memory pages are examined.
In the Solaris 10 versions, the range value was incorrectly documented as 1 to 1024. The actual range depends on system architecture and I/O subsystems. For more information, see maxpgio.
In the Solaris 8 versions, the default description is as follows:
Maximum of the triplet (200, tune_t_minarmem + 100, [10% of memory available at boot time])
In the Solaris 9 release and previous releases, the nfs:nrnode parameter was incorrectly identified as nfs:nfs_rnode in the when to change description.
In the Solaris 10 release, the default value of the ncsize parameter was incorrectly described as follows:
4 x (v.v_proc + maxusers) + 320 / 100
The correct default value is as follows:
(4 x (v.v_proc + maxusers) + 320) + (4 x (v.v_proc + maxusers) + 320 / 100
For more information, see ncsize.
This parameter information changed significantly in the Solaris 10 release. Please see bufhwm and bufhwm_pct for more information.
Maximum amount of memory for caching I/O buffers. The buffers are used for writing file system metadata (superblocks, inodes, indirect blocks, and directories). Buffers are allocated as needed until the amount to be allocated would exceed bufhwm. At this point, enough buffers are reclaimed to satisfy the request.
For historical reasons, this parameter does not require the ufs: prefix.
Signed integer
2% of physical memory
80 Kbytes to 20% of physical memory
Kbytes
No. Value is used to compute hash bucket sizes and is then stored into a data structure that adjusts the value in the field as buffers are allocated and deallocated. Attempting to adjust this value without following the locking protocol on a running system can lead to incorrect operation.
If bufhwm is less than 80 Kbytes or greater than the lesser of 20% of physical memory or twice the current amount of kernel heap, it is reset to the lesser of 20% of physical memory or twice the current amount of kernel heap. The following message appears on the system console and in the /var/adm/messages file.
"binit: bufhwm out of range (value attempted). Using N." |
Value attempted refers to the value entered in /etc/system or by using the kadb -d command. N is the value computed by the system based on available system memory.
Since buffers are only allocated as they are needed, the overhead from the default setting is the allocation of a number of control structures to handle the maximum possible number of buffers. These structures consume 52 bytes per potential buffer on a 32–bit kernel and 104 bytes per potential buffer on a 64–bit kernel. On a 512 Mbyte 64–bit kernel this consumes 104*10144 bytes, or 1 Mbyte. The header allocations assumes buffers are 1 Kbyte in size, although in most cases, the buffer size is larger.
The amount of memory, which has not been allocated in the buffer pool, can be found by looking at the bfreelist structure in the kernel with a kernel debugger. The field of interest in the structure is bufsize, which is the possible remaining memory in bytes. Looking at it with the buf macro by using mdb:
# mdb -kLoading modules: [ unix krtld genunix ip nfs ipc ] > bfreelist$<buf bfreelist: [ elided ] bfreelist + 0x78: bufsize [ elided ] 75734016 |
bufhwm on this system, with 6 Gbytes of memory, is 122277. It is not directly possible to determine the number of header structures used since the actual buffer size requested is usually larger than 1 Kbyte. However, some space might be profitably reclaimed from control structure allocation for this system.
The same structure on the 512 Mbyte system shows that only 4 Kbytes of 10144 Kbytes has not been allocated. When the biostats kstat is examined with kstat -n biostats, it is seen that the system had a reasonable ratio of buffer_cache_hits to buffer_cache_lookups as well. This indicates that the default setting is reasonable for that system.
Unstable
The range description is updated to include sun4v systems. For more information, see tmpfs:tmpfs_maxkmem.
In the Solaris 8 versions, the units was incorrectly described as “Bytes,” instead of “Pages.”
The title of the Sun-4u Specific Parameters section was revised in the Solaris 10 8/07 release to include sun4v systems.
The default description has changed. For more information, see default_tsb_size.
The description and default and range values have changed. For more information, see enable_tsb_rss_sizing.
The when to change example text was changed to this:
For example, changing tsb_rss_factor to 256 (effectively, 50%) instead of 384 (effectively, 75%) might help eliminate virtual address conflicts in the TSB in some cases, but will use more kernel memory, particularly on a heavily loaded system.
In the Solaris Express release, the default value was increased to 1024 blocks from 128 blocks.
The default value was incorrectly documented in the Solaris 10 release. The default value is 4.
The Solaris 10 description was updated to include the text “NFS version 4 client.”
The Solaris 10 description was updated to include the text “NFS version 4 client.”
The Solaris 10 description was updated to include the text “NFS version 4 client.”
The Solaris 10 when to change text was updated to include the text “NFS version 4 client.”
The Solaris 10 default description was updated to 1,048,576 (1 Mbyte) from 32, 768 (32 Kbytes).
The range of this parameter was incorrectly documented in previous Solaris releases. The correct range is 10 milliseconds to 1 minute.
The default value of these parameters was incorrectly documented in the Solaris 9 and Solaris 10 releases. The correct default value is disabled.
Controls whether IPv4 or IPv6 forwards packets with source IPv4 routing options or IPv6 routing headers.
1 (enabled)
This parameter was enhanced in the Solaris Express 12/05 release to deliver IP fragments in batches to the network driver. For more information, see ip_multidata_outbound.
Enables the network stack to send more than one packet at one time to the network device driver during transmission.
Enabling this parameter reduces the per-packet processing costs by improving host CPU utilization, network throughput, or both.
The multidata transmit (MDT) feature is only effective for device drivers that support this feature.
See also tcp_mdt_max_pbufs.
1 (Enabled)
0 (disabled) or 1 (enabled)
Yes
If you do not want this parameter enabled for debugging purposes or for any other reasons, disable it.
Unstable
For information, see ip_multidata_outbound (Solaris 9 Release).
This parameter information changed significantly in releases after the Solaris 9 8/03 release. Please see ip_multidata_outbound for more information.
This parameter enables the network stack to send more than one packet at one time to the network device driver during transmission.
Enabling this parameter reduces the per-packet processing costs by improving the host CPU utilization and/or network throughput.
The multidata transmit (MDT) feature is only effective for device drivers that support this feature.
The following parameter must be enabled in the /etc/system file to use the MDT parameter:
set ip:ip_use_dl_cap = 0x1
Disabled
0 (disabled), 1 (enabled)
Yes
This feature can be enabled at any time to allow for improved system performance with the following cautions:
Enabling this feature might change the appearance of any packets between the IP layer and the DLPI provider. So, any third-party STREAMS module that is dynamically inserted between the IP layer and the DLPI provider by using ifconfig's modinsert feature, which doesn't understand the MDT STREAMS data type, might not work.
Modules that are inserted between the IP and the DLPI provider with the autopush(1m) mechanism might not work as well.
Keep this feature disabled when a STREAMS module is not MDT aware. For example, the public domain utilities such as ipfilter, Checkpoint Firewall-1, and so on, are not MDT aware.
Unstable
Zone configuration information was added in the Solaris 10 8/07 release. For more information, see ip_squeue_fanout.
Zone configuration information was added in the Solaris 10 8/07 release. For more information, see ip_squeue_worker_wait In addition, this parameter was moved to TCP/IP Parameters Set in the /etc/system File.
Zone configuration information was added in the Solaris 10 8/07 release. For more information, see ip_soft_rings_cnt.
This parameter was incorrectly documented in the Solaris 10 release. It has been removed.
This parameter was removed in the Solaris 10 release.
Controls the hash table size in the TCP module for all TCP connections.
Signed integer
512
512 to 1,073,741,824
The value should be a power of 2.
No. The parameter can only be changed at boot time.
If you set the parameter to a value that is not a power of 2, it is rounded up to the nearest power of 2.
If the system consistently has tens of thousands of TCP connections, increase the value accordingly. With the default value, TCP performs well up to a few thousand active connections. Note that increasing the hash table size means more memory consumption so set an appropriate value to avoid wasting memory unnecessarily.
Unstable
The default value of this parameter was changed to enabled in the Solaris 10 release.
When this parameter is enabled, which is the default setting, TCP always sends a SYN segment with the window scale option, even if the window scale option value is 0. Note that if TCP receives a SYN segment with the window scale option, even if the parameter is disabled, TCP responds with a SYN segment with the window scale option. In addition, the option value is set according to the receive window size.
Refer to RFC 1323 for the window scale option.
0 (disabled)
0 (disabled) or 1 (enabled)
Yes
If there is an interoperability problem with an old TCP stack that does not support the window scale option, disable this parameter.
Unstable
This parameter was removed in the Solaris 10 release.
Controls the hash table size in an IP module for all active (in ESTABLISHED state) TCP connections.
Unsigned integer
512
512 to 2,147,483,648
It should be a power of two.
No. This parameter can only be changed at boot time.
If you set the parameter to a value that is not a power of 2, it is rounded up to the nearest power of two.
If the system consistently has tens of thousands of active TCP connections, increase the value accordingly. With the default value, the system performs well up to a few thousand active connections. Note that increasing the hash table size means more memory consumption so set an appropriate value to avoid wasting memory unnecessarily.
Unstable
This parameter was removed in the Solaris 10 release.
If set to 1, protocol control blocks of TCP connections in TIME-WAIT state are compressed to reduce memory usage. If set to 0, no compression is done. See tcp_time_wait_interval also.
1 (enabled)
0 (disabled), 1 (enabled)
Yes
Do not turn off the compression mechanism.
Unstable
These parameters are obsolete in the Solaris 10 release.
Controls whether IP does IPv4 or IPv6 forwarding between interfaces. See also xxx:ip_forwarding (Solaris 9 Releases).
0 (disabled)
0 (disabled) or 1 (enabled)
Yes
If IP forwarding is needed, enable it.
Unstable
This parameter is obsolete in the Solaris 10 release.
Enables IPv4 forwarding for a particular xxx interface. The exact name of the parameter is interface-name:ip_forwarding. For example, two interfaces are hme0 and hme1. Here are their corresponding parameter names:
hme0:ip_forwarding and hme1:ip_forwarding
0 (disabled)
0 (disabled) or 1 (enabled)
Yes
If you need IPv4 forwarding, use this parameter to enable forwarding on a per-interface basis.
Unstable
The when to change text was revised in later Solaris releases from this:
For applications, such as web servers that might receive excessive connection requests, you can increase the default value to match the incoming rate.
The following explains the relationship between tcp_conn_req_max_q0 and the maximum number of pending connections for each socket.
When a connection request is received, TCP first checks if the number (N) of pending TCP connections (three-way handshake is done) waiting to be accepted exceeds the maximum for the listener. If the connections are excessive, the request is denied. If the number of connections is allowable, then TCP checks if the number of incomplete pending TCP connections exceeds the sum of N and tcp_conn_req_max_q0. If it does not, the request is accepted. Otherwise, the oldest incomplete pending TCP request is dropped.
to this:
For applications, such as web servers that might receive excessive connection requests, you can increase the default value to match the incoming rate.
The following explains the relationship between tcp_conn_req_max_q0 and the maximum number of pending connections for each socket.
When a connection request is received, TCP first checks if the number of pending TCP connections (three-way handshake is done) waiting to be accepted exceeds the maximum (N) for the listener. If the connections are excessive, the request is denied. If the number of connections is allowable, then TCP checks if the number of incomplete pending TCP connections exceeds the sum of N and tcp_conn_req_max_q0. If it does not, the request is accepted. Otherwise, the oldest incomplete pending TCP request is dropped.
The default value and range of values changed in the Solaris 10 release.
8192 bytes
4096 to 65,536 bytes
The default value and range of values changed in the Solaris 10 release.
8192 bytes
4096 to 65,536 bytes
The default value changed in the Solaris 10 release.
262, 144 bytes
This parameter information changed significantly in later Solaris releases. Please see sq_max_size for more information.
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 that are obsolete or have been removed from more recent Solaris releases.
Obsolete in Solaris 9 and later releases.
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
Obsolete in Solaris 9 and later releases.
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
Obsolete in the Solaris 10 release.
Signed integer
50
0 to MAXINT
No. Loaded into msgmni field of msginfo structure.
None
When msgget(2) calls return with an error of ENOSPC or at the recommendation of a software vendor.
Unstable
Obsolete in the Solaris 10 release.
Maximum number of messages that can be created. If a msgsnd call attempts to exceed this limit, the request is deferred until a message header is available. Or, if the request has set the IPC_NOWAIT flag, the request fails with the error EAGAIN.
Signed integer
40
0 to MAXINT
No. Loaded into msgtql field of msginfo structure.
None
When msgsnd() calls block or return with error of EGAIN, or at the recommendation of a software vendor.
Unstable
Obsolete in the Solaris 10 release.
Maximum number of bytes that can be on any one message queue.
Unsigned long
4096
0 to amount of physical memory
Bytes
No. Loaded into msgmnb field of msginfo structure.
None
When msgsnd() calls block or return with an error of EGAIN, or at the recommendation of a software vendor.
Unstable
Removed in the Solaris 10 release.
Specifies size of chunks system uses to manage space for message buffers.
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
Removed in the Solaris 10 release.
Number of messages the system supports.
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
Removed in the Solaris 10 release.
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.
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
Removed in the Solaris 10 release.
Unsigned long
2048
0 to amount of physical memory
Bytes
No. Loaded into msgmax field of msginfo structure.
None
When msgsnd(2) calls return with error of EINVAL or at the recommendation of a software vendor.
Unstable
Obsolete in the Solaris 10 release.
Signed integer
10
1 to 65,535
No
Compared to SEMA_INDEX_MAX (currently 65,535) and reset to that value if larger. A warning message is written to the console, messages file, or both.
When the default number of sets is not enough. Generally changed at the recommendation of software vendors. No error messages are displayed when an attempt is made to create more sets than are currently configured. Instead, the application receives a return code of ENOSPC from a semget call.
For more information, see semget(2).
Unstable
Obsolete in the Solaris 10 release.
Specifies the maximum number of System V semaphores per semaphore identifier.
Signed integer
25
1 to MAXINT
No
The amount of space that could possibly be consumed by the semaphores and their supporting data structures is compared to 25 percent of the kernel memory available at the time the module is first loaded. If the memory threshold is exceeded, the module refuses to load and the semaphore facility is not available.
When the default value is not enough. Generally changed at the recommendation of software vendors. No error messages are displayed when an attempt is made to create more semaphores in a set than are currently configured. The application sees a return code of EINVAL from a semget(2) call.
Unstable
Obsolete in the Solaris 10 release.
Specifies the maximum number of System V semaphore operations per semop call. This parameter refers to the number of sembufs in the sops array that is provided to the semop() system call. For more information, see semop(2).
Signed integer
10
1 to MAXINT
No
The amount of space that could possibly be consumed by the semaphores and their supporting data structures is compared to 25 percent of the kernel memory available at the time the module is first loaded. If the memory threshold is exceeded, the module refuses to load and the semaphore facility is not available.
When the default value is not enough. Generally changed at the recommendation of software vendors. No error messages are displayed when an attempt is made to perform more semaphore operations in a single semop call than are currently allowed. Instead, the application receives a return code of E2BIG from a semop() call.
Unstable
Removed in the Solaris 10 release.
Signed integer
60
1 to MAXINT
No
The amount of space that could possibly be consumed by the semaphores and their supporting data structures is compared to 25% of the kernel memory available at the time the module is first loaded. If the memory threshold is exceeded, the module refuses to load and the semaphore facility is not available.
When the default number of semaphores is not enough. Generally changed at the recommendation of software vendors. No error messages are displayed when an attempt is made to create more semaphores than are currently configured. The application sees a return code of ENOSPC from a semget(2) call.
Unstable
Removed in the Solaris 10 release.
Total number of undo structures supported by the System V semaphore system.
Signed integer
30
1 to MAXINT
No
The amount of space that could possibly be consumed by the semaphores and their supporting data structures is compared to 25% of the kernel memory available at the time the module is first loaded. If the memory threshold is exceeded, the module refuses to load and the semaphore facility is not available.
When the default value is not enough. Generally changed at the recommendation of software vendors. No error message is displayed when an attempt is made to perform more undo operations than are currently configured. The application sees a return value of ENOSPC from a semop(2) call when the system runs out of undo structures.
Unstable
Removed in the Solaris 10 release.
Maximum number of System V semaphore undo structures that can be used by any one process.
Signed integer
10
1 to MAXINT
No
The amount of space that could possibly be consumed by the semaphores and their supporting data structures is compared to 25% of the kernel memory available at the time the module is first loaded. If the memory threshold is exceeded, the module refuses to load and the semaphore facility is not available.
When the default value is not enough. Generally changed at the recommendation of software vendors. No error messages are displayed when an attempt is made to perform more undo operations than are currently configured. The application sees a return code of EINVAL from a semop(2) call.
Unstable
Removed in the Solaris 10 release.
Unsigned short
32,767
1 to 65,535
No
None
When the default value is not enough. Generally changed at the recommendation of software vendors. No error messages are displayed when the maximum value is exceeded. The application sees a return code of ERANGE from a semop(2) call.
Unstable
Removed in the Solaris 10 release.
Maximum value that a semaphore's value in an undo structure can be set to.
Unsigned short
16,384
1 to 65,535
No
None
When the default value is not enough. Generally changed at the recommendation of software vendors. No error messages are displayed when an attempt is made to perform more undo operations than are currently configured. The application sees a return code of EINVAL from a semop(2) call.
Unstable
Obsolete in the Solaris 8 release. Variable is present in kernel for compatibility reasons but is no longer used.
Obsolete in the Solaris 8 release. Any values entered are ignored.
Obsolete in the Solaris 10 release.
System wide limit on number of shared memory segments that can be created.
Signed integer
100
0 to MAXINT
No. Loaded into shmmni field of shminfo structure.
The amount of space consumed by the maximum possible number of data structures to support System V shared memory is checked against 25% of the currently available kernel memory at the time the module is loaded. If the memory consumed is too large, the attempt to load the module fails.
When the system limits are too low. Generally changed on the recommendation of software vendors.
Unstable
Obsolete in the Solaris 10 release.
Maximum size of system V shared memory segment that can be created. This parameter is an upper limit that is checked before the application 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.
This parameter specifies only the largest value the operating system can accept for the size of a shared memory segment. Whether the segment can be created depends entirely on the amount of swap space available on the system and, for a 32-bit process, whether there is enough space available in the process's address space for the segment to be attached.
Unsigned long
8,388,608
0 - MAXUINT32 on 32-bit systems, 0 – MAXUINT64 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
Obsolete in the Solaris 9 release. Variable is present in kernel for compatibility reasons but is no longer used.
Obsolete in the Solaris 9 release. Variable is present in kernel for compatibility reasons but is no longer used.