Re: [PATCH] Adding userspace_libaio_reap option

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

 



On Tue, Aug 30, 2011 at 2:14 PM, Jeff Moyer <jmoyer@xxxxxxxxxx> wrote:
> Daniel Ehrenberg <dehrenberg@xxxxxxxxxx> writes:
>
>> On Tuesday, August 30, 2011, Jeff Moyer <jmoyer@xxxxxxxxxx> wrote:
>>> Dan Ehrenberg <dehrenberg@xxxxxxxxxx> writes:
>>>
>>>> When a single thread is reading from a libaio io_context_t object
>>>> in a non-blocking polling manner (that is, with the minimum number
>>>> of events to return being 0), then it is possible to safely read
>>>> events directly from user-space, taking advantage of the fact that
>>>> the io_context_t object is a pointer to memory with a certain layout.
>>>> This patch adds an option, userspace_libaio_reap, which allows
>>>> reading events in this manner when the libaio engine is used.
>>>
>>> I haven't yet tried to poke holes in your code, but I'm pretty sure I
>>> can find some.  I have patches for the kernel and libaio which allow
>>> user-space reaping of events.  Why don't I dust those off and post them,
>>> and then fio won't have to change at all?  That seems like to proper
>>> approach to solving the problem.
>>>
>>> Cheers,
>>> Jeff
>>>
>>
>> Ken Chen posted some patches which accomplish this in 2007. However, I was a
>> little concerned about his lock-free queue structure--it seems like an
>> integer overflow might cause events to be lost; on the other hand this is
>> very unlikely. Are you talking about Ken's patchset or another one?
>
> I'm talking about another one, since I completely forgot about Ken's
> patches.  Thanks for reminding me!
>
> I'm not sure your approach will work on all architectures without kernel
> modification.  I think at least a flush_dcache_page may be required.
> More importantly, though, I'd like to discourage peeking into the
> internals outside of the libaio library.  Doing this makes it really
> hard to change things moving forward.

Are you saying flush_dcache_page from the kernel or from user-space?
What kind of architecture will have problems? What kind of failures
could result?

About ABI dependence: I agree, it would be better to have things in
libaio rather than here. But to do reaping like this, with certain
restrictions about what context it's used in, I think we'd have to
make another function rather than just changing io_getevents. At
first, I was looking into changing io_getevents, but then I realized
that the application I'm working on optimizing, like FIO, is only
calling io_getevents in a certain pattern, making all of the
synchronization unnecessary. I don't think these two things are the
only users of io_getevents in this pattern. But maybe proper
synchronization can be made cheap enough that there's not a big
penalty for doing it properly all the time.
>
> Cheers,
> Jeff
>
--
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