Hi,
I did all my testing with DPDK 17.11.2 and the following OVS commit (patch
doesn't apply cleanly to master):
cferrite@silpixa00393943:~/ovs$ git show --summary
commit 6b71df2fc06921758798e41833d67d9daf647d19
Author: Kevin Traynor <[email protected]>
Date: Wed Apr 25 12:20:53 2018 +0100
faq: Document DPDK version maintenance.
Before the patch was applied, the following was seen when a VF port is added:
cferrite@silpixa00393943:~$ sudo $OVS_DIR/utilities/ovs-vsctl --timeout 10
add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk
options:dpdk-devargs=0000:07:02.0
ovs-vsctl: Error detected while setting up 'dpdk0': could not add network
device dpdk0 to ofproto (No such device). See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/usr/local/var/log/openvswitch".
The vswitchd log after the VF port is added:
2018-05-25T09:31:16Z|00080|dpif_netdev|INFO|PMD thread on numa_id: 0, core id:
3 created.
2018-05-25T09:31:16Z|00081|dpif_netdev|INFO|There are 1 pmd threads on numa
node 0
2018-05-25T09:31:16Z|00082|dpdk|ERR|i40evf_dev_configure(): VF can't disable HW
CRC Strip
2018-05-25T09:31:16Z|00083|netdev_dpdk|WARN|Interface dpdk0 eth_dev setup error
Invalid argument
2018-05-25T09:31:16Z|00084|netdev_dpdk|ERR|Interface dpdk0(rxq:1 txq:2 lsc
interrupt mode:false) configure error: Invalid argument
2018-05-25T09:31:16Z|00085|dpif_netdev|ERR|Failed to set interface dpdk0 new
configuration
2018-05-25T09:31:16Z|00086|bridge|WARN|could not add network device dpdk0 to
ofproto (No such device)
After the patch is applied there is no error message when the VF port is added:
cferrite@silpixa00393943:~$ sudo $OVS_DIR/utilities/ovs-vsctl --timeout 10
add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk
options:dpdk-devargs=0000:07:02.0
The vswitchd log after the VF port is added:
2018-05-25T10:00:31Z|00081|netdev_dpdk|INFO|Virtual function detected,
HW_CRC_STRIP will be enabled
2018-05-25T10:00:33Z|00082|dpdk|WARN|i40evf_execute_vf_cmd(): No response for 28
2018-05-25T10:00:33Z|00083|dpdk|ERR|i40evf_disable_vlan_strip(): Failed to
execute command of VIRTCHNL_OP_DISABLE_VLAN_STRIPPING
2018-05-25T10:00:33Z|00084|dpdk|ERR|i40evf_config_promisc(): fail to execute
command CONFIG_PROMISCUOUS_MODE
2018-05-25T10:00:33Z|00085|dpdk|ERR|i40evf_config_promisc(): fail to execute
command CONFIG_PROMISCUOUS_MODE
There are errors related to promiscuous mode, but there is a message stating
that CRC Stripping will be enabled so the patch is working for me.
Appctl query on the port:
cferrite@silpixa00393943:~$ sudo $OVS_DIR/utilities/ovs-appctl dpif/show
netdev@ovs-netdev: hit:0 missed:0
br0:
br0 65534/1: (tap)
dpdk0 1/2: (dpdk: configured_rx_queues=1,
configured_rxq_descriptors=2048, configured_tx_queues=2,
configured_txq_descriptors=2048, mtu=1500, requested_rx_queues=1,
requested_rxq_descriptors=2048, requested_tx_queues=2,
requested_txq_descriptors=2048, rx_csum_offload=true)
I have also successfully passed traffic into this VF port and out a regular PF
port as summarised by the below CMDs:
sudo $OVS_DIR/utilities/ovs-vsctl --timeout 10 add-port br0 dpdk0 -- set
Interface dpdk0 type=dpdk options:dpdk-devargs=0000:07:02.0
sudo $OVS_DIR/utilities/ovs-vsctl --timeout 10 add-port br0 dpdk1 -- set
Interface dpdk1 type=dpdk options:dpdk-devargs=0000:07:00.1
sudo $OVS_DIR/utilities/ovs-ofctl del-flows br0
sudo $OVS_DIR/utilities/ovs-ofctl add-flow br0
idle_timeout=0,in_port=1,action=output:2
sudo $OVS_DIR/utilities/ovs-ofctl add-flow br0
idle_timeout=0,in_port=2,action=output:1
The two findings from my testing:
* There are error messages coming from DPDK about promiscuous mode on the port.
Is this something that should be disabled or otherwise considered in the next
revision of the patch?
* The patch doesn't apply cleanly to master. It looks like this is caused by
the following patch:
cferrite@silpixa00393943:~/ovs$ git show 65a87968f4
commit 65a87968f4cfd9cf7a433a3156d98118078f9e4e
Author: Pablo Cascón <[email protected]>
Date: Fri Apr 27 17:40:49 2018 +0100
netdev-dpdk: don't enable scatter for jumbo RX support for nfp
I have one comment about the code below, if this is addressed/resolved I'm
happy to give:
Acked-by: Cian Ferriter <[email protected]>
Tested-by: Cian Ferriter <[email protected]>
Thanks,
Cian
> -----Original Message-----
> From: [email protected] [mailto:ovs-dev-
> [email protected]] On Behalf Of Ian Stokes
> Sent: 03 May 2018 14:25
> To: [email protected]
> Subject: [ovs-dev] [PATCH v1] netdev-dpdk: Enable HW_CRC_STRIP for
> virtual functions.
>
> From: Michal Weglicki <[email protected]>
>
> Virtual functions such as igb_vf and i40e_vf require HW_CRC_STRIP to be
> explicitly enabled before configuration, otherwise device configuration will
> fail.
>
> This commit achieves this by adding NETDEV_RX_HW_CRC_STRIP to
> dpdk_hw_ol_features. When a dpdk device is added, the driver for the
> device is examined, if the device is a virtual function enable HW_CRC_STRIP.
>
> Signed-off-by: Michal Weglicki <[email protected]>
> ---
> lib/netdev-dpdk.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 3306b19..50c7619
> 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -341,6 +341,7 @@ struct ingress_policer {
>
> enum dpdk_hw_ol_features {
> NETDEV_RX_CHECKSUM_OFFLOAD = 1 << 0,
> + NETDEV_RX_HW_CRC_STRIP = 1 << 1,
> };
>
> /*
> @@ -779,6 +780,11 @@ dpdk_eth_dev_queue_setup(struct netdev_dpdk
> *dev, int n_rxq, int n_txq)
>
> conf.rxmode.hw_ip_checksum = (dev->hw_ol_features &
> NETDEV_RX_CHECKSUM_OFFLOAD) != 0;
> +
> + if ((dev->hw_ol_features & NETDEV_RX_HW_CRC_STRIP)) {
> + conf.rxmode.hw_strip_crc = 1;
> + }
> +
It seems that there's an extra set of parenthesis around the above if
statement. Is this intentional?
> /* A device may report more queues than it makes available (this has
> * been observed for Intel xl710, which reserves some of them for
> * SRIOV): rte_eth_*_queue_setup will fail if a queue is not @@ -868,6
> +874,13 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev)
>
> rte_eth_dev_info_get(dev->port_id, &info);
>
> + if (strstr(info.driver_name, "vf") != NULL) {
> + VLOG_INFO("Virtual function detected, HW_CRC_STRIP will be
> enabled");
> + dev->hw_ol_features |= NETDEV_RX_HW_CRC_STRIP;
> + } else {
> + dev->hw_ol_features &= ~NETDEV_RX_HW_CRC_STRIP;
> + }
> +
> if ((info.rx_offload_capa & rx_chksm_offload_capa) !=
> rx_chksm_offload_capa) {
> VLOG_WARN("Rx checksum offload is not supported on port "
> --
> 2.7.5
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev