From f23208c8860de515f025af6ac34d6a227f277e67 Mon Sep 17 00:00:00 2001 From: John Garry Date: Mon, 16 Sep 2024 16:53:47 +0000 Subject: [PATCH] examples: Add example for atomic write verify 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 Link: https://lore.kernel.org/r/20240916165347.2226763-10-john.g.garry@oracle.com Signed-off-by: Jens Axboe --- examples/atomic-verify.fio | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 examples/atomic-verify.fio diff --git a/examples/atomic-verify.fio b/examples/atomic-verify.fio new file mode 100644 index 000000000..17bcd89f8 --- /dev/null +++ b/examples/atomic-verify.fio @@ -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