witness performance improvements

Julian Elischer julian at elischer.org
Sat Jul 19 07:42:57 UTC 2008


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.
> 
> 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.
> 
> 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().
> 
> There is also a new sysctl that produces dot output which graphs lock 
> order relationships with the graphviz program.
> 


cool... got sample output?

> Most of this work was done by Ilya Maykov while he was at Isilon 
> systems. The locking work and some cleanup/porting/refinement was done 
> by me on behalf of Nokia.
> 
> The performance improvement can be significant.  It is only on the order 
> of 10-20% for buildkernel but on a packet forwarding test at nokia it 
> sped things up by 5x putting a witness enabled kernel within about 50% 
> of the performance of a kernel without.  I believe buildworld isn't 
> helped as much because forking and exiting a lot would then contend on 
> the witness lock.
> 
> I'm mostly interested in hearing what people have to say about the space 
> bloat.  I believe it is in a commit ready state.

Since witness is not usually on production systems, I don't see a 
problem with giving it 1 MB.
kjfnb7

> 
> Thanks,
> Jeff
> _______________________________________________
> freebsd-arch at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arch
> To unsubscribe, send any mail to "freebsd-arch-unsubscribe at freebsd.org"



More information about the freebsd-arch mailing list