svn commit: r273112 - head/sys/dev/ixgbe

Alexander V. Chernikov melifaro at FreeBSD.org
Thu Nov 6 11:07:54 UTC 2014


On 15.10.2014 05:22, Adrian Chadd wrote:
> Author: adrian
> Date: Wed Oct 15 01:22:56 2014
> New Revision: 273112
> URL: https://svnweb.freebsd.org/changeset/base/273112
>
> Log:
>    Set the DROP_EN bit before the RX queue is brought up and active.
>    
>    He noticed issues setting this bit in SRRCTL after the queue was up,
>    so doing it from the sysctl handler isn't enough and may not actually
>    work correctly.
While investigating/measuring ixgbe performance w/ and without flow control
I noticed that disabling fc entirely (e.g. disabling 512K skid buffer 
and turning drop_en on)
not only makes things a bit worse, but also makes NIC stop accounting 
tail-drops as errors
at all.
It is a bit unhandy with HW counters, since you, for example, see 2M 
packets being received
in netstat, but in reality system receives only 1M (And there is no easy 
way to determine exact
count).
>    
>    This commit doesn't remove the sysctl path or try to change its
>    behaviour.  I'll talk with others about how to finish fixing that
>    before I tackle that.
>    
>    PR:		kern/194311
>    Submitted by:	luigi
>    MFC after:	3 days
>    Sponsored by:	Norse Corp, Inc
>
> Modified:
>    head/sys/dev/ixgbe/ixgbe.c
>
> Modified: head/sys/dev/ixgbe/ixgbe.c
> ==============================================================================
> --- head/sys/dev/ixgbe/ixgbe.c	Wed Oct 15 01:16:11 2014	(r273111)
> +++ head/sys/dev/ixgbe/ixgbe.c	Wed Oct 15 01:22:56 2014	(r273112)
> @@ -4377,6 +4377,20 @@ ixgbe_initialize_receive_units(struct ad
>   		srrctl &= ~IXGBE_SRRCTL_BSIZEPKT_MASK;
>   		srrctl |= bufsz;
>   		srrctl |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF;
> +
> +		/*
> +		 * Set DROP_EN iff we have no flow control and >1 queue.
> +		 * Note that srrctl was cleared shortly before during reset,
> +		 * so we do not need to clear the bit, but do it just in case
> +		 * this code is moved elsewhere.
> +		 */
> +		if (adapter->num_queues > 1 &&
> +		    adapter->hw.fc.requested_mode == ixgbe_fc_none) {
This code seems to turn drop_en always on HEAD due to
hw->fc.requested_mode is inherited from adapter->fc at the end of
ixgbe_init_locked(), _after_ calling ixgbe_initialize_receive_units()
> +			srrctl |= IXGBE_SRRCTL_DROP_EN;
> +		} else {
> +			srrctl &= ~IXGBE_SRRCTL_DROP_EN;
> +		}
> +
>   		IXGBE_WRITE_REG(hw, IXGBE_SRRCTL(i), srrctl);
>   
>   		/* Setup the HW Rx Head and Tail Descriptor Pointers */
>
>



More information about the svn-src-all mailing list