[Python-ideas] Remove GIL with CAS instructions?

Adam Olsen rhamph at gmail.com
Wed Oct 21 02:00:29 CEST 2009


On Tue, Oct 20, 2009 at 17:50, Antoine Pitrou <solipsis at pitrou.net> wrote:
> Sturla Molden <sturla at ...> writes:
>>
>> Yes, one could add a nonsence CAS to existing incref/decref, and measure
>> overhead.
>
> That would be the first thing to do IMO.
> If it doesn't seem to decrease performance a lot, you could continue by adding
> locking to dict objects, and measure again.
> Then add lists and sets (although I doubt sets and even lists are
> performance-critical for general interpreter operation).
> If after that you have less than a 10% slowdown (personal opinion only, other
> people's mileage may vary), it's probably worth going on and trying to do the
> whole GIL removal (which doesn't mean it would necessarily be accepted, by the
> way, but at least would avoid it being automatically rejected ;-)).

This'd show you the minimum amount of overhead, but only for a trivial
case: single threaded.  You're not invoking cache contention, which in
my experience is much larger than the atomic op cost, and prevents the
*real* gains you hope to make.

Python-safethread makes the datastructures safe (lockless fast-paths)
so that it can be compared properly.  I tried atomic refcounting and
it sucked.  My buffered bodge sucked less, but still sucked.  The only
option left is a real tracing GC.


-- 
Adam Olsen, aka Rhamphoryncus



More information about the Python-ideas mailing list