|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/5] xen: RCU/x86/ARM: discount CPUs that were idle when grace period started.
Hi,
At 10:01 +0200 on 27 Jul (1501149684), Dario Faggioli wrote:
> In Xen, that is impossible, and that's particularly problematic
> when system is idle (or lightly loaded) systems, as CPUs that
> are idle may never have the chance to tell RCU about their
> quiescence, and grace periods could extend indefinitely!
[...]
> The first step for fixing this situation is for RCU to record,
> at the beginning of a grace period, which CPUs are already idle.
> In fact, being idle, they can't be in the middle of any read-side
> critical section, and we don't have to wait for them to declare
> a grace period finished.
AIUI this patch fixes a bug where:
- a CPU is idle/asleep;
- it is added to the cpumask of a new RCU grace period; and
- because the CPU is asleep, the grace period never ends.
Have I understood?
I think we might be left with a race condition:
- CPU A is about to idle. It runs the RCU softirq and
clears itself from the current grace period.
- CPU B ends the grace period and starts a new one.
- CPU A calls rcu_idle_enter() and sleeps.
- The new grace period never ends.
Is that fixed by your later rcu_idle_timer patch? AIUI that's only
invoked when the calling CPU has pending RCU callbacks.
Or can it be fixed here by something like this in rcu_idle_enter?
- lock rcp->lock
- add ourselves to the idle mask
- if we are in rcp->cpumask:
- cpu_quiet()
- unlock rcp->lock
There's also the code at the top of rcu_check_quiescent_state() that
requres _two_ idle states per batch. I don't know what race that's
protecting against so I don't know whether we need to worry about it
here as well. :)
Cheers,
Tim.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |