Re: [perfbook] Possible improvements of Figures 9.11 -- 9.13

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

 



On Wed, Mar 10, 2021 at 08:36:48AM +0900, Akira Yokosawa wrote:
> On Tue, 9 Mar 2021 15:03:58 -0800, Paul E. McKenney wrote:
> > On Wed, Mar 10, 2021 at 07:43:40AM +0900, Akira Yokosawa wrote:
> >> On Tue, 9 Mar 2021 11:46:38 -0800, Paul E. McKenney wrote:
> >>> On Wed, Mar 10, 2021 at 12:32:30AM +0900, Akira Yokosawa wrote:
> >>>> Hi Paul,
> >>>>
> >>>> I'm reviewing Section 9.5.
> >>>> I find Figures 9.11 -- 9.13 are somewhat hard to grasp.
> >>>>
> >>>> In those figures, P0() is called "RCU Reader" due to the
> >>>> RCU read-side critical section.
> >>>>
> >>>> However, it updates x and y, and you are talking about
> >>>> final values of x and y.
> >>>>
> >>>> At first glance, it looked as though P0() would read from
> >>>> x and y, and get values 1 or 2.
> >>>>
> >>>> Some clarification would help new readers of Edition 2,
> >>>> I suppose.
> >>>
> >>> How about as shown below?  (Not particularly human-readable given that
> >>> I modified the figures as well.)
> >>
> >> So, I was totally confused by those figures!
> >> P0() is literally a reader from the beginning.  Oh well...
> >>
> >> Updated text and figures would not have confused me.
> > 
> > Very good, thank you!
> > 
> > Unfortunately, it is perfectly legal to have writes in RCU read-side
> > critical sections.  I have added a QQ on this, shown below.
> > 
> > This is not just RCU!  Please see section 5.4.6 ("Applying Exact Limit
> > Counters") for an example with writes in reader-writer locking read-side
> > critical sections.  Names can be slippery things.  ;-)
> > 
> > 							Thanx, Paul
> > 
> > ------------------------------------------------------------------------
> > 
> > commit 35fbf113d662365d5f8717e273af55838038f52e
> > Author: Paul E. McKenney <paulmck@xxxxxxxxxx>
> > Date:   Tue Mar 9 13:44:55 2021 -0800
> > 
> >     defer/rcufundamental: Add QQ about writes in RCU readers
> >     
> >     Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
> > 
> > diff --git a/defer/rcufundamental.tex b/defer/rcufundamental.tex
> > index d8ca411..f2e643f 100644
> > --- a/defer/rcufundamental.tex
> > +++ b/defer/rcufundamental.tex
> > @@ -312,6 +312,29 @@ Section~\ref{sec:formal:Axiomatic Approaches and RCU}.
> >  In addition, RCU's ordering properties are examined in much
> >  greater detail in Section~\ref{sec:memorder:RCU}.
> >  
> > +\QuickQuiz{
> > +	What would happen if \co{P0()}'s accesses in
> > +	\crefrange{fig:defer:RCU Reader and Later Grace Period}{fig:defer:RCU Reader Within Grace Period}
> > +	were stores?
> > +}\QuickQuizAnswer{
> > +	The exact same ordering rules would apply, that is,
> > +	(1)~If any part of \co{P0()}'s RCU read-side critical section
> > +	preceded the beginning of \co{P1()}'s grace period, all of
> > +	\co{P0()}'s RCU read-side critical section would precede the
> > +	end of \co{P1()}'s grace period, and
> > +	(2)~If any part of \co{P0()}'s RCU read-side critical section
> > +	followed the end of \co{P1()}'s grace period, all of \co{P0()}'s
> > +	RCU read-side critical section would follow the beginning of
> > +	\co{P1()}'s grace period.
> > +
> > +	It might seem strange to have RCU read-side critical sections
> > +	containing writes, but RCU is just fine with this.  This
> > +	capability is used frequently in the Linux kernel, for example,
> > +	acquiring a lock on or reference to a data structure.  Acquiring
> > +	either a lock or a reference results in a write to memory,
> > +	and it is OK to do these within an RCU read-side critical section.
> > +}\QuickQuizEnd
> > +
> 
> This is a nice addition!

Glad you like it!  I realized that I should put the reader-writer-locking
section there as well, so it is now as shown below.

							Thanx, Paul

------------------------------------------------------------------------

commit 6fb58e05bec5f299c6259a74145b6a9df4b028b9
Author: Paul E. McKenney <paulmck@xxxxxxxxxx>
Date:   Tue Mar 9 13:44:55 2021 -0800

    defer/rcufundamental: Add QQ about writes in RCU readers
    
    Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>

diff --git a/defer/rcufundamental.tex b/defer/rcufundamental.tex
index d8ca411..931e0f6 100644
--- a/defer/rcufundamental.tex
+++ b/defer/rcufundamental.tex
@@ -312,6 +312,36 @@ Section~\ref{sec:formal:Axiomatic Approaches and RCU}.
 In addition, RCU's ordering properties are examined in much
 greater detail in Section~\ref{sec:memorder:RCU}.
 
+\QuickQuiz{
+	What would happen if \co{P0()}'s accesses in
+	\crefrange{fig:defer:RCU Reader and Later Grace Period}{fig:defer:RCU Reader Within Grace Period}
+	were stores?
+}\QuickQuizAnswer{
+	The exact same ordering rules would apply, that is,
+	(1)~If any part of \co{P0()}'s RCU read-side critical section
+	preceded the beginning of \co{P1()}'s grace period, all of
+	\co{P0()}'s RCU read-side critical section would precede the
+	end of \co{P1()}'s grace period, and
+	(2)~If any part of \co{P0()}'s RCU read-side critical section
+	followed the end of \co{P1()}'s grace period, all of \co{P0()}'s
+	RCU read-side critical section would follow the beginning of
+	\co{P1()}'s grace period.
+
+	It might seem strange to have RCU read-side critical sections
+	containing writes, but RCU is just fine with this.
+	This capability is used frequently in the Linux kernel, for
+	example, acquiring a lock on or reference to a data structure.
+	Acquiring either a lock or a reference results in a write
+	to memory, and it is OK to do these within an RCU read-side
+	critical section.
+
+	If having writes in RCU read-side critical sections still seems
+	strange, please review
+	\cref{sec:count:Applying Exact Limit Counters},
+	which presented a use case for writes in reader-writer locking
+	read-side critical sections.
+}\QuickQuizEnd
+
 Although RCU's wait-for-readers capability really is sometimes used to
 order the assignment of values to variables as shown in
 \crefrange{fig:defer:RCU Reader and Later Grace Period}



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux