ice: add support BIG TCP on IPv6
authorPawel Chmielewski <pawel.chmielewski@intel.com>
Tue, 7 Feb 2023 16:23:03 +0000 (17:23 +0100)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Tue, 14 Feb 2023 21:08:02 +0000 (13:08 -0800)
Enable sending BIG TCP packets on IPv6 in the ice driver using generic
ipv6_hopopt_jumbo_remove helper for stripping HBH header.

Tested:
netperf -t TCP_RR -H 2001:db8:0:f101::1  -- -r80000,80000 -O MIN_LATENCY,P90_LATENCY,P99_LATENCY,TRANSACTION_RATE

Tested on two different setups. In both cases, the following settings were
applied after loading the changed driver:

ip link set dev enp175s0f1np1 gso_max_size 130000
ip link set dev enp175s0f1np1 gro_max_size 130000
ip link set dev enp175s0f1np1 mtu 9000

First setup:
Before:
Minimum      90th         99th         Transaction
Latency      Percentile   Percentile   Rate
Microseconds Latency      Latency      Tran/s
             Microseconds Microseconds
134          279          410          3961.584

After:
Minimum      90th         99th         Transaction
Latency      Percentile   Percentile   Rate
Microseconds Latency      Latency      Tran/s
             Microseconds Microseconds
135          178          216          6093.404

The other setup:
Before:
Minimum      90th         99th         Transaction
Latency      Percentile   Percentile   Rate
Microseconds Latency      Latency      Tran/s
             Microseconds Microseconds
218          414          478          2944.765

After:
Minimum      90th         99th         Transaction
Latency      Percentile   Percentile   Rate
Microseconds Latency      Latency      Tran/s
             Microseconds Microseconds
146          238          266          4700.596

Signed-off-by: Pawel Chmielewski <pawel.chmielewski@intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice.h
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/ice/ice_txrx.c

index 7bd50e4..b0e29e3 100644 (file)
 
 #define ICE_MAX_MTU    (ICE_AQ_SET_MAC_FRAME_SIZE_MAX - ICE_ETH_PKT_HDR_PAD)
 
+#define ICE_MAX_TSO_SIZE 131072
+
 #define ICE_UP_TABLE_TRANSLATE(val, i) \
                (((val) << ICE_AQ_VSI_UP_TABLE_UP##i##_S) & \
                  ICE_AQ_VSI_UP_TABLE_UP##i##_M)
index 0712c10..eb87bb0 100644 (file)
@@ -3436,6 +3436,8 @@ static void ice_set_netdev_features(struct net_device *netdev)
         * be changed at runtime
         */
        netdev->hw_features |= NETIF_F_RXFCS;
+
+       netif_set_tso_max_size(netdev, ICE_MAX_TSO_SIZE);
 }
 
 /**
index 466113c..c036be5 100644 (file)
@@ -2327,6 +2327,9 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct ice_tx_ring *tx_ring)
 
        ice_trace(xmit_frame_ring, tx_ring, skb);
 
+       if (unlikely(ipv6_hopopt_jumbo_remove(skb)))
+               goto out_drop;
+
        count = ice_xmit_desc_count(skb);
        if (ice_chk_linearize(skb, count)) {
                if (__skb_linearize(skb))