From: Kevin Traynor Date: Mon, 26 Jun 2017 21:51:50 +0000 (+0100) Subject: netdev-dpdk: Remove Rx checksum reconfigure. X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=d4f5282cf17d6a5f1d080f4c41a9523cbe499fa7;p=ovs.git 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: 1a2bb11817a4 ("netdev-dpdk: Enable Rx checksum offloading feature on DPDK physical ports.") Reported-by: Kevin Traynor Suggested-by: Sugesh Chandran Acked-by: Darrell Ball Tested-by: Sugesh Chandran Signed-off-by: Kevin Traynor Signed-off-by: Ben Pfaff --- diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst index 93248b47f..af01d3e97 100644 --- a/Documentation/howto/dpdk.rst +++ b/Documentation/howto/dpdk.rst @@ -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: diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 5ad924469..5caf91370 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -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); diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index abfe3976b..883ecd875 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -3480,20 +3480,6 @@ - -

- The checksum validation on the incoming packets are performed on NIC - using Rx checksum offload feature. Implemented only for dpdk - physical interfaces. -

- - - Set to false to disble Rx checksum offloading on - dpdkphysical ports. By default, Rx checksum offload is enabled. - -
- The overall purpose of these columns is described under Common Columns at the beginning of this document.