Re: A question about QuickQuiz 5.46

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

 



On Sat, Dec 23, 2023 at 06:12:31PM +0900, Akira Yokosawa wrote:
> Hi all,
> 
> I have a comment on this old thread.
> 
> On 2023/05/21 19:42, Akira Yokosawa wrote:
> > On Sun, 21 May 2023 07:54:25 +0000, Hao Lee wrote:
> >> On Fri, May 19, 2023 at 10:27:48PM +0900, Akira Yokosawa wrote:
> >>> On Fri, 19 May 2023 06:28:47 +0000, Hao Lee wrote:
> >>>> On Thu, May 18, 2023 at 10:50:51AM +0900, Akira Yokosawa wrote:
> >>>>> Hi,
> >>>>>
> >>>>> On Wed, 17 May 2023 12:01:10 +0000, Hao Lee wrote:
> >>>>>> Hi, Paul
> >>>>>>
> >>>>>> I noticed that QuickQuiz 5.46 is causing confusion due to the fact that
> >>>>>> balance_count() and flush_local_count() are both located within the
> >>>>>> slowpath and are called sequentially. As a result, it is impossible for
> >>>>>> them to compete for the counterandmax thread-local variable.
> >>>>>
> >>>>> Right.
> >>>>> And that's exactly what is mentioned in the answer to the quiz.
> >>>>>
> >>>>> I guess it confused you because you didn't expect such an easy one,
> >>>>> no ? :-)
> >>>>
> >>>> In fact I'm confused about the question description.
> >>>> I believe that this quiz should focus on the concurrency of global
> >>>> variables, rather than on the concurrency of the atomic variable
> >>>> `counterandmax`, which is currently the main focus of the description.
> >>>
> >>> Hmm, sorry but I'm afraid I don't get your point ...
> >>>
> >>> Could you share the question you'd expect to see in place of
> >>> Quick Quiz 5.46?
> >>
> >> Hi, I don't think this question should exist according to my
> >> understanding...
> >>
> >> Let's approach this question from a different perspective. The answer
> >> emphasizes that the gblcnt_mutex prevents concurrency problems. Let's
> >> assume that neither balance_count() nor flush_local_count() is holding
> >> the gblcnt_mutex. Would the counterandmax variable encounter concurrency
> >> problems? I don't think so because counterandmax is an atomic variable
> >> and is always safe, even without using any locks.
> > 
> > I'm not sure, but you might be missing subtle wording in the quiz part
> > of Quick Quiz 5.46 (quoted below):
> > 
> >     Given that the atomic_set() primitive does a simple store
> >     to the specified atomic_t, ...
> > 
> > Here, "simple store" means a normal store which doesn't involve
> > any atomic operations (at instruction level).
> > 
> > atomic_read() and atomic_set() are for accessing atomic_t variables
> > without any costly atomic operations.
> 
> This was obvious up until commit cee469f9a7aa ("api: Switch x86 atomics
> to gcc C11-like atomics").
> 
> Before the change, atomic_read() and atomic_set() were defined in
> CodeSamples/api.h as:
> 
>     typedef struct { volatile int counter; } atomic_t;
> 
>     #define atomic_read(v)         ((v)->counter)
>     #define atomic_set(v, i)       (((v)->counter) = (i))
> 
> Now, they are defined in CodeSamples/api-pthreads/api-gcc.h as:
> 
>     typedef struct { volatile int counter; } atomic_t;
> 
>     #define atomic_read(v) \
>            __atomic_load_n(&(v)->counter, __ATOMIC_RELAXED)
>     #define atomic_set(v, i) \
>            __atomic_store_n(&(v)->counter, (i), __ATOMIC_RELAXED)
> 
> It is the C compiler's call what instructions to use for accessing
> atomic variables.  Therefore, what Hao said above (quoted again for
> your convenience):
> 
> >>                                                                 Let's
> >> assume that neither balance_count() nor flush_local_count() is holding
> >> the gblcnt_mutex. Would the counterandmax variable encounter concurrency
> >> problems? I don't think so because counterandmax is an atomic variable
> >> and is always safe, even without using any locks.
> 
> is actually quite true.
> 
> Now I think QQz 5.46 needs at least some rewording.
> 
> Hao, apologies for my missing the change under CodeSamples/ at the time.
> 
> Paul, what do you think?

Let's see...

Hao Lee initially suggested that the focus be on the global nonatomics,
which could work.  A related question might be "Why does counterandmax
need to be atomic?"  Another approach would be to focus on wrong settings
for counterandmax based on concurrent invocation.  And there are a number
of other possible confusions that might be caused by this code.

So would either of you like to propose a specific change?

							Thanx, Paul

>         Thanks, Akira
> 
> > 
> > Which is why Quick Quiz 5.46 has been there for more than a decade.
> > 
> > Perhaps, you might be interested in Quick Quiz B.12 as well.
> >  
> > HTH,
> >         Akira
> > 
> >>
> >>>
> >>>         Thanks, Akira
> >>>
> >>>>
> >>>>>
> >>>>>         Thanks, Akira
> >>>>>
> >>>>>>                                                               Therefore,
> >>>>>> I believe that this quiz may be referring to the global variables
> >>>>>> globalcount and globalreserve.
> >>>>>>
> >>>>>> Thanks,
> >>>>>> Hao Lee
> 




[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