On 02/25/2010 11:11 AM, Avi Kivity wrote:
On 02/25/2010 05:06 PM, Paul Brook wrote:
Idle bottom halves (i.e. qemu_bh_schedule_idle) are just bugs waiting to
happen, and should never be used for anything.
Idle bottom halves make considerable more sense than the normal bottom
halves.

The fact that rescheduling a bottom half within a bottom half results in
an infinite loop is absurd.  It is equally absurd that bottoms halves
alter the select timeout.  The result of that is that if a bottom half
schedules another bottom half, and that bottom half schedules the
previous, you get a tight infinite loop.  Since bottom halves are used
often times deep within functions, the result is very subtle infinite
loops (that we've absolutely encountered in the past).
I disagree. The "select timeout" is a completely irrelevant implementation detail. Anything that relies on it is just plain wrong. If you require a delay then you should be using a timer. If scheduling a BH directly then you should
expect it to be processed without delay.

I agree. Further, once we fine-grain device threading, the iothread essentially disappears and is replaced by device-specific threads. There's no "idle" anymore.

That's a nice idea, but how is io dispatch handled? Is everything synchronous or do we continue to program asynchronously?

It's very difficult to mix concepts. I personally don't anticipate per-device threading but rather anticipate re-entrant device models. I would expect all I/O to be dispatched within the I/O thread and the VCPU threads to be able to execute device models simultaneously with the I/O thread.

Regards,

Anthony Liguori



Reply via email to