dual port EM nic wedging under load

Matthew Dillon dillon at apollo.backplane.com
Sun Nov 26 08:46:11 PST 2006


:Using polling and fastfwd on, I am able to get about 300Kpps in a 
:unidirectional blast and still see that rate even with 10 poorly 
:written ipfw rules !?!

    Are you sure the ipfw ruleset is being executed?  :-) ... whenever
    something looks to be too good to be true....

:Also it handles the load quite smoothly for the bi-directional test
:
:Here is the output of ifstat -b as seen from the box acting as router
:
:You can see the first stream starting up, and then the second on the 
:opposite stream.  Rates remain constant throughout, which is quite 
:different from FreeBSD. ipfw on Dragonfly has no ill effect for some reason.
:...

    I'm not sure if you are overloading the system intentionally or not.
    There seem to be an excessive number of ENOBUF issues during packet
    processing, assuming the count start at 0 when the test began.

:em0: Missed Packets =    221709682	<<<<<<
:em0: Receive No Buffers = 53994896	<<<<<< This seems excessive to me
:em0: Receive length errors = 0
:em0: Receive errors = 0
:em0: Crc errors = 0
:em0: Alignment errors = 0
:em0: Carrier extension errors = 0
:em0: RX overruns = 55192		<<<<<<
:...
:em0: Good Packets Rcvd = 187109273
:em0: Good Packets Xmtd =  30553884

:em1: Missed Packets =     17508539	<<<<<<
:em1: Receive No Buffers = 14148594	<<<<<<
:em1: Receive length errors = 0
:em1: Receive errors = 0
:em1: Crc errors = 0
:em1: Alignment errors = 0
:em1: Carrier extension errors = 0
:em1: RX overruns = 0			<<<<<<
:em1: Good Packets Rcvd =  30553871
:em1: Good Packets Xmtd = 187031079

    One really nice thing about DragonFly's NETIF polling code is that you
    can control the polling frequency (kern.polling.pollhz) and other
    parameters on the fly with sysctl's.  You can actually change the polling
    frequency on a live system!

    Try playing with the parameters.  My guess is that the burst rate and/or
    the frequency is too low.  I don't know how high a polling frequency
    you can set and have the system still be efficient, but I think it is
    worth playing with both parameters (kern.polling.each_burst and
    kern.polling.pollhz) to find optimal values.  5000hz would be around
    200us, and you could try increasing kern.polling.each_burst to 20...
    the system should be able to support that.

    If there is still a ENOBUFS issue it could be related to the object
    cache parameters used to initialize the mbuf system.  We might not
    have enough mbuf clusters.  It is also possible that the ENOBUFS was
    a burst issue at the beginning of the test... the objcache does try
    to adjust to load to some degree.

kern.polling.burst: 5
kern.polling.each_burst: 5
kern.polling.burst_max: 150
kern.polling.user_frac: 50
kern.polling.reg_frac: 20
kern.polling.short_ticks: 0
kern.polling.lost_polls: 0
kern.polling.pending_polls: 0
kern.polling.residual_burst: 0
kern.polling.handlers: 0
kern.polling.enable: 0
kern.polling.phase: 0
kern.polling.suspect: 0
kern.polling.stalled: 0
kern.polling.pollhz: 2000

    I expect the smooth flow is probably due to the polling burst size being
    too small.  You get smooth flow, but the processing isn't necessarily
    going to be very efficient.

    This is all on UP of course.  The BGL is still present in the network
    path so SMP isn't going to help a whole lot on DragonFly yet.

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>






More information about the Users mailing list