JFS Tuning and Performance

10
Figure 5. I/O throttling
Flush throttling (max_diskq)
The amount of dirty data being flushed per file cannot exceed the max_diskq tunable. The process
performing a write() system call will skip the “flush behind” if the amount of outstanding I/O exceeds
the max_diskq. However, when many buffers/pages of a file need to be flushed to disk, if the amount
of outstanding I/O exceeds the max_diskq value, the process flushing the data will wait 20
milliseconds before checking to see if the amount of outstanding I/O drops below the max_diskq
value. Flush throttling can severely degrade asynchronous write performance. For example, when
using the default max_diskq value of 1 MB, the 1 MB of I/O may complete in 5 milliseconds, leaving
the device idle for 15 milliseconds before checking to see if the outstanding I/O drops below
max_diskq. For most file systems, max_diskq should be increased to a large value (such as 1 GB)
especially for file systems mounted on cached disk arrays.
While the default max_diskq value is 1 MB, it cannot be set lower than write_pref_io * 4.
Note
For best asynchronous write performance, tune max_diskq to a large value
such as 1 GB.
Write throttling (write_throttle)
The amount of dirty data (unflushed) per file cannot exceed write_throttle. If a process tries to perform
a write() operation and the amount of dirty data exceeds the write throttle amount, then the process
will wait until some of the dirty data has been flushed. The default value for write_throttle is 0 (no
throttling).
Read flush behind
VxFS introduced a new feature on 11i v3 called read flush behind. When the number of free pages
in the file cache is low (which is a common occurrence) and a process is reading a file sequentially,
pages which have been previously read are freed from the file cache and reused.
Figure 6. Read flush behind
64K
64K
Sequential read
Read flush behind
64K
read ahead
64K
64K
64K
64K
64K
64K
64K
64K
Sequential write
flush behind
64K