Messages in this thread Patch in this message | | | Subject | Re: [PATCH] rcu/tree: Force quiescent state on callback overload | From | Neeraj Upadhyay <> | Date | Mon, 22 Jun 2020 09:16:24 +0530 |
| |
Hi Paul,
On 6/22/2020 8:43 AM, Paul E. McKenney wrote: > On Mon, Jun 22, 2020 at 01:30:31AM +0530, Neeraj Upadhyay wrote: >> Hi Paul, >> >> On 6/22/2020 1:20 AM, Paul E. McKenney wrote: >>> On Mon, Jun 22, 2020 at 12:07:27AM +0530, Neeraj Upadhyay wrote: >>>> On callback overload, we want to force quiescent state immediately, >>>> for the first and second fqs. Enforce the same, by including >>>> RCU_GP_FLAG_OVLD flag, in fqsstart check. >>>> >>>> Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org> >>> >>> Good catch! >>> >>> But what did you do to verify that this change does the right thing? >>> >>> Thanx, Paul >>> >> >> I haven't done a runtime verification of this code path; I posted this, >> based on review of this code. > > My concern is that under overload, the FQS scans would happen continuously > rather than accelerating only the first such scan in a given grace period. > This would of course result in a CPU-bound grace-period kthread, which > users might not be all that happy with. > > Or am I missing something subtle that prevents this?
Looks like under overload, only the first and second scans are accelerated?
gf = 0; if (first_gp_fqs) { first_gp_fqs = false; gf = rcu_state.cbovld ? RCU_GP_FLAG_OVLD : 0; }
Thanks Neeraj
> > But yes, it does look like the current mainline code fails to do the > first scan immediately, so again, good catch! > > Thanx, Paul >
>> Thanks >> Neeraj >> >>>> --- >>>> kernel/rcu/tree.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c >>>> index d0988a1..6226bfb 100644 >>>> --- a/kernel/rcu/tree.c >>>> +++ b/kernel/rcu/tree.c >>>> @@ -1865,7 +1865,7 @@ static void rcu_gp_fqs_loop(void) >>>> break; >>>> /* If time for quiescent-state forcing, do it. */ >>>> if (!time_after(rcu_state.jiffies_force_qs, jiffies) || >>>> - (gf & RCU_GP_FLAG_FQS)) { >>>> + (gf & (RCU_GP_FLAG_FQS | RCU_GP_FLAG_OVLD))) { >>>> trace_rcu_grace_period(rcu_state.name, rcu_state.gp_seq, >>>> TPS("fqsstart")); >>>> rcu_gp_fqs(first_gp_fqs); >>>> -- >>>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, >>>> a Linux Foundation Collaborative Project >>>> >> >> -- >> QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of >> the Code Aurora Forum, hosted by The Linux Foundation
-- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
| |