On Thu Sep 3 21:38:30 EDT 2009, [email protected] wrote: > To ensure only one thread in the kernel at a time?
yes. http://en.wikipedia.org/wiki/Giant_lock it allows only one kernel thread to run at a time. the pool lock allows as many threads to run as one would like, but they can't allocate concurrently since blocks and kernel buffers are allocated through the pool library. this effectively ties kernel procs doing io together by their shoelaces. it's a big reason that a number of ethernet drivers have private frame pools. cutting the lock (any lock) out of the mix when shuffling very small blocks around the kernel was worth double the blocks/s in some tests i did. sorry to be vague. i don't have a good writeup. - erik
