fsflush and Related Parameters
This section describes fsflush and related tunables.
fsflush
The system daemon, fsflush, runs periodically to do three main tasks:
On every invocation, fsflush flushes dirty file system pages over a certain age to disk.
On every invocation, fsflush examines a portion of memory and causes modified pages to be written to their backing store. Pages are written if they are modified and if they do not meet one of the following conditions:
The net effect is to flush pages from files that are mapped with mmap with write permission and that have actually been changed.
Pages are flushed to backing store but left attached to the process using them. This will simplify page reclamation when the system runs low on memory by avoiding delay for writing the page to backing store before claiming it, if the page has not been modified since the flush.
fsflush writes file system metadata to disk. This write is done every nth invocation, where n is computed from various configuration variables. See tune_t_fsflushr and autoup for details.
The following features are configurable:
Frequency of invocation (tune_t_fsflushr)
Whether memory scanning is executed (dopageflush)
Whether file system data flushing occurs (doiflush)
The frequency with which file system data flushing occurs (autoup)
For most systems, memory scanning and file system metadata synchronizing are the dominant
activities for fsflush. Depending on system usage, memory scanning can be of little
use or consume too much CPU time.
tune_t_fsflushr
- Description
Specifies the number of seconds between fsflush invocations
- Data Type
Signed integer
- Default
1
- Range
1 to MAXINT
- Units
Seconds
- Dynamic?
No
- Validation
If the value is less than or equal to zero, the value is reset to 1 and a warning message is displayed. This check is done only at boot time.
- When to Change
See the autoup parameter.
- Commitment Level
Unstable
autoup
- Description
Along with tune_t_flushr, autoup controls the amount of memory examined for dirty pages in each invocation and frequency of file system synchronizing operations.
The value of autoup is also used to control whether a buffer is written out from the free list. Buffers marked with the B_DELWRI flag (which identifies file content pages that have changed) are written out whenever the buffer has been on the list for longer than autoup seconds. Increasing the value of autoup keeps the buffers in memory for a longer time.
- Data Type
Signed integer
- Default
30
- Range
1 to MAXINT
- Units
Seconds
- Dynamic?
No
- Validation
If autoup is less than or equal to zero, it is reset to 30 and a warning message is displayed. This check is done only at boot time.
- Implicit
autoup should be an integer multiple of tune_t_fsflushr. At a minimum, autoup should be at least 6 times the value of tune_t_fsflushr. If not, excessive amounts of memory are scanned each time fsflush is invoked.
The total system pages multiplied by tune_t_fsflushr should be greater than or equal to autoup to cause memory to be checked if dopageflush is non-zero.
- When to Change
Here are several potential situations for changing autoup, tune_t_fsflushr, or both:
Systems with large amounts of memory – In this case, increasing autoup reduces the amount of memory scanned in each invocation of fsflush.
Systems with minimal memory demand – Increasing both autoup and tune_t_fsflushr reduces the number of scans made. autoup should be increased also to maintain the current ratio of autoup / tune_t_fsflushr.
Systems with large numbers of transient files (for example, mail servers or software build machines) – If large numbers of files are created and then deleted, fsflush might unnecessarily write data pages for those files to disk.
- Commitment Level
Unstable
dopageflush
- Description
Controls whether memory is examined for modified pages during fsflush invocations. In each invocation of fsflush, the number of memory pages in the system is determined. This number might have changed because of a dynamic reconfiguration operation. Each invocation scans by using this algorithm: total number of pages x tune_t_fsflushr / autoup pages
- Data Type
Signed integer
- Default
1 (enabled)
- Range
0 (disabled) or 1 (enabled)
- Units
Toggle (on/off)
- Dynamic?
Yes
- Validation
None
- When to Change
If the system page scanner rarely runs, which is indicated by a value of 0 in the sr column of vmstat output.
- Commitment Level
Unstable
doiflush
- Description
Controls whether file system metadata syncs will be executed during fsflush invocations. This synchronization is done every Nth invocation of fsflush where N= (autoup / tune_t_fsflushr). Because this algorithm is integer division, if tune_t_fsflushr is greater than autoup, a synchronization is done on every invocation of fsflush because the code checks to see if its iteration counter is greater than or equal to N. Note that N is computed once on invocation of fsflush. Later changes to tune_t_fsflushr or autoup have no effect on the frequency of synchronization operations.
- Data Type
Signed integer
- Default
1 (enabled)
- Range
0 (disabled) or 1 (enabled)
- Units
Toggle (on/off)
- Dynamic?
Yes
- Validation
None
- When to Change
When files are frequently modified over a period of time and the load caused by the flushing perturbs system behavior.
Files whose existence, and therefore consistency of state, does not matter if the system reboots are better kept in a TMPFS file system (for example, /tmp). Inode traffic can be reduced on systems, starting in the Solaris 7 release, by using the mount -noatime option. This option eliminates inode updates when the file is accessed.
For a system engaged in realtime processing, you might want to disable this option and use explicit application file synchronizing to achieve consistency.
- Commitment Level
Unstable