Re: Rip out verify_backlog support?

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

 



On Wed, Feb 5, 2014 at 1:28 PM, Jens Axboe <axboe@xxxxxxxxx> wrote:
> On Wed, Feb 05 2014, Grant Grundler wrote:
>> On Wed, Feb 5, 2014 at 11:53 AM, Jens Axboe <axboe@xxxxxxxxx> wrote:
>> ...
>> >> Couldn't one shorten the defined workload and use bigger loop= instead?
>> >
>> > That's not really the same, typically you'd end up re-running the same
>> > thing over and over then.
>>
>> Yes...unless we use a different seed on each loop. Or don't even
>> attempt to loop in FIO - but rather outside of FIO by the test
>> framework - e.g. autotest or other scripting language.
>
> Lots of stuff happens at setup/teardown. It's a lot more efficient to
> handle it internally.
>
> So, to summarize, I'd much rather get rid of do_verify() and handle
> everything in do_io(), which is what the verify_backlog does. The fact
> that fio has two nearly identical loops for IO is weird and fragile.

Totally agree on the "two nearly identical loops" - I've complained
about that before.

> A "normal" verify_backlog=0 is just a variant of verify_backlog=x with
> unlimited backlog, it should fall out nicely. Lets move in that
> direction, not kill verify_backlog.

Yup - excellent. I've got two other fires right now...but I'll get
back to this later.

>
>> >> But in order to have strong verification without tracking IOs we need
>> >> to log the order that the IOs are issued, not the order they complete.
>> >
>> > My point is that you don't need to log it at all. Lets say you have a
>> > backlog of 500. After you have issued 500 writes, you simply reset your
>> > LFSR (or random generators) and re-run the same sequence as reads.
>>
>> This is effectively "logging in the order issued" - just don't need to
>> record the LBA. We still need to track when the IO was issued and
>> completed. Once those stats are recorded elsewhere, we don't need to
>> remember the "order" since it can be reproduced.
>>
>> >> Verify_backlog today requires logging IO in the order they are
>> >> completed. The problem is synchronizing the thread(s) that perform IO
>> >> vs the thread(s) that perform verification so verification isn't
>> >> attempted on IO that isn't complete (but is "issued" and thus logged
>> >> "in order issued"). The complication is IOs generally don't complete
>> >> in the order issued.
>> >
>> > For verify_backlog, obviously we cannot rollback the generators without
>> > having other synchronization between the writers and readers. So logging
>> > still makes more sense for that, I think. We'll just have them log in
>> > issue order, that doesn't seem like a big deal.
>>
>> Agreed - but that synchronization doesn't exist today AFAICT.
>
> It does - that's the log_io_piece() mechanism. The writer will generate
> on, and verify will read those and verify. We just have to ensure that
> it is correct in the way that it is logged. The alternative would be to
> rely purely on the generator rollback, and for that you would then need
> some specific notification on how far the reader could proceed, if async
> verify_backlog is used.

Yes - I was referring to the "rely purely on generator rollback".

Once log_io_piece() is called, the verify code assumes the IO is
complete...which isn't true if log_io_piece() is used to record "order
issued".

thanks,
grant

>
> --
> 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