-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
I am looking for a way to efficiently verify written locations after some writes are not verified due to using runtime=. I have been able to minimize the number of unchecked writes by using verify_backlog=xx, but this changes the behavior of a random write or sequential write workload at the device level. Ideally, it would be good for runtime= to stop issuing IO when that time expires, but allow do_verify=1 to completely check written data before ending. Anyway to accomplish that?
The drives are zeroed before starting any IO workloads. When doing writes, I am using verify=md5, verify_interval=4096 or 512 (depending on the device's block size) which puts the fio header in every drive sector. I would like to periodically read scan sections of the drive to verify previously fio written data are in the correct locations and CRCs are correct. However, when a non-written sector is encountered and all zeroes are read, fio stops checking due to a missing acca header. This error happens when using verify_fatal=0 also. I tried using/not using verify_only with the same result. Is there a way to ignore non-fio written locations short of "initializing" the drive with fio writes before starting test?
The error seen is....
job1: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.19
Starting 1 process
verify: bad magic header 0, wanted acca at file /dev/sdaf offset 52428800, length 4096 (requested block: offset=52428800, length=4096)
hdr_fail data dumped as sdaf.52428800.hdr_fail
fio: pid=58492, err=84/file:io_u.c:2086, func=io_u_queued_complete, error=Invalid or incomplete multibyte or wide character
job1: (groupid=0, jobs=1): err=84 (file:io_u.c:2086, func=io_u_queued_complete, error=Invalid or incomplete multibyte or wide character): pid=58492: Thu Aug 14 12:09:15 2025
read: IOPS=12.2k, BW=47.9MiB/s (50.2MB/s)(50.0MiB/1045msec)
slat (nsec): min=10494, max=69738, avg=11066.25, stdev=911.68
clat (usec): min=42, max=409, avg=47.18, stdev= 3.39
lat (usec): min=54, max=421, avg=59.27, stdev= 3.57
clat percentiles (usec):
| 1.00th=[ 46], 5.00th=[ 47], 10.00th=[ 47], 20.00th=[ 47],
| 30.00th=[ 47], 40.00th=[ 47], 50.00th=[ 48], 60.00th=[ 48],
| 70.00th=[ 48], 80.00th=[ 48], 90.00th=[ 48], 95.00th=[ 48],
| 99.00th=[ 49], 99.50th=[ 49], 99.90th=[ 65], 99.95th=[ 68],
| 99.99th=[ 135]
bw ( KiB/s): min=49070, max=49070, per=100.00%, avg=49070.00, stdev= 0.00, samples=1
iops : min=12267, max=12267, avg=12267.00, stdev= 0.00, samples=1
lat (usec) : 50=99.77%, 100=0.21%, 250=0.01%, 500=0.01%
cpu : usr=22.80%, sys=28.35%, ctx=12804, majf=0, minf=13
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=12801,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=47.9MiB/s (50.2MB/s), 47.9MiB/s-47.9MiB/s (50.2MB/s-50.2MB/s), io=50.0MiB (52.4MB), run=1045-1045msec
Disk stats (read/write):
sdaf: ios=11465/0, merge=0/0, ticks=563/0, in_queue=564, util=61.84%
The last "readscan" invocation of the jobfile was….
[global]
name=timed_write_verify_log
#filename=testfile
#offset=1G
size=60M
iodepth=1
verify_fatal=0
write_iolog=io_sequence3.log
log_avg_msec=1
#status-interval=1
bs=4K
direct=1
rw=read
ioengine=libaio
#runtime=3
#time_based=1
verify=md5
do_verify=1
verify_interval=4096
verify_dump=1
#verify_only
#verify_backlog=50
#norandommap
#random_generator=tausworthe64
nice=19
prio=0
prioclass=1
#size=100%
[job1]
filename=/dev/sdaf
new_group
#[job2]
#filename=/dev/sdk
#new_group