# Data verification with atomic writes
#
# Some background on atomic writes:
#
# The main selling point of atomic writes is that it is guaranteed writes
# to storage will not be torn for a power failure or kernel crash.

# Another aspect of atomic writes is that they handle racing writes and
# reads, such that a read racing with a write will see all the data from
# the write or none. Well, SCSI and NVMe guarantee this if using
# RWF_ATOMIC, but it is not formally stated as a feature of RWF_ATOMIC.
#
# Fio verify mode can be used to prove that atomic writes can make "safe"
# racing reads and writes. This done by having many jobs in a xsum verify
# mode. In this way, xsums should be correct, although a job may be
# reading a data block written by another job; however
# verify_write_sequence must be disabled, as it cannot be helped that data
# blocks will be out of sequence between with many jobs.
#
# Atomic write limits:
# For a block device, the max block size for atomic=1 is in
# /sys/block/sdXXX/queue/atomic_write_unit_max_bytes
# or this value can also be read with a statx syscall on the bdev file.

[write-and-verify]
rw=randwrite
bs=4k
direct=1
ioengine=libaio
iodepth=16
verify=crc64
atomic=1
verify_write_sequence=0
numjobs=10
# Use /dev/XXX or filename
filename=/dev/XXX
