[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 15/17] vmx: VT-d posted-interrupt core logic handling
On 09/22/2015 06:10 AM, Wu, Feng wrote: > > >> -----Original Message----- >> From: Dario Faggioli [mailto:dario.faggioli@xxxxxxxxxx] >> Sent: Monday, September 21, 2015 10:12 PM >> To: Wu, Feng; George Dunlap >> Cc: xen-devel@xxxxxxxxxxxxx; Tian, Kevin; Keir Fraser; George Dunlap; Andrew >> Cooper; Jan Beulich >> Subject: Re: [Xen-devel] [PATCH v7 15/17] vmx: VT-d posted-interrupt core >> logic >> handling >> >> On Mon, 2015-09-21 at 13:50 +0000, Wu, Feng wrote: >>> >>>> -----Original Message----- >>>> From: Dario Faggioli [mailto:dario.faggioli@xxxxxxxxxx] >> >>>> Note that, in case of preemptions, we are switching from a non-idle >>>> vcpu to another, non-idle, vcpu, so lazy context switching to the >>>> idle >>>> vcpu should not have much to do with this case... >>> >>> So do you mean in preemptions, we cannot switch from non-idle to idle >>> or >>> Idle to non-idle, i.e, we can only switch from non-idle to non-idle? >>> >> That's what I meant. It's the definition of 'preemption' and of 'idle >> task/vcpu', AFICT. I mean, the idle vcpu has the lowest possible >> priority ever, so it can't really preempt anyone. >> >> OTOH, if the idle vcpu is running, that means there weren't any active >> vcpus because, e.g., all were blocked; therefore, any active vcpu >> wanting to run would have to wake up (and hence go throught the proper >> wake up logic) before trying to preempt idle. >> >> There is one possible caveat: tasklets. In fact (as you can check >> yourself by looking, in the code, for tasklet_work_scheduled), it is >> possible that we force the idle vcpu to execute, even when we have >> active and runnable vcpus, to let it process tasklets. I'm not really >> sure whether this could be a problem for you or not, can you have a >> look (and/or, a try) and report back? > > Thanks for your information about the tasklets part, it is very important, > consider the following scenario: > > non-idle vCPUA --> idle (tasklet) --> non-idle vCPUA > > The above context switch will use the lazy context switch and cannot be > covered in __context_switch(), we need to change SN's state during the > "non-idle to idle" and "idle to non-idle" transition, so that means we need > add the PI related logic in context_switch() instead of only in > __context_switch(). > > Besides that, it is more robust to do the PI switch in context_switch() which > can cover lazy context switch. Maybe in future, there are some other > feature needing execute task _inside_ an idle context, and it may introduce > some issues due to no PI state transition, and it is a little hard to debug. So a transition like the above could happen in the case of a cpu that's gone offline (e.g., to allow the devicemodel to handle an IO); or, as you say, if we're doing urgent work in a tasklet such that it preempts a running task. One option would be to just ignore this -- in which case we would get spurious PI interrupts, but no other major issues, right? But if we want to avoid spurious PI interrupts when running idle, then yes, we need *some* kind of a hook on the lazy context switch path. /me does some more thinking... -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |