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
|
Rx Checksum Offload
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
By default, DPDK physical ports are enabled with Rx checksum offload. Rx
|
By default, DPDK physical ports are enabled with Rx checksum offload.
|
||||||
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
|
|
||||||
|
|
||||||
Rx checksum offload can offer performance improvement only for tunneling
|
Rx checksum offload can offer performance improvement only for tunneling
|
||||||
traffic in OVS-DPDK because the checksum validation of tunnel packets is
|
traffic in OVS-DPDK because the checksum validation of tunnel packets is
|
||||||
offloaded to the NIC. Also enabling Rx checksum may slightly reduce the
|
offloaded to the NIC. Also enabling Rx checksum may slightly reduce the
|
||||||
performance of non-tunnel traffic, specifically for smaller size packet.
|
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:
|
.. _extended-statistics:
|
||||||
|
|
||||||
|
@@ -718,29 +718,6 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk *dev, int n_rxq, int n_txq)
|
|||||||
return diag;
|
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
|
static void
|
||||||
dpdk_eth_flow_ctrl_setup(struct netdev_dpdk *dev) OVS_REQUIRES(dev->mutex)
|
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;
|
struct ether_addr eth_addr;
|
||||||
int diag;
|
int diag;
|
||||||
int n_rxq, n_txq;
|
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);
|
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_rxq = MIN(info.max_rx_queues, dev->up.n_rxq);
|
||||||
n_txq = MIN(info.max_tx_queues, dev->up.n_txq);
|
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_NONE, RTE_FC_TX_PAUSE},
|
||||||
{RTE_FC_RX_PAUSE, RTE_FC_FULL }
|
{RTE_FC_RX_PAUSE, RTE_FC_FULL }
|
||||||
};
|
};
|
||||||
bool rx_chksm_ofld;
|
|
||||||
bool temp_flag;
|
|
||||||
const char *new_devargs;
|
const char *new_devargs;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
@@ -1292,16 +1279,6 @@ netdev_dpdk_set_config(struct netdev *netdev, const struct smap *args,
|
|||||||
dpdk_eth_flow_ctrl_setup(dev);
|
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:
|
out:
|
||||||
ovs_mutex_unlock(&dev->mutex);
|
ovs_mutex_unlock(&dev->mutex);
|
||||||
ovs_mutex_unlock(&dpdk_mutex);
|
ovs_mutex_unlock(&dpdk_mutex);
|
||||||
|
@@ -3480,20 +3480,6 @@
|
|||||||
</column>
|
</column>
|
||||||
</group>
|
</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">
|
<group title="Common Columns">
|
||||||
The overall purpose of these columns is described under <code>Common
|
The overall purpose of these columns is described under <code>Common
|
||||||
Columns</code> at the beginning of this document.
|
Columns</code> at the beginning of this document.
|
||||||
|
Reference in New Issue
Block a user