DragonFly kernel List (threaded) for 2008-04
DragonFly BSD
DragonFly kernel List (threaded) for 2008-04
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: altq spinlock and if_start dispatch


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 14 Apr 2008 15:19:47 -0700 (PDT)

:hardware network drivers.  For ether_output(), all code before
:ifnet.if_start() do not need ifnet's serializer, if we dispatch
:if_start then whole ether_output will not need ifnet serializer.  14
:pseudo devices use their own if_output and need to hold serializer.
:After investigating all if_output calling and their implementation, I
:think pushing down ifnet serializer holding into if_output
:implementation (note: not each driver :) is as easy as holding ifnet
:serializer by callers.  By pushing down ifnet serializer holding, we
:could also completely eliminate ifnet serializer holding cost, if the
:if_output implementation does not need to hold ifnet serializer (e.g.
:ether_output after patching and other 6 pseudo devices)
:...
:Best Regards,
:sephe

    Ok, sounds good.

    Definitely use KTR, it's really a cool utility.

    Be sure to turn on cpu synchronization, aka debug.ktr.resynchronize=1,
    and use the -s option to ktrdump to merge all the cpus into one
    time-sorted log.

    Resynchronization basically does an IPI sequence once a second to
    figure out the TSC differences between the cpu's and correct for it.
    It isn't perfect (there's some slew in inter-cpu numbers which can
    be seen if you run the pingpong KTR test), but it's far better then
    not having any synchronization at all.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]