Thread: RE: Assuming that TAS() will succeed the first time is verboten

RE: Assuming that TAS() will succeed the first time is verboten

From
"Mikheev, Vadim"
Date:
> > The code is based on some odd assumptions.  A select() with 0 delay 
> > returns immediately unless there is an interrupt during its 
> > (very short!) time in kernel space.
> 
> Yeah, I've wondered whether the 0 entries in s_spincycle[] 
> shouldn't be 1.  The code author evidently expected select()
> to at least yield the processor even with delay 0, but the select()
> man pages I have handy say that it will "return immediately" when delay
> is 0.

I've run some tests with 5 instead of 0 and afair performance was worse,
so we should carefully test !0 values. Actually, one slocks are held
longer than anothers - probably we should use different delays...

Vadim


Re: Assuming that TAS() will succeed the first time is verboten

From
ncm@zembu.com (Nathan Myers)
Date:
On Fri, Dec 29, 2000 at 10:54:00AM -0800, Mikheev, Vadim wrote:
> > > The code is based on some odd assumptions.  A select() with 0 delay 
> > > returns immediately unless there is an interrupt during its 
> > > (very short!) time in kernel space.
> > 
> > Yeah, I've wondered whether the 0 entries in s_spincycle[] 
> > shouldn't be 1.  The code author evidently expected select()
> > to at least yield the processor even with delay 0, but the select()
> > man pages I have handy say that it will "return immediately" when delay
> > is 0.
> 
> I've run some tests with 5 instead of 0 and afair performance was worse,
> so we should carefully test !0 values. 

This is not surprising.  Five microseconds is a long time, and the
current s_spincycle does it repeatedly.

> Actually, one slocks are held
> longer than anothers - probably we should use different delays...

I don't understand the last remark.  Are you proposing to mix some 
random numbers into the delays?

Did you try it with 
 #define S_NSPINCYCLE    2 int                     s_spincycle[S_NSPINCYCLE] = {1, 1000};

or even
 #define S_NSPINCYCLE    1 int                     s_spincycle[S_NSPINCYCLE] = {1};

? 

Nathan Myers
ncm@zembu.com