К моему удивлению, несмотря на то, что большинство выравнивает этот параметр, нигде нет его описания, как и описания того, что его уже давно перевели в устаревшие
| *** NOTE ***: zfs_vdev_future_pending is only available from Solaris 10 Update 11(Kernel patch SPARC:147147-26/x64:147148-26) or above, and below Solaris 11.3. |
zfs_vdev_future_pending is the maximum number of I/O's with a deadline in the future concurrently pending to each device.
An I/O with a future pending deadline is a low priority I/O such as background transaction group write or a scrub or resilver I/O etc. This is in contrast to application reads and synchronous writes (under logbias=latency) which have an immediate deadline. For example, if the priority is ZIO_PRIORITY_SCRUB the zio should be issued to the device no later than 20ms after the current time. While for ZIO_PRIORITY_RESILVER the maximum delay should be 6ms.
Future I/Os are queued before their deadline AND if there are no higher priority I/Os to process then the future I/O's will be dispatched. Of course if a future I/O gets sufficiently delayed by higher priority I/Os, its deadline will eventually catch up with the present and thus lose it's future I/O status. Before zfs_future_pending was introduced, any I/Os were queued regardless of the priority. Now, we limit the number of lower priority I/O's that are allowed to be queued, to avoid delays of higher priority IOs. Recommendation is to set zfs_vdev_future_pending = zfs_vdev_max_pending. This provides a sensible balance between low priority and high priority I/O's.
*** NOTE ***: With Solaris 11.3 zfs_vdev_future_pending has been splitted into 2 other parameters, which by default, future pending is turned on. One need not tune future pending on Solaris 11.3 or above.