altq spinlock and if_start dispatch
    Matthew Dillon 
    dillon at apollo.backplane.com
       
    Mon Apr 14 15:27:54 PDT 2008
    
    
  
: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 at backplane.com>
    
    
More information about the Kernel
mailing list