mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
netdev-dpdk: Remove Rx checksum reconfigure.
Rx checksum offload is enabled by default on DPDK physical NICs
where available, with reconfiguration through
options:rx-checksum-offload. However, changing rx-checksum-offload
did not result in a reconfiguration of the NIC and wrong status is
reported for it.
As there seems to be diminishing reasons why a user would want
to disable Rx checksum offload, just remove the broken reconfiguration
option.
Fixes: 1a2bb11817
("netdev-dpdk: Enable Rx checksum offloading feature on DPDK physical ports.")
Reported-by: Kevin Traynor <ktraynor@redhat.com>
Suggested-by: Sugesh Chandran <sugesh.chandran@intel.com>
Acked-by: Darrell Ball <dlu998@gmail.com>
Tested-by: Sugesh Chandran <sugesh.chandran@intel.com>
Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
@@ -276,27 +276,12 @@ common for use cases involving East-West traffic only.
|
||||
Rx Checksum Offload
|
||||
-------------------
|
||||
|
||||
By default, DPDK physical ports are enabled with Rx checksum offload. Rx
|
||||
checksum offload can be configured on a DPDK physical port either when adding
|
||||
or at run time.
|
||||
|
||||
To disable Rx checksum offload when adding a DPDK port dpdk-p0::
|
||||
|
||||
$ ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk \
|
||||
options:dpdk-devargs=0000:01:00.0 options:rx-checksum-offload=false
|
||||
|
||||
Similarly to disable the Rx checksum offloading on a existing DPDK port dpdk-p0::
|
||||
|
||||
$ ovs-vsctl set Interface dpdk-p0 options:rx-checksum-offload=false
|
||||
By default, DPDK physical ports are enabled with Rx checksum offload.
|
||||
|
||||
Rx checksum offload can offer performance improvement only for tunneling
|
||||
traffic in OVS-DPDK because the checksum validation of tunnel packets is
|
||||
offloaded to the NIC. Also enabling Rx checksum may slightly reduce the
|
||||
performance of non-tunnel traffic, specifically for smaller size packet.
|
||||
DPDK vectorization is disabled when checksum offloading is configured on DPDK
|
||||
physical ports which in turn effects the non-tunnel traffic performance.
|
||||
So it is advised to turn off the Rx checksum offload for non-tunnel traffic use
|
||||
cases to achieve the best performance.
|
||||
|
||||
.. _extended-statistics:
|
||||
|
||||
|
@@ -718,29 +718,6 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, int n_rxq, int n_txq)
|
||||
return diag;
|
||||
}
|
||||
|
||||
static void
|
||||
dpdk_eth_checksum_offload_configure(struct netdev_dpdk *dev)
|
||||
OVS_REQUIRES(dev->mutex)
|
||||
{
|
||||
struct rte_eth_dev_info info;
|
||||
bool rx_csum_ol_flag = false;
|
||||
uint32_t rx_chksm_offload_capa = DEV_RX_OFFLOAD_UDP_CKSUM |
|
||||
DEV_RX_OFFLOAD_TCP_CKSUM |
|
||||
DEV_RX_OFFLOAD_IPV4_CKSUM;
|
||||
rte_eth_dev_info_get(dev->port_id, &info);
|
||||
rx_csum_ol_flag = (dev->hw_ol_features & NETDEV_RX_CHECKSUM_OFFLOAD) != 0;
|
||||
|
||||
if (rx_csum_ol_flag &&
|
||||
(info.rx_offload_capa & rx_chksm_offload_capa) !=
|
||||
rx_chksm_offload_capa) {
|
||||
VLOG_WARN_ONCE("Rx checksum offload is not supported on device %"PRIu8,
|
||||
dev->port_id);
|
||||
dev->hw_ol_features &= ~NETDEV_RX_CHECKSUM_OFFLOAD;
|
||||
return;
|
||||
}
|
||||
netdev_request_reconfigure(&dev->up);
|
||||
}
|
||||
|
||||
static void
|
||||
dpdk_eth_flow_ctrl_setup(struct netdev_dpdk *dev) OVS_REQUIRES(dev->mutex)
|
||||
{
|
||||
@@ -759,9 +736,21 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
|
||||
struct ether_addr eth_addr;
|
||||
int diag;
|
||||
int n_rxq, n_txq;
|
||||
uint32_t rx_chksm_offload_capa = DEV_RX_OFFLOAD_UDP_CKSUM |
|
||||
DEV_RX_OFFLOAD_TCP_CKSUM |
|
||||
DEV_RX_OFFLOAD_IPV4_CKSUM;
|
||||
|
||||
rte_eth_dev_info_get(dev->port_id, &info);
|
||||
|
||||
if ((info.rx_offload_capa & rx_chksm_offload_capa) !=
|
||||
rx_chksm_offload_capa) {
|
||||
VLOG_WARN_ONCE("Rx checksum offload is not supported on device %"PRIu8,
|
||||
dev->port_id);
|
||||
dev->hw_ol_features &= ~NETDEV_RX_CHECKSUM_OFFLOAD;
|
||||
} else {
|
||||
dev->hw_ol_features |= NETDEV_RX_CHECKSUM_OFFLOAD;
|
||||
}
|
||||
|
||||
n_rxq = MIN(info.max_rx_queues, dev->up.n_rxq);
|
||||
n_txq = MIN(info.max_tx_queues, dev->up.n_txq);
|
||||
|
||||
@@ -1209,8 +1198,6 @@ netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args,
|
||||
{RTE_FC_NONE, RTE_FC_TX_PAUSE},
|
||||
{RTE_FC_RX_PAUSE, RTE_FC_FULL }
|
||||
};
|
||||
bool rx_chksm_ofld;
|
||||
bool temp_flag;
|
||||
const char *new_devargs;
|
||||
int err = 0;
|
||||
|
||||
@@ -1292,16 +1279,6 @@ netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args,
|
||||
dpdk_eth_flow_ctrl_setup(dev);
|
||||
}
|
||||
|
||||
/* Rx checksum offload configuration */
|
||||
/* By default the Rx checksum offload is ON */
|
||||
rx_chksm_ofld = smap_get_bool(args, "rx-checksum-offload", true);
|
||||
temp_flag = (dev->hw_ol_features & NETDEV_RX_CHECKSUM_OFFLOAD)
|
||||
!= 0;
|
||||
if (temp_flag != rx_chksm_ofld) {
|
||||
dev->hw_ol_features ^= NETDEV_RX_CHECKSUM_OFFLOAD;
|
||||
dpdk_eth_checksum_offload_configure(dev);
|
||||
}
|
||||
|
||||
out:
|
||||
ovs_mutex_unlock(&dev->mutex);
|
||||
ovs_mutex_unlock(&dpdk_mutex);
|
||||
|
@@ -3480,20 +3480,6 @@
|
||||
</column>
|
||||
</group>
|
||||
|
||||
<group title="Rx Checksum Offload Configuration">
|
||||
<p>
|
||||
The checksum validation on the incoming packets are performed on NIC
|
||||
using Rx checksum offload feature. Implemented only for <code>dpdk
|
||||
</code>physical interfaces.
|
||||
</p>
|
||||
|
||||
<column name="options" key="rx-checksum-offload"
|
||||
type='{"type": "boolean"}'>
|
||||
Set to <code>false</code> to disble Rx checksum offloading on <code>
|
||||
dpdk</code>physical ports. By default, Rx checksum offload is enabled.
|
||||
</column>
|
||||
</group>
|
||||
|
||||
<group title="Common Columns">
|
||||
The overall purpose of these columns is described under <code>Common
|
||||
Columns</code> at the beginning of this document.
|
||||
|
Reference in New Issue
Block a user