Skip to content

Commit

Permalink
examples: Add example for atomic write verify
Browse files Browse the repository at this point in the history
Add an example for verifying atomic writes.

Until now, atomic writes are only supported on Linux for block devices, so
only give instructions on for that.

Currently support is being worked on for XFS and EXT4, and instructions can
be updated in due course.

Signed-off-by: John Garry <john.g.garry@oracle.com>
Link: https://lore.kernel.org/r/20240916165347.2226763-10-john.g.garry@oracle.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
johnpgarry authored and axboe committed Sep 16, 2024
1 parent 2dd80ee commit f23208c
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions examples/atomic-verify.fio
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 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

0 comments on commit f23208c

Please sign in to comment.