From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A106EA0C41 for ; Thu, 30 Sep 2021 07:38:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 886E2410EF; Thu, 30 Sep 2021 07:38:45 +0200 (CEST) Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by mails.dpdk.org (Postfix) with ESMTP id 860FE410EC for ; Thu, 30 Sep 2021 07:38:44 +0200 (CEST) Received: by mail-ed1-f41.google.com with SMTP id ba1so17496323edb.4 for ; Wed, 29 Sep 2021 22:38:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=O71DbbzPVvwFsf0GNX91/PYCuO6TO6o2NwHJDW30SzY=; b=jKQQ6PxAXh19Zp+lzRjbtbUUoCLUwBeoRuE5hAwXDtyoX0YKhsvarpqm8b5p8L1kUu 45R/lxOWFF60PI+qk8vVnb3iRgs/hLPTmuFBiYX6bJ0lMnlMdjn0BIq+WfzEpEIAlo3p eX0YNVAiR4lj/+4EtBb7+4ysHuQ/J9KjzWpgbTr4LJI9GyEzZ/8BbabML+oe1Tte7iNn qN9P+b8LkOc4PLE/SLffowcYN2TiXfZyus8eWD0w5307fWXZpVsAaXg+ZVNceQBUcxcn hOT4Rxa/c4pOZB7Nbkq/F3Xpvsr1vlogz/0KYkLdfFQ8i6DLzEMB0TlhXwTliIFzEn81 Spyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=O71DbbzPVvwFsf0GNX91/PYCuO6TO6o2NwHJDW30SzY=; b=m3WFiJQCTd0KS+Fvho6mP2ec2u7dVe17NTdqICkIplBRTNnzGr6wcEUiuspqSFziaO R5CzhtenBYc8aWlY/Y5Jvj+6NkoWCZIygdSh+IrMWhS9hiOcft8NR8iaUuE34VANLwEi w/1RhO7ekoJaUX8e+CEk/QXAKt8PoCKVU9x1r7weXEWt3UWsquNox7xQf4STj4KdVBzw jgUeOAPryXUNZBcz3NpybP/yYsw2/t12afb2FAAnWmS/pLF/WzkqcCL5AnvMqGk/dHIW ujugJHYqGwDCvcGDypYCdU4sammCKevvxDFw68sga7N6H/+UGZdDkklQjjwbnAQka82A rk0w== X-Gm-Message-State: AOAM5333aAs4m4ovrRsTAIVDVsqv//nS/DIGqxWBikgLmx5KmrU11W4s oCQ4Nx/gFzqjm5HmhP9NxH8vd0TWKn8tHgt9bxdKavqTR8Q= X-Google-Smtp-Source: ABdhPJybO/FEDKsBLCxDUyYZebKNtn8KVP7ozuVib9sopyP3bBTLFeVC4KEEi+SaR/ls+hoQf0IWw/pL3TeHCzWLw68= X-Received: by 2002:a17:906:d045:: with SMTP id bo5mr4524830ejb.461.1632980324199; Wed, 29 Sep 2021 22:38:44 -0700 (PDT) MIME-Version: 1.0 References: <1849453.UF46jR8BTF@thomas> In-Reply-To: From: Anna A Date: Wed, 29 Sep 2021 22:38:33 -0700 Message-ID: Subject: Re: Using rte_flow to distribute single flow type among multiple Rx queues using DPDK in Mellanox ConnectX-5 Ex To: Raslan Darawsheh Cc: Wisam Monther , NBU-Contact-Thomas Monjalon , "users@dpdk.org" , Matan Azrad , Slava Ovsiienko Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: users@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK usage discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: users-bounces@dpdk.org Hi Raslan, As a part of rte_flow configuration I did include rss.types = ETH_RSS_IP for action type RTE_FLOW_ACTION_TYPE_RSS. Doesn't that support the spreading in mlx5 pmd? Please correct me if my understanding is different from what you suggested. Thanks Anna On Wed, Sep 29, 2021 at 6:13 PM Raslan Darawsheh wrote: > Hi Anna, > > What you are basically doing is trying to do RSS on eth layer which we > don't support the spreading on it. > > To make it work you can do either adding ip layer to the items to make the > RSS happen on L3 or simply through the rss types of the rss action which > would cause an automatic expansion for the items in mlx5 pmd internally. > > > Kindest regards, > Raslan Darawsheh > ------------------------------ > *From:* Anna A > *Sent:* Thursday, September 30, 2021 3:29:51 AM > *To:* Wisam Monther > *Cc:* NBU-Contact-Thomas Monjalon ; users@dpdk.org < > users@dpdk.org>; Matan Azrad ; Slava Ovsiienko < > viacheslavo@nvidia.com> > *Subject:* Re: Using rte_flow to distribute single flow type among > multiple Rx queues using DPDK in Mellanox ConnectX-5 Ex > > Hi Wisam, > > I added .rxmode.mq_mode = ETH_MQ_RX_RSS to rte_eth_conf before calling the > fn, rte_eth_dev_configure() but still have the packets sent to a single > queue. > > My order of configuration is as follows: > > 1. Enable .rxmode.mq_mode = ETH_MQ_RX_RSS > 2. Initialize port by rte_eth_dev_configure() > 3. Setup multiple Rxqueues for a single port by calling > rte_eth_rx_queue_setup() on each queueid. > 4.setup a single txqueue by rte_eth_tx_queue_setup() > 5. start the device with rte_eth_dev_start() > 6. Configure rte_flow with pattern -> flow create port0 ingress pattern eth > / end / action RSS on multiple queues / end > 7. Add Mac address > 8. Check the port link status > > If I try to configure rte_flow before calling rte_eth_dev_start, I get the > error message "net_mlx5: port 0 is not started when inserting a flow and > rte_flow_create() returns NULL ". Also i enabled debug logging with > "--log-level=*:debug", but don't see any errors for flow validation/ flow > creation . Please let me know if I'm missing something, or need to add any > other configurations? > > Thanks > Anna > > On Wed, Sep 29, 2021 at 3:09 AM Wisam Monther wrote: > > > Hi Anna, > > > > > -----Original Message----- > > > From: Thomas Monjalon > > > Sent: Wednesday, September 29, 2021 12:54 PM > > > To: Anna A > > > Cc: users@dpdk.org; Matan Azrad ; Slava Ovsiienko > > > > > > Subject: Re: Using rte_flow to distribute single flow type among > > multiple Rx > > > queues using DPDK in Mellanox ConnectX-5 Ex > > > > > > 29/09/2021 07:26, Anna A: > > > > Hi, > > > > > > > > I'm trying to use rte_flow_action_type_rss to distribute packets all > > > > of the same flow type among multiple Rx queues on a single port. > > > > Mellanox > > > > ConnectX-5 Ex and DPDK version 20.05 is used for this purpose. It > > > > doesn't seem to work and all the packets are sent only to a single > > queue. > > > > > > Adding mlx5 maintainers Cc. > > > > > > > My queries are : > > > > 1. What am I missing or doing differently? > > > > 2. Should I be doing any other configurations in rte_eth_conf or > > > > rte_eth_rxmode? > > > > Can you please try to add? > > .rxmode.mq_mode = ETH_MQ_RX_RSS, > > in the rte_eth_conf and try again? > > > > > > > > Do you see any error log? > > > For info, you can change log level with --log-level. > > > Experiment options with '--log-level help' in recent DPDK. > > > > > > > My rte_flow configurations: > > > > > > > > struct rte_flow_item pattern[MAX_RTE_FLOW_PATTERN] = {}; > > > > struct rte_flow_action action[MAX_RTE_FLOW_ACTIONS] = {}; > > > > struct rte_flow_attr attr; > > > > struct rte_flow_item_eth eth; > > > > struct rte_flow *flow = NULL; > > > > struct rte_flow_error error; > > > > int ret; > > > > int no_queues =2; > > > > uint16_t queues[2]; > > > > struct rte_flow_action_rss rss; > > > > memset(&error, 0x22, sizeof(error)); > > > > memset(&attr, 0, sizeof(attr)); > > > > attr.egress = 0; > > > > attr.ingress = 1; > > > > > > > > memset(&pattern, 0, sizeof(pattern)); > > > > memset(&action, 0, sizeof(action)); > > > > /* setting the eth to pass all packets */ > > > > pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH; > > > > pattern[0].spec = ð > > > > pattern[1].type = RTE_FLOW_ITEM_TYPE_END; > > > > > > > > rss.types = ETH_RSS_IP; > > > > rss.level = 0; > > > > rss.func = RTE_ETH_HASH_FUNCTION_TOEPLITZ; > > > > rss.key_len =0; > > > > rss.key = NULL; > > > > rss.queue_num = no_queues; > > > > for (int i= 0; i < no_queues; i++){ > > > > queues[i] = i; > > > > } > > > > rss.queue = queues; > > > > action[0].type = RTE_FLOW_ACTION_TYPE_RSS; > > > > action[0].conf = &rss; > > > > > > > > action[1].type = RTE_FLOW_ACTION_TYPE_END; > > > > > > > > ret = rte_flow_validate(portid, &attr, pattern, action, &error); > > > > if (ret < 0) { > > > > printf( "Flow validation failed %s\n", error.message); > > > > return; > > > > } > > > > flow = rte_flow_create(portid, &attr, pattern, action, &error); > > > > > > > > if (flow == NULL) > > > > printf(" Cannot create Flow create"); > > > > > > > > And Rx queues configuration: > > > > for (int j = 0; j < no_queues; j++) { > > > > > > > > int ret = rte_eth_rx_queue_setup(portid, j, nb_rxd, > > > > rte_eth_dev_socket_id(port_id), > > > > NULL,mbuf_pool); > > > > if (ret < 0) { > > > > printf( "rte_eth_rx_queue_setup:err=%d, port=%u", ret, > > > > (unsigned) portid); > > > > exit(1); > > > > } > > > > } > > > > > > > > Thanks > > > > Anna > > > > > > > > > > BRs, > > Wisam Jaddo > > >