witness performance improvements

Jeff Roberson jroberson at jroberson.net
Sun Jul 20 09:33:12 UTC 2008


On Sat, 19 Jul 2008, Attilio Rao wrote:

> 2008/7/19, Jeff Roberson <jroberson at jroberson.net>:
>> 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.
>
> As I alredy said, I don't like this.
> I mostly prefer the current approach (comma separated stuff) that one
> can shape as its need.
> If you also think there are some informations the current sysctl
> doesn't export and it should we could fix it, but IMHO we should axe
> this part of the patch (I have still to look at this patch, but I
> remind in the Isilon's version it was a good amount of structures and
> modifies just to handle that part).

Can you estimate how much effort it would take to port your previous graph 
solution to the current witness code?


>
>>  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.
>
> This should not be a big problem, it is a debugging kernel after all
> if it has WITNESS.
>
> I hope I will have more time for a detailed revision in the day.

I would appreciate that.

Thanks,
Jeff

>
> Thanks,
> Attilio
>
>
> -- 
> Peace can only be achieved by understanding - A. Einstein
>


More information about the freebsd-arch mailing list