Re: 2.6.11-rc1-mm1

From: Robert Wisniewski
Date: Sun Jan 16 2005 - 15:15:34 EST


Karim Yaghmour writes:
>
> Christoph Hellwig wrote:
> > the lockless mode is really just loops around cmpxchg. It's spinlocks
> > reinvented poorly.

Christoph,
Sadly they're not the same, atomic operations provide a set of
functionality that simple spin locks do not give you. Consider two
different processes each executing the following code

int global_val;

modify_val_spin()
{
acquire_spin_lock()
// calculate some_value based on global_val
// for example c=global_val; if (c%0) some_value=10; else some_value=20;
global_val = global_val + some_value
release_spin_lock()
}

modify_val_atomic()
{
do
// calculate some_value based on global_val
// for example c=global_val; if (c%0) some_value=10; else some_value=20;
global_val = global_val + some_value
while (compare_and_store(global_val, , ))
}

What's the difference. The deal is if two processes execute this code
simultaneously and one gets interrupted in the middle of modify_val_spin,
then the other wastes its entire quantum spinning for the lock. In the
modify_val_atomic if one process gets interrupted, no problem, the other
process can proceed through, then when the first one runs again the CAS
will fail, and it will go around the loop again. Now imagine it was the
kernel involved...

I don't claim to have all the answers and am happy to have discussion on
something, but the attitude expressed by "It's spinlocks reinvented
poorly." is not conducive to a useful exchange even if you were correct.

>
> I beg to differ. You have to use different spinlocks depending on
> where you are:
> - serving user-space
> - bh-derivatives
> - irq
>
> lockless is the same primitive regardless of your current state,
> it's not the same as spinlocks.
>
> Karim
> --
> Author, Speaker, Developer, Consultant
> Pushing Embedded and Real-Time Linux Systems Beyond the Limits
> http://www.opersys.com || karim@xxxxxxxxxxx || 1-866-677-4546

Robert Wisniewski
The K42 MP OS Project
http://www.research.ibm.com/K42/
bob@xxxxxxxxxxxxxx
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/