The ZIL (ZFS Intent Log), logs all file system related calls as
transactions to host memory. If synchronous semantics apply
(e.g. O_SYNC) the transaction must also be placed on stable
non-volatile storage, such as the pool itself or a log device (if
available). In either case, the logs for all synchronous calls
must be written to stable storage so, in the event of a host
failure, the log entries may be replayed on the next host reboot.
Asynchronous file system calls are not replayed after a failure
and thus not written to a log device and only to host memory.
A ZIL exists for each and every pool dataset (e.g. file system,
volume). A log device is assigned to a single pool and shared
by every ZIL of that pool. So even though writes to each ZIL
are contiguous, when multiple ZILs are present the coalesced
write workload trends to a random access pattern as seen by
the log device (a.k.a. ZIL Accelerator).
Random write IOPS are the determining metric of both the log
device and overall pool performance when synchronous writes
dominate a ZFS workload. Examples of such workloads are
NFS, VMware vSphere (especially VDI), iSCSI, and databases.