tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Dynamically allocated locks



On Mon, Mar 24, 2008 at 10:10:07AM -0700, Matt Thomas wrote:

> On Mar 23, 2008, at 10:52 AM, Andrew Doran wrote:
> 
> >Hi,
> >
> >This patch allows for dynamically allocated locks.
> >
> >http://www.netbsd.org/~ad/lockobj.diff
> >
> >Each lock gets its own cache line, which can reduce cache coherency  
> >costs
> >when the lock is very active. The locks are reference counted so  
> >can be
> >shared between objects. That could be used for the two ends of a  
> >Unix socket
> >connection, or to share a lock between clone()d processes in order to
> >protect common state like signal actions, etc.
> >
> >Any objections?
> 
> Yes.  One / cacheline size is a dramatic waste of space.  Some  
> systems have
> 128 bytes per cacheline.  On systems with small caches or UP systems  
> it's
> extremely expensive.

On UP systems it's unnecessary. How about introducing a global variable that
is tuned during early boot by MD code? Maybe "coherency_unit"? I'm not
proposing to do this for all locks in the system, only those that are likely
to be particularly busy.
 
> Other than that its fine.  I can see not crossing a cacheline boundary,
> but only 1 / cacheline is just wrong.

It really does matter on MP systems. If you were to take a machine and have
all CPUs doing nothing but modifying operations on data within a single
cache line, then in the best case the machine would in effect be single
threaded: it would do no better than a single CPU system. In the worst case
it could be a lot slower due to (for example) costly writebacks to main
memory.

Andrew


Home | Main Index | Thread Index | Old Index