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

Re: [Xen-devel] Fwd: [v3 14/15] Update Posted-Interrupts Descriptor during vCPU scheduling

On 07/09/2015 12:38 PM, Wu, Feng wrote:
>> -----Original Message-----
>> From: dunlapg@xxxxxxxxx [mailto:dunlapg@xxxxxxxxx] On Behalf Of George
>> Dunlap
>> Sent: Thursday, July 09, 2015 7:20 PM
>> To: Wu, Feng
>> Cc: Dario Faggioli; Tian, Kevin; keir@xxxxxxx; andrew.cooper3@xxxxxxxxxx;
>> xen-devel; jbeulich@xxxxxxxx; Zhang, Yang Z
>> Subject: Re: [Xen-devel] Fwd: [v3 14/15] Update Posted-Interrupts Descriptor
>> during vCPU scheduling
>> On Thu, Jul 9, 2015 at 4:09 AM, Wu, Feng <feng.wu@xxxxxxxxx> wrote:
>>>> That does not necessarily means "we need to do something" in
>>>> vcpu_runstate_change(). Actually, that's exactly what I'm asking: can
>>>> you check whether this thing that you need doing can be done somewhere
>>>> else than in vcpu_runstaete_change() ?
>>> Why do you think vcpu_runstaete_change() is not the right place to do this?
>> Because what the vcpu_runstate_change() function does at the moment is
>> *update the vcpu runstate variable*.  It doesn't actually change the
>> runstate -- the runstate is changed in the various bits of code that
>> call it; and it's not designed to be a generic place to put hooks on
>> the runstate changing.
>> I haven't done a thorough review of this yet, but at least looking
>> through this patch, and skimming the titles, I don't see anywhere you
>> handle migration -- what happens if a vcpu that's blocked / offline /
>> runnable migrates from one cpu to another?  Is the information
>> updated?
> Thanks for your review!

And I'd like to say -- sorry that I didn't notice this issue sooner; I
know you've had your series posted for quite a while, but I didn't
realize until last week that it actually involved the scheduler.  It's
really my fault for not paying closer attention -- you did CC me in v2
back in June.

> The migration is handled in arch_pi_desc_update() which is called
> by vcpu_runstate_change().

Well as far as I can tell from looking at the code,
vcpu_runstate_change() will not be called when migrating a vcpu which is
already blocked.

Consider the following scenario:
- v1 blocks on pcpu 0.
 - vcpu_runstate_change() will do everything necessary for v1 on p0.
- The scheduler does load balancing and moves v1 to p1, calling
vcpu_migrate().  Because the vcpu is still blocked,
vcpu_runstate_change() is not called.
- A device interrupt is generated.

What happens to the interrupt?  Does everything still work properly, or
will the device wake-up interrupt go to the wrong pcpu (p0 rather than p1)?

>  or to add a set of architectural hooks (similar to
>> the SCHED_OP() hooks) in the various places you need them.
> I don't have a picture of this method, but from your comments, seems
> we need to put the logic to many different places, and must be very
> careful so as to not miss some places. I think the above method
> is more clear and straightforward, since we have a central place to
> handle all the cases. Anyway, if you prefer to this one, it would be
> highly appreciated if you can give a more detailed solution! Thank you!

Well you can check to make sure you've caught at least all the places
you had before by searching for vcpu_runstate_change(). :-)

Using the callback method also can help prompt you to think about other
times you may need to do something.  For instance, you might still
consider searching for SCHED_OP() everywhere in schedule.c and seeing if
that's a place you need to do something (similar to the migration thing

Anyway, the most detailed thing I can say at this time is to look at
SCHED_OP() and see if doing  something like that, but for architectural
callbacks, makes sense.

I'll come back and take a closer look a bit later.


Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.