From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <53CCCF60.9090208@kernel.dk> Date: Mon, 21 Jul 2014 10:29:20 +0200 From: Jens Axboe MIME-Version: 1.0 Subject: Re: [fio-2.1.9] verify and bssplit do not work together References: <53C8D124.60202@kernel.dk> In-Reply-To: <53C8D124.60202@kernel.dk> Content-Type: multipart/mixed; boundary="------------010602070503000402070502" To: Gwendal Grignou , Puthikorn Voravootivat , fio@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------010602070503000402070502 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2014-07-18 09:47, Jens Axboe wrote: > On 2014-07-17 22:36, Gwendal Grignou wrote: >> Jens, >> >> I notice that when I enable bssplit and verify, verify always fails: >> >> ... >> meta: verify failed at file /tmp/test offset 7143424, length 65536 >> open verify buf file: Read-only file system >> .... >> In my tests, the offsets that fails are always: >> 7143424, 15073280, 2647654, 450397184, 88080384, 88211456 >> >> it does not happen when I set a fixed size with bs, or when I do not >> verify. >> >> Here is the fio control file I use: >> >> [stress] >> filename=/tmp/test >> size=107374182 >> >> readwrite=randrw >> bssplit=64k/50:1M/50 >> ;bs=64k >> >> do_verify=1 >> verify=meta >> verify_interval=64k >> verify_dump=1 >> continue_on_error=verify > > That does sound like a bug. Out of curiosity, does anything change if > you set experimental_verify=1 in the job? > > I'll take a look at this next week, currently away on vacation. > >> Also, if I set a verify_interval larger than the smallest io size in >> bssplt, I get another kind of error. >> Error messages with bssplt=4k/50:1M/50: >> >> verify: bad magic header a678, wanted acca at file /tmp/test offset >> 9097216, length 429524186 >> verify: bad magic header 84b9, wanted acca at file /tmp/test offset >> 25268224, length 21518097 >> verify: bad magic header ba51, wanted acca at file /tmp/test offset >> 26505216, length 536429778 >> verify: bad magic header 1197, wanted acca at file /tmp/test offset >> 42139648, length 373139796 >> verify: bad magic header 22bf, wanted acca at file /tmp/test offset >> 42209280, length 493427719 >> meta: verify failed at file /tmp/test offset 50462720, length 65536 >> open verify buf file: Read-only file system >> open verify buf file: Read-only file system >> verify: bad magic header d1f6, wanted acca at file /tmp/test offset >> 52305920, length 322125536 >> verify: bad magic header 76ee, wanted acca at file /tmp/test offset >> 92106752, length 355054425 >> verify: bad magic header 821, wanted acca at file /tmp/test offset >> 94904320, length 460051914 >> >> I don't get these error when I set bs=4k. >> Are you aware of such a limitation in fio? > > Fio doesn't support verify intervals larger than a single written block, > so that is something the parser or option checker should catch. > Apparently it doesn't. I'll take a look at this too. Looks like it's numberio biting us again... Can you try with this patch? For the mixed case, haven't looked into interval > bs yet. -- Jens Axboe --------------010602070503000402070502 Content-Type: text/x-patch; name="verify-mixed-numberio.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="verify-mixed-numberio.patch" diff --git a/verify.c b/verify.c index e59a4b290510..7c99e15e73be 100644 --- a/verify.c +++ b/verify.c @@ -405,13 +405,13 @@ static int verify_io_u_meta(struct verify_header *hdr, struct vcont *vc) /* * For read-only workloads, the program cannot be certain of the - * last numberio written to a block. Checking of numberio will be done - * only for workloads that write data. - * For verify_only, numberio will be checked in the last iteration when - * the correct state of numberio, that would have been written to each - * block in a previous run of fio, has been reached. + * last numberio written to a block. Checking of numberio will be + * done only for workloads that write data. For verify_only, + * numberio will be checked in the last iteration when the correct + * state of numberio, that would have been written to each block + * in a previous run of fio, has been reached. */ - if (td_write(td) || td_rw(td)) + if ((td_write(td) || td_rw(td)) && (td_min_bs(td) == td_max_bs(td))) if (!td->o.verify_only || td->o.loops == 0) if (vh->numberio != io_u->numberio) ret = EILSEQ; --------------010602070503000402070502--