Subject: Re: CVS commit: [vmlocking] src/sys
To: None <ad@netbsd.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: source-changes
Date: 09/01/2007 23:38:58
> Module Name:	src
> Committed By:	ad
> Date:		Sat Sep  1 12:55:16 UTC 2007
> 
> Modified Files:
> 	src/sys/kern [vmlocking]: kern_cpu.c subr_pool.c
> 	src/sys/sys [vmlocking]: pool.h
> 
> Log Message:
> - Add a CPU layer to pool caches. In combination with vmem/kmem this
>   provides CPU-local slab/object and general purpose allocators. The
>   strategy used is as described in Jeff Bonwick's USENIX paper, except in
>   at least one place where the described allocation strategy doesn't make
>   sense. For exclusive access to the CPU layer the IPL is raised or kernel
>   preemption disabled. Where the interrupt priority levels are software
>   emulated this is much cheaper than taking a lock, and I think that
>   writing to a local %pil register is likely to have a similar penalty to
>   taking a lock.
> 
>   No tuning of the group sizes is currently done - all groups have 15
>   items each, but this should be fairly easy to implement. Also, the
>   reclamation mechanism should probably use a cross-call to drain the
>   CPU-level caches on remote CPUs.
> 
>   Currently this causes kernel memory corruption on i386, yet works without
>   a problem on amd64. The cache layer is disabled for the time being until I
>   can find the bug.
> 
> - Change the pool_cache API so that the caches are themselves dynamically
>   allocated, and that each cache is tied to a single pool only. Add some
>   stubs to change pool_cache parameters that call directly through to the
>   pool layer (e.g. pool_cache_sethiwat). The idea here is that pool_cache
>   should become the default object allocator (and so LKM friendly), and
>   that the pool allocator should be for kernel-internal use only. This will
>   be posted to tech-kern@ for review.
> 
> 
> To generate a diff of this commit:
> cvs rdiff -r1.2.2.6 -r1.2.2.7 src/sys/kern/kern_cpu.c
> cvs rdiff -r1.128.2.6 -r1.128.2.7 src/sys/kern/subr_pool.c
> cvs rdiff -r1.55.6.2 -r1.55.6.3 src/sys/sys/pool.h
> 
> Please note that diffs are not public domain; they are subject to the
> copyright notices on the relevant files.

cc_busy assertion seems broken.
	1. LWP1 blocks in *_slow.
	2. LWP2 runs on the same CPU and accesses the same pool.
	 it will find cc_busy == LWP1.

YAMAMOTO Takashi