tcp-acceleration-service/tas

tas start failed with virtio-net

LanceLiu89 opened this issue · 3 comments

when start tas with multi queue virtio_net, it start failed
[root@localhost tas]# ./tas --ip-addr=192.168.122.123/24 --fp-no-xsumoffload
Warning: NIC does not support all requested RSS hash functions.
virtio_dev_configure(): Unsupported Rx multi queue mode 1
Port0 dev_configure = -22
rte_eth_dev_configure failed
network init failed

looks like the default port_conf->rxmode not change to ETH_MQ_RX_NONE when using virtio_net

but virtio_dev_configure() check failed if it's not ETH_MQ_RX_NONE

static int
virtio_dev_configure(struct rte_eth_dev *dev)
{
......
	const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
	const struct rte_eth_txmode *txmode = &dev->data->dev_conf.txmode;
	struct virtio_hw *hw = dev->data->dev_private;
	uint32_t ether_hdr_len = RTE_ETHER_HDR_LEN + VLAN_TAG_LEN +
		hw->vtnet_hdr_size;
	uint64_t rx_offloads = rxmode->offloads;
	uint64_t tx_offloads = txmode->offloads;
	uint64_t req_features;
	int ret;

	PMD_INIT_LOG(DEBUG, "configure");
	req_features = VIRTIO_PMD_DEFAULT_GUEST_FEATURES;

	if (rxmode->mq_mode != ETH_MQ_RX_NONE) {
		PMD_DRV_LOG(ERR,
			"Unsupported Rx multi queue mode %d",
			rxmode->mq_mode);
		return -EINVAL;
	}

	if (txmode->mq_mode != ETH_MQ_TX_NONE) {
		PMD_DRV_LOG(ERR,
			"Unsupported Tx multi queue mode %d",
			txmode->mq_mode);
		return -EINVAL;
	}
......

BTW, my dpdk is 19.11

commit b9b10ddb4292f2bc5524ae9f427a2795514eff02 (HEAD -> v19.11, origin/main, origin/HEAD, main)
Author: Thomas Monjalon <thomas@monjalon.net>
Date:   Wed Aug 12 11:15:30 2020 +0200

    switch default git branch name to main

    The default git branch of the main DPDK repository has been renamed
    from master to main.

    Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
    Acked-by: Bruce Richardson <bruce.richardson@intel.com>

commit da816fb1ff3435eb6f39e62ee4765930ef0a160e
Author: Thomas Monjalon <thomas@monjalon.net>
Date:   Wed Aug 12 09:49:00 2020 +0200

    maintainers: remove QoS and pipeline repositories

    The git trees dpdk-next-qos and dpdk-next-pipeline were created
    to share the load of patches merging.
    It has been decided in the Technical Board that the load is not big
    enough to justify keeping these repositories.

    The patches for ethdev TM and MTR will be managed in dpdk-next-net.
    The sched and meter libraries will be managed in the main tree.
    The packet framework will be managed in the main tree as well.

    Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
    Acked-by: Bruce Richardson <bruce.richardson@intel.com>

commit 3eecaba90a995ec30b502cded921c8a49e50cffb
Author: Ray Kinsella <mdr@ashroe.eu>
Date:   Wed Aug 12 12:26:02 2020 +0100

    doc: describe process for new ABI versions

    Added a section describing new ABI versions, this provides pointers to
    the relevant amended rules that apply during the abi breakage window.
    Also remove the large note at the head of the ABI policy describing the
    ABI stability process that has taken place over the previous year.

    Signed-off-by: Ray Kinsella <mdr@ashroe.eu>

commit 460cb707911e8209efecd52bd7748648f6754c4c
Author: Adam Dybkowski <adamx.dybkowski@intel.com>
Date:   Mon Jul 27 11:41:13 2020 +0200

    doc: announce renaming in crypto scheduler API

    This patch adds a deprecation notice about upcoming changes
    in public API of the Scheduler PMD.

    Signed-off-by: Adam Dybkowski <adamx.dybkowski@intel.com>
    Acked-by: Fan Zhang <roy.fan.zhang@intel.com>
    Acked-by: Thomas Monjalon <thomas@monjalon.net>
    Acked-by: Akhil Goyal <akhil.goyal@nxp.com>

it is commited in 2019.10.9

commit 13b3137f3b7c8f866947a9b34e06a8aec0d084f7
Author: Dilshod Urazov <dilshod.urazov@oktetlabs.ru>
Date:   Wed Oct 9 13:32:07 2019 +0100

    net/virtio: reject unsupported Rx multi-queue modes

    This driver supports none of DCB, RSS or VMDQ modes, therefore must
    check and return error if configured incorrectly.

    Virtio can distribute Rx packets across multi-queue, but there is
    no controls (algorithm, redirection table, hash function) except
    number of Rx queues and ETH_MQ_RX_NONE is the best fit meaning
    no method is enforced on how to route packets to MQs.

    Fixes: c1f86306a026 ("virtio: add new driver")
    Cc: stable@dpdk.org

    Signed-off-by: Dilshod Urazov <dilshod.urazov@oktetlabs.ru>
    Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
    Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 0a2ed2e50..76bd40a3e 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -2066,6 +2066,13 @@ virtio_dev_configure(struct rte_eth_dev *dev)
        PMD_INIT_LOG(DEBUG, "configure");
        req_features = VIRTIO_PMD_DEFAULT_GUEST_FEATURES;

+       if (rxmode->mq_mode != ETH_MQ_RX_NONE) {
+               PMD_DRV_LOG(ERR,
+                       "Unsupported Rx multi queue mode %d",
+                       rxmode->mq_mode);
+               return -EINVAL;
+       }
+
        if (dev->data->dev_conf.intr_conf.rxq) {
                ret = virtio_init_device(dev, hw->req_guest_features);
                if (ret < 0)

Good catch. As long as auto-scaling is disabled (that currently relies on the RSS reta) ETH_MQ_RX_NONE should be acceptable. So I think my fix would be to add an if that checks if RSS is supported, and if not, proceed with mq_rx_none assuming auto-scaling is disabled on the command line. I'll try to implement a fix hopefully in the next few days. Feel free to submit a pull request if you get to it earlier. As a workaround just hardcoding mq_rx_none should probably work. (just disable auto scaling too on the command line as it won't work)

I tried this before, it actually works with autoscaling disabled via command line + mq_rx_none