Re: [PATCH] fix rand_seed mismatches in verify phase

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

 



On Wed, Feb 5, 2014 at 10:27 AM, Jens Axboe <axboe@xxxxxxxxx> wrote:
> On Tue, Feb 04 2014, Puthikorn Voravootivat wrote:
>> I tried to run the same test with fio 2.1.3 and saw the same error.
>> This error always occurs when rw=read or randread and verify_backlog=1
>>
>> Here is an example job file and error message.
>>
>> Job file:
>> [md5-sync-1-0-1-1-1]
>> filename=test213/fio/md5-sync-1-0-1-1-1
>> loops=1
>> direct=0
>> iodepth=1
>> ioengine=sync
>> verify=md5
>> size=1m
>> bs=4k
>> rw=read
>> verifysort=1
>> verify_backlog=1
>>
>> Error message:
>> verify: bad magic header 869, wanted acca at file
>> test213/fio/md5-sync-1-0-1-1-1 offset 585728, length 2290190
>
> This is indeed breakage between 2.1.2 and 2.1.3. I ran a bisect on it,
> it reveals:
>
> 20876c53b5d32f2da9049af5e7fb102133946981 is the first bad commit
> commit 20876c53b5d32f2da9049af5e7fb102133946981
> Author: Juan Casse <jcasse@xxxxxxxxxxxx>
> Date:   Mon Sep 16 09:22:10 2013 -0700
>
>     Add condition to stop issuing io in do_io().

I think Puthik has a fix related to this but I haven't reviewed his
next patch yet.  We've been talking about this behavior though.

I'll take another look at this patch to see what it's changing.

thanks,
grant

>
>     Problem:
>     When specifying iodepth > 1 while doing random async io
>     without a random map (and using the default random generator), the
>     main while loop in do_io() will issue extra io in the amount of io
>     allowed to accumulate in the queue. For example, a job with size=24k
>     and bs=8k will perform 4 io instead of the expected 3.
>
>     Reason:
>     The above behavior occurs because the while loop in do_io()
>     will continue until the amount of "completed io" >= size, but io
>     in the queue are not accounted for because they have not been
>     completed by io_u_queued_complete().
>
>     Exceptions:
>     The above behavior does not manifest itself when:
>         using random_generator=lfsr bacause lfsr knows when to stop
>         generating, and get_io_u() inside the while loop returns NULL,
>         breaking out of the loop.
>         using random map because random map ensures that all blocks
>         are hit, and after they are all hit, no more are generated.
>
>     Proposed Solution:
>     Stop while loop based on bytes issued instead of bytes completed.
>
>     Signed-off-by: Juan Casse <jcasse@xxxxxxxxxxxx>
>     Reviewed-by: Grant Grundler <grundler@xxxxxxxxxxxx>
>     Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
>
>
> --
> Jens Axboe
>
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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