On Fri, Jan 23, 2004 at 10:07:25AM -0500, Dan Sugalski wrote:
> A single global lock, like python and ruby use, kill any hope of 
> SMP-ability.

Assume, for the sake of argument, that locking almost every PMC
every time a thread touches it causes Parrot to run four times
slower.  Assume also that all multithreaded applications are
perfectly parallelizable, so overall performance scales linearly
with number of CPUs.  In this case, threaded Parrot will need
to run on a 4-CPU machine to match the speed of a single-lock
design running on a single CPU.  The only people that will benefit
from the multi-lock design are those using machines with more than
4 CPUs--everyone else is worse off.

This is a theoretical case, of course.  We don't know exactly how
much of a performance hit Parrot will incur from a lock-everything
design.  I think that it would be a very good idea to know for
certain what the costs will be, before it becomes too late to change
course.

Perhaps the cost will be minimal--a 20% per-CPU overhead would
almost certainly be worth the ability to take advantage of multiple
CPUs.  Right now, however, there is no empirical data on which to
base a decision.  I think that making a decision without that data
is unwise.

As I said, I've seen a real-world program which was rewritten to
take advantage of multiple CPUs.  The rewrite fulfilled the design
goals: the new version scaled with added CPUs. Unfortunately, lock
overhead made it sufficiently slower that it took 2-4 CPUs to match
the old performance on a single CPU--despite the fact that almost
all lock attempts succeeded without contention.

The current Parrot design proposal looks very much like the locking
model that app used.


> Corruption-resistent data structures without locking just don't exist.

An existence proof:

Java Collections are a standard Java library of common data structures
such as arrays and hashes.  Collections are not synchronized; access
involves no locks at all.  Multiple threads accessing the same
collection at the same time cannot, however, result in the virtual
machine crashing.  (They can result in data structure corruption,
but this corruption is limited to "surprising results" rather than
"VM crash".)

                      - Damien

Reply via email to