RE: FIO ZNS Write Behavior not Matching Read Behavior

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for the feedback Alexey.  I'll look into the options you suggested and discuss with our test team.  

-----Original Message-----
From: Alexey Dobriyan <adobriyan@xxxxxxxxx> 
Sent: Sunday, May 2, 2021 8:44 AM
To: Jeffrey Lien <Jeff.Lien@xxxxxxx>
Cc: fio@xxxxxxxxxxxxxxx; Brandon Paupore <Brandon.Paupore@xxxxxxx>; Andy Hibbard <Andy.Hibbard@xxxxxxx>
Subject: Re: FIO ZNS Write Behavior not Matching Read Behavior

CAUTION: This email originated from outside of Western Digital. Do not click on links or open attachments unless you recognize the sender and know that the content is safe.


> I have a question on why the ZNS write behavior does not match the 
> read behavior.  In write workloads with an offset that results in a 
> starting lba that is not on a zone boundary, the offset is rounded up 
> to the next zone starting lba.  This is not done for read workloads 
> though.  I'd like to know if there is a particular reason why or could 
> I change this behavior to be the same for both reads and writes.

The root cause, so to speak, is that fio tries to be nice and accomodating program and doesn't reject offsets unaligned to zone boundaries.
Unlike floating point where there is natural "round to nearest" rounding mode zoned I/O does not have that property.

There are three ways
a) reject unaligned offset=
b) accept unaligned offset= but reject first I/O if write pointer is
   different

   this allows the following workload to work, at least conceptually

        zonemode=zbd

        [a]
        rw=write
        io_size=4096

        [b]
        rw=write
        offset=4096
        io_size=4096

c) round down(!)
   this is natural given that zoned writes are "rounded down" to the WP

fio does none of the above.

> This causes a problem for one of our particular testcases that writes 
> a particular pattern at an offset that ends up being rounded up to the 
> next zone starting lba.  In the 2nd step of this testcase, a read with 
> verify workload is done to verify the write workload.  This fails with 
> a miscompare because the read workload is not starting at the same 
> offset as the write workload.  Both fio workloads have "offset = 1%".

I think the best you could do it to fill the zone up the LBA and then creates separate job which writes pattern and immediately verifies it.

        [a]
        rw=write
        io_size=4096
        offset=2z
        size=1z

        [b]
        stonewall
        rw=write
        io_size=4096
        offset=2z
        size=1z
        verify=xxhash
        do_verify=1

Note! Mainline fio supports 'z' suffix, which is much better than percentages!




[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux