2009-10-14 22:37:37

by Mathieu Desnoyers

[permalink] [raw]
Subject: Userspace RCU 0.2.3

Hi,

I just released lib urcu 0.2.3, which is now using autotools. I also
integrated automatic architecture detection for old 386 which lack
cmpxchg (using a fall-back if necessary). I also use a lock; addl
instead of mfence on x86-32 to support a larger variety of older Intel
CPUs.

The build system detects if NR_futex is available in the system
headers. It falls back on a more portable alternative if they are not
available.

There are also new configuration modes to ./configure for UP-only
systems.

As always, the tarballs are available at http://www.lttng.org/urcu

Mathieu

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68


2009-10-15 00:03:07

by Paul E. McKenney

[permalink] [raw]
Subject: Re: Userspace RCU 0.2.3

On Wed, Oct 14, 2009 at 06:36:57PM -0400, Mathieu Desnoyers wrote:
> Hi,
>
> I just released lib urcu 0.2.3, which is now using autotools. I also
> integrated automatic architecture detection for old 386 which lack
> cmpxchg (using a fall-back if necessary). I also use a lock; addl
> instead of mfence on x86-32 to support a larger variety of older Intel
> CPUs.

!!!

Is there anyone on these lists other than me who has actually used an
SMP 80386-based system?

Either way, much appreciated for old time's sake. The things we used
to do to avoid the need for cmpxchg! ;-)

Thanx, Paul

> The build system detects if NR_futex is available in the system
> headers. It falls back on a more portable alternative if they are not
> available.
>
> There are also new configuration modes to ./configure for UP-only
> systems.
>
> As always, the tarballs are available at http://www.lttng.org/urcu
>
> Mathieu
>
> --
> Mathieu Desnoyers
> OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68

2009-10-15 02:45:11

by Mathieu Desnoyers

[permalink] [raw]
Subject: Re: Userspace RCU 0.2.3

* Paul E. McKenney ([email protected]) wrote:
> On Wed, Oct 14, 2009 at 06:36:57PM -0400, Mathieu Desnoyers wrote:
> > Hi,
> >
> > I just released lib urcu 0.2.3, which is now using autotools. I also
> > integrated automatic architecture detection for old 386 which lack
> > cmpxchg (using a fall-back if necessary). I also use a lock; addl
> > instead of mfence on x86-32 to support a larger variety of older Intel
> > CPUs.
>
> !!!
>
> Is there anyone on these lists other than me who has actually used an
> SMP 80386-based system?

SMP 386, ugh, no. But UP 386 yes (at least me). :)

It will become important as the library gets integrated in
distributions.

>
> Either way, much appreciated for old time's sake. The things we used
> to do to avoid the need for cmpxchg! ;-)

In this case I disable signals and take a mutex around the cmpxchg. It's
really a best effort. Should be fine on UP 386, but not so much on SMP
386, as mixing it with assign/xchg pointer could lead to races. I'm not
sure it's worth trying to support 386 SMP though.

Mathieu


>
> Thanx, Paul
>
> > The build system detects if NR_futex is available in the system
> > headers. It falls back on a more portable alternative if they are not
> > available.
> >
> > There are also new configuration modes to ./configure for UP-only
> > systems.
> >
> > As always, the tarballs are available at http://www.lttng.org/urcu
> >
> > Mathieu
> >
> > --
> > Mathieu Desnoyers
> > OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
>

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68

2009-10-15 04:34:42

by Paul E. McKenney

[permalink] [raw]
Subject: Re: Userspace RCU 0.2.3

On Wed, Oct 14, 2009 at 10:39:25PM -0400, Mathieu Desnoyers wrote:
> * Paul E. McKenney ([email protected]) wrote:
> > On Wed, Oct 14, 2009 at 06:36:57PM -0400, Mathieu Desnoyers wrote:
> > > Hi,
> > >
> > > I just released lib urcu 0.2.3, which is now using autotools. I also
> > > integrated automatic architecture detection for old 386 which lack
> > > cmpxchg (using a fall-back if necessary). I also use a lock; addl
> > > instead of mfence on x86-32 to support a larger variety of older Intel
> > > CPUs.
> >
> > !!!
> >
> > Is there anyone on these lists other than me who has actually used an
> > SMP 80386-based system?
>
> SMP 386, ugh, no. But UP 386 yes (at least me). :)
>
> It will become important as the library gets integrated in
> distributions.
>
> > Either way, much appreciated for old time's sake. The things we used
> > to do to avoid the need for cmpxchg! ;-)
>
> In this case I disable signals and take a mutex around the cmpxchg. It's
> really a best effort. Should be fine on UP 386, but not so much on SMP
> 386, as mixing it with assign/xchg pointer could lead to races. I'm not
> sure it's worth trying to support 386 SMP though.

Definitely not worth much, if anything, to support 386 SMP.

Thanx, Paul

2009-10-15 09:05:26

by Josh Triplett

[permalink] [raw]
Subject: Re: Userspace RCU 0.2.3

On Wed, Oct 14, 2009 at 10:39:25PM -0400, Mathieu Desnoyers wrote:
> * Paul E. McKenney ([email protected]) wrote:
> > On Wed, Oct 14, 2009 at 06:36:57PM -0400, Mathieu Desnoyers wrote:
> > > Hi,
> > >
> > > I just released lib urcu 0.2.3, which is now using autotools. I also
> > > integrated automatic architecture detection for old 386 which lack
> > > cmpxchg (using a fall-back if necessary). I also use a lock; addl
> > > instead of mfence on x86-32 to support a larger variety of older Intel
> > > CPUs.
> >
> > !!!
> >
> > Is there anyone on these lists other than me who has actually used an
> > SMP 80386-based system?
>
> SMP 386, ugh, no. But UP 386 yes (at least me). :)
>
> It will become important as the library gets integrated in
> distributions.

Even Debian has given up on real 386 systems at this point, primarily
because system libraries like glibc have; 486 and better represents the
bare minimum required at this point. I don't know of any distributions
supporting real 386 systems at this point, and doing so would represent
a major undertaking.

- Josh Triplett

2009-10-15 17:58:37

by Pierre-Marc Fournier

[permalink] [raw]
Subject: Re: Userspace RCU 0.2.3

Josh Triplett wrote:
>
> Even Debian has given up on real 386 systems at this point, primarily
> because system libraries like glibc have; 486 and better represents the
> bare minimum required at this point. I don't know of any distributions
> supporting real 386 systems at this point, and doing so would represent
> a major undertaking.
>

What about embedded systems? Anyone know if some 386 chips, perhaps even
in smp configurations, are still in use in those?

2009-10-18 18:40:16

by Pavel Machek

[permalink] [raw]
Subject: Re: Userspace RCU 0.2.3

On Thu 2009-10-15 13:40:54, Pierre-Marc Fournier wrote:
> Josh Triplett wrote:
> >
> > Even Debian has given up on real 386 systems at this point, primarily
> > because system libraries like glibc have; 486 and better represents the
> > bare minimum required at this point. I don't know of any distributions
> > supporting real 386 systems at this point, and doing so would represent
> > a major undertaking.
> >
>
> What about embedded systems? Anyone know if some 386 chips, perhaps even
> in smp configurations, are still in use in those?

smp 386: definitely not.

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

2009-10-18 22:02:43

by Mathieu Desnoyers

[permalink] [raw]
Subject: Re: [rp] Userspace RCU 0.2.3

* Pavel Machek ([email protected]) wrote:
> On Thu 2009-10-15 13:40:54, Pierre-Marc Fournier wrote:
> > Josh Triplett wrote:
> > >
> > > Even Debian has given up on real 386 systems at this point, primarily
> > > because system libraries like glibc have; 486 and better represents the
> > > bare minimum required at this point. I don't know of any distributions
> > > supporting real 386 systems at this point, and doing so would represent
> > > a major undertaking.
> > >
> >
> > What about embedded systems? Anyone know if some 386 chips, perhaps even
> > in smp configurations, are still in use in those?
>
> smp 386: definitely not.

Hrm, so for UP 386, I wonder what's the best approach.

One would be to encapsulate all write accesses to the RCU pointers. If
we detect that the architecture lacks cmpxchg, _all_ update operations
(rcu_assign_pointer, rcu_xchg_pointer and rcu_cmpxchg_pointer) would
have to use the signal-disabled+mutex fall-back.

Does it make sense ?

Mathieu

>
> --
> (english) http://www.livejournal.com/~pavelmachek
> (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
>
> _______________________________________________
> rp mailing list
> [email protected]
> http://svcs.cs.pdx.edu/mailman/listinfo/rp

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68

2009-10-18 22:52:40

by Pavel Machek

[permalink] [raw]
Subject: Re: [rp] Userspace RCU 0.2.3

On Sun 2009-10-18 18:02:43, Mathieu Desnoyers wrote:
> * Pavel Machek ([email protected]) wrote:
> > On Thu 2009-10-15 13:40:54, Pierre-Marc Fournier wrote:
> > > Josh Triplett wrote:
> > > >
> > > > Even Debian has given up on real 386 systems at this point, primarily
> > > > because system libraries like glibc have; 486 and better represents the
> > > > bare minimum required at this point. I don't know of any distributions
> > > > supporting real 386 systems at this point, and doing so would represent
> > > > a major undertaking.
> > > >
> > >
> > > What about embedded systems? Anyone know if some 386 chips, perhaps even
> > > in smp configurations, are still in use in those?
> >
> > smp 386: definitely not.
>
> Hrm, so for UP 386, I wonder what's the best approach.
>
> One would be to encapsulate all write accesses to the RCU pointers. If
> we detect that the architecture lacks cmpxchg, _all_ update operations
> (rcu_assign_pointer, rcu_xchg_pointer and rcu_cmpxchg_pointer) would
> have to use the signal-disabled+mutex fall-back.
>
> Does it make sense ?

Yep, but it sounds expensive. Another option is to ignore the issue
and see how many people still have 386s :-). Few embedded systems
may be affected, but...

Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

2009-10-18 23:16:25

by Mathieu Desnoyers

[permalink] [raw]
Subject: Re: [ltt-dev] [rp] Userspace RCU 0.2.3

* Pavel Machek ([email protected]) wrote:
> On Sun 2009-10-18 18:02:43, Mathieu Desnoyers wrote:
> > * Pavel Machek ([email protected]) wrote:
> > > On Thu 2009-10-15 13:40:54, Pierre-Marc Fournier wrote:
> > > > Josh Triplett wrote:
> > > > >
> > > > > Even Debian has given up on real 386 systems at this point, primarily
> > > > > because system libraries like glibc have; 486 and better represents the
> > > > > bare minimum required at this point. I don't know of any distributions
> > > > > supporting real 386 systems at this point, and doing so would represent
> > > > > a major undertaking.
> > > > >
> > > >
> > > > What about embedded systems? Anyone know if some 386 chips, perhaps even
> > > > in smp configurations, are still in use in those?
> > >
> > > smp 386: definitely not.
> >
> > Hrm, so for UP 386, I wonder what's the best approach.
> >
> > One would be to encapsulate all write accesses to the RCU pointers. If
> > we detect that the architecture lacks cmpxchg, _all_ update operations
> > (rcu_assign_pointer, rcu_xchg_pointer and rcu_cmpxchg_pointer) would
> > have to use the signal-disabled+mutex fall-back.
> >
> > Does it make sense ?
>
> Yep, but it sounds expensive. Another option is to ignore the issue
> and see how many people still have 386s :-). Few embedded systems
> may be affected, but...
>

I can keep that as a special build option, e.g.

target: i386

Mathieu

> Pavel
> --
> (english) http://www.livejournal.com/~pavelmachek
> (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
>
> _______________________________________________
> ltt-dev mailing list
> [email protected]
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
>

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68

2009-10-19 23:59:05

by Mathieu Desnoyers

[permalink] [raw]
Subject: Userspace RCU 0.2.4

* Pavel Machek ([email protected]) wrote:
> On Sun 2009-10-18 18:02:43, Mathieu Desnoyers wrote:
> > * Pavel Machek ([email protected]) wrote:
> > > On Thu 2009-10-15 13:40:54, Pierre-Marc Fournier wrote:
> > > > Josh Triplett wrote:
> > > > >
> > > > > Even Debian has given up on real 386 systems at this point, primarily
> > > > > because system libraries like glibc have; 486 and better represents the
> > > > > bare minimum required at this point. I don't know of any distributions
> > > > > supporting real 386 systems at this point, and doing so would represent
> > > > > a major undertaking.
> > > > >
> > > >
> > > > What about embedded systems? Anyone know if some 386 chips, perhaps even
> > > > in smp configurations, are still in use in those?
> > >
> > > smp 386: definitely not.
> >
> > Hrm, so for UP 386, I wonder what's the best approach.
> >
> > One would be to encapsulate all write accesses to the RCU pointers. If
> > we detect that the architecture lacks cmpxchg, _all_ update operations
> > (rcu_assign_pointer, rcu_xchg_pointer and rcu_cmpxchg_pointer) would
> > have to use the signal-disabled+mutex fall-back.
> >
> > Does it make sense ?
>
> Yep, but it sounds expensive. Another option is to ignore the issue
> and see how many people still have 386s :-). Few embedded systems
> may be affected, but...

Well.. I just enhanced liburcu to fully support 386 SMP (even if
opinions seems to vary regarding its usefulness...) ;) It adds _no_
overhead whatsoever if building for i486+ or x86 64.

What I did is a complete "compatibility mode" for all uatomic_arch_x86.h
atomic operations (it's my own user-space reimplementation of the Linux
kernel atomic.h). It's in liburcu 0.2.4 (now released).

How it works:

config x86 64 or x86 32 > i386 :

#define to map directly to atomic operations.

config i386 :

dynamically detect the cpu id, caches it in "cas_avail" variable.
If cas_avail is -1 (unset) -> dynamically check, cache result.
If cas_avail is 1 -> use atomic operations.
If cas_avail is 0 -> use compatibility mode for _all_ uatomic
write operations involving signal disabling and a mutex. Only
uatomic_read is exempt from locking.

So it should be safe to access RCU pointers through the
rcu_cmpxchg/xchg/set/assign_pointer() and rcu_dereference() primitives.

I tried to force using the compatibility mode by changing the condition
in compat_arch_x86.c and building for i386 compatibility. It works fine
and passes the test_uatomic test cases. Passes the rcutorture test too.

Mathieu

>
> Pavel
> --
> (english) http://www.livejournal.com/~pavelmachek
> (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
>
> _______________________________________________
> ltt-dev mailing list
> [email protected]
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
>

--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68