Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jul 2008 11:41:09 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Jeff Roberson <jroberson@jroberson.net>
Cc:        attilio@freebsd.org, arch@freebsd.org, ivmaykov@gmail.com
Subject:   Re: witness performance improvements
Message-ID:  <200807211141.09387.jhb@freebsd.org>
In-Reply-To: <20080718163231.B954@desktop>
References:  <20080718163231.B954@desktop>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 18 July 2008 10:41:58 pm Jeff Roberson wrote:
> Hello,
> 
> I have a patch that improves witness performance available at:
> 
> http://people.freebsd.org/~jeff/witness.diff
> 
> This improvement comes at the cost of some significant space overhead.  It 
> changes the witness graph from a linked tree to a matrix based approach. 
> Relationships can be quickly resolved with a table lookup.  The table size 
> is WITNESS_COUNT^2, or 1MB with the current count of 1024.

Woo!  Thanks for polishing this.

> This patch also makes struct witness objects persistent even after the 
> last lock using this name has been removed.  This is helpful for short 
> lived objects which may be created frequently.

Originally, the idea was that if one had a LOR bug in a driver, one could 
kldunload the driver and have WITNESS forget about any orders for the 
driver's lock, fix the bug, and try again, but the short-lived names problem 
is much more common in practice, and trying to remove info about a specific 
lock class from the graph is a bit tenuous, so I think this is the better 
approach going forward.

> To reduce lock contention on SMP witness_checkorder() now runs without the 
> w_mtx when there are no lock violations.  I also cache a lock_list_entry 
> in each thread as allocating these requires the w_mtx.  The entry is 
> disposed of at thread_exit().

Neat.

> I'm mostly interested in hearing what people have to say about the space 
> bloat.  I believe it is in a commit ready state.

I think the space usage is perfectly fine.  Also, now that you malloc the 
actual witness objects instead of putting them in the BSS (something that 
should have been done anyway I think), I would make the number of witness 
objects a loader tunable.

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807211141.09387.jhb>