Flusher

The flusher is responsible for scheduling and writing all write-required (dirty) frames back to disk.

All write-required buffers are periodically flushed to disk in the normal sequence of events. The flush Command is provided to ensure data integrity at any given moment.

For UNIX: The flush interval is set with the set-flush Command.

For Windows: Not supported.

Roughly ten percent of the write-required frames are flushed at each activation.

The forced flush guarantees that all updates to the file system are written back to disk within a finite, reasonably predictable time. To achieve this, a forced flush period is defined. This is the period in which the flusher wakes up and starts writing data back to disk. Note that this is not necessarily the time after which all data is written back. Consider the following example: a system has 16 MB of data, on a 2 KB frame system (8,000 frames in memory). If all the memory had been dirtied, an average disk write takes 15 ms, and if the forced flush period is 5 seconds, then the guaranteed time after which all data is written to disk is:

5 seconds + 8,000 * 0.015 = 125 seconds

A more realistic calculation would take into account the number of frames a system can actually modify within 5 seconds. Most likely, to be able to modify a frame, a process must first read it from disk. With an average disk read time of 15 ms, the system is able to read 5 / 0.015 = 333 frames. The above calculation then becomes:

5 seconds + 333 * 0.015 = 10 seconds

The actual time is probably somewhere between these two values, since items can be created without having to be read from disk.

The forced flush mechanism can be either disabled, in which case there is no guarantee data will be written back in a predetermined time (it is written back by the flush command or by a shutdown), or set into an immediate mode, where each process is performing its own writes. The second mode should be used when the need for higher data integrity is required because this mode of operation can cause performance degradation.

The buffers command reports the number of frames waiting to be forced flushed in the Enqueued Writes counter.

See Also

%setflush() Function, buf-map Command, buffers Command, buffers.g Command, flush Command, set-flush Command