From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 78F6BA04DB; Fri, 16 Oct 2020 02:15:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8234E1DA3D; Fri, 16 Oct 2020 02:15:05 +0200 (CEST) Received: from mail-ot1-f65.google.com (mail-ot1-f65.google.com [209.85.210.65]) by dpdk.org (Postfix) with ESMTP id D3A8F1DA3C for ; Fri, 16 Oct 2020 02:15:03 +0200 (CEST) Received: by mail-ot1-f65.google.com with SMTP id e20so860943otj.11 for ; Thu, 15 Oct 2020 17:15:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=tULwdDkhB8uqVwGlrWSHhr0+XfpzwdfT/aY7tYPC3bQ=; b=OUbkx+rWCjrqcf24yQLXgXj40+CpQA/re5wVCL6nTMq1AA9fhtTcOUuGNQWS5bw+tK az7VYPUY+G+/UwKLaNq55y2JRfhgmN28VYUKPCMgezNKllpUwRpOSz37ge5unVcwbN4B JcznQOUBdRHip+1/1OW2Dtht+HWc63sOowT8Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=tULwdDkhB8uqVwGlrWSHhr0+XfpzwdfT/aY7tYPC3bQ=; b=d7UWUDGbGL9sPMK6+bBc+brY4YVfzqlgI2oySWcNpGw8dWL4a+ulR672BJ0My6YgQz r1QTx1zp6lGKnXQt3zAOHzu/Gan/GWTaOIabmVMAx1+tcSVW5Kh/7Ch8wn8/eVsrz6vh L/LTa+iAhWIXM0WChPRd3mZDvVYn31aR2SgZ1VmTYGR9glYTrqHd4pdSj96OGCIHXoKu LhgaQ9QchDRqKzvrldFj2dWcWTD5U7+2ZM8xf8/Ii8ASTmsluQDfO3lNfRqEnDGx1nN4 D4E27dlK2kK+WEOnd/353MtJnsGBqV3FIIKRXfcqIkda9XaZ56Ii3Tam+6iwWRSa2APR /sTg== X-Gm-Message-State: AOAM531kLQ7I554OP8+H8MRI5157id0qc17CLi8RViW/0ASkeE07+pU4 ls34Vg6OkGP9xK+Kz4ueWqrB3PlbyYV2cwFvjNr2oA== X-Google-Smtp-Source: ABdhPJyEkSE5EoNtb3ljKadXefY+IfJP2V72tQ1xJaefyRJ+UBP7lqaSVN/YvnYlWrS2Pe8CkSRCH04ck94UQyHFVr4= X-Received: by 2002:a9d:f67:: with SMTP id 94mr824048ott.154.1602807301725; Thu, 15 Oct 2020 17:15:01 -0700 (PDT) MIME-Version: 1.0 References: <1600955105-53176-2-git-send-email-oulijun@huawei.com> <1602765662-43299-1-git-send-email-oulijun@huawei.com> <1b2b0e11-1458-e2d9-5fde-91db35b8bc73@intel.com> <51676746-ec95-aff2-dc00-b76480ab6cba@huawei.com> <8c543941-e881-aa88-b52a-a70bfe8f6fcf@intel.com> In-Reply-To: From: Ajit Khaparde Date: Thu, 15 Oct 2020 17:14:45 -0700 Message-ID: To: Ferruh Yigit Cc: Ophir Munk , oulijun , "wenzhuo.lu@intel.com" , "beilei.xing@intel.com" , NBU-Contact-Adrien Mazarguil , "dev@dpdk.org" , "linuxarm@huawei.com" , Ori Kam Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v5] app/testpmd: fix the default RSS key configuration X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Thu, Oct 15, 2020 at 4:54 PM Ferruh Yigit wrote: > > On 10/16/2020 12:21 AM, Ophir Munk wrote: > >> From: Ferruh Yigit > >>>>> On 10/15/2020 1:41 PM, Lijun Ou wrote: > >>>>>> When start the testpmd, the pmd driver initializes the RSS > >>>>>> configuration. Generally, the recommended RSS hash key is used as > >>>>>> the default key in the driver. In addition, the default key is > >>>>>> different from the default RSS flow in testpmd without specifying > >>>>>> RSS hash key. So. if you do not specify the RSS key when creating > >>>>>> an RSS rule, the testpmd uses the default key as the default RSS > >>>>>> key of the RSS rule. As a result, you may mistakenly consider that > >>>>>> the RSS key in use is the valid default key of the NIC, actually, > >>>>>> the key and the valid default key of the NIC are two values. > >>>>>> > >>>>>> Consider the follow usage with testpmd: > >>>>>> 1. first, startup testpmd: > >>>>>> testpmd> show port 0 rss-hash key > >>>>>> RSS functions: > >>>>>> all ipv4-frag ipv4-other ipv6-frag ipv6-other ip RSS key: > >>>>>> - > >> 6D5A56DA255B0EC24167253D43A38FB0D0CA2BCBAE7B30B477CB2DA3803 > >> 0F > >>>>>> -20C6A42B73BBEAC01FA > >>>>>> 2. create a rss rule > >>>>>> testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end > >>>>>> testpmd> actions rss \ > >>>>>> types ipv4-udp end queues end / end > >>>>>> > >>>>>> 3. show rss-hash key > >>>>>> testpmd> show port 0 rss-hash key > >>>>>> RSS functions: > >>>>>> all ipv4-udp udp > >>>>>> RSS key: > >>>>>> - > >> 74657374706D6427732064656661756C74205253532068617368206B65792C > >> 206F > >>>>>> -76657272696465 > >>>>>> > >>>>>> In order to solve the above problems, it use the NIC valid default > >>>>>> RSS key instead of the testpmd dummy RSS key in the flow > >>>>>> configuration when the RSS key is not specified in the flow rule. > >>>>>> If the NIC RSS key is invalid, it will use testpmd dummy RSS key as the > >> default key. > >>>>>> > >>>>>> Fixes: ac8d22de2394 ("ethdev: flatten RSS configuration in flow > >>>>>> API") > >>>>>> Cc: stable@dpdk.org > >>>>>> > >>>>>> Signed-off-by: Lijun Ou > >>>>>> Reviewed-by: Phil Yang > >>>>>> --- > >>>>>> V4->V5: > >>>>>> -rewrite the commit log > >>>>>> -add reviewed-by > >>>>> > >>>>> Hi Lijun, > >>>>> > >>>>> There were multiple other comments, it seems they are not addressed > >>>>> but only updated the commit log, can you please check comments to > >> prev versions. > >>>>> > >>>>> Before going into the details, my question was what happens if > >>>>> default key not provided at all? > >>>>> It seems this has been already tried by Ophir [1], later reverted > >>>>> back [2] bringing the initial issue back. > >>>>> > >>>>> According commit, the reason of revert is to support following > >> command: > >>>>> "flow create 0 actions rss queues 0 1 end key_len 40 / end" > >>>>> > >>>>> @Ophir, @Lijun, > >>>>> Can we ignore the 'key_len' if the 'key' is not supported and solve > >>>>> current issue as initially intended ([1])? > >>>>> > >>>> Hi, Ferruh > >>>> I have discussed with Phil Yang about the problem in [1]. I think > >>>> there may be other problems with the idea and there is no better > >>>> solution. and we need to remove key_len definition from rte_rss_conf > >>>> structure. They don't have a plan. And [1] was eventually reverted. > >>>> > >>> > >>> Why ignoring 'key_len' (set it to zero) when there is no 'key' > >>> provided doesn't work? > >>> > >> > >> What do you think [1] + following update, will it work? > >> > >> diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c > >> index ee4f3464fe..e7789c87b3 100644 > >> --- a/lib/librte_ethdev/rte_flow.c > >> +++ b/lib/librte_ethdev/rte_flow.c > >> @@ -535,7 +535,7 @@ rte_flow_conv_action_conf(void *buf, const size_t > >> size, > >> }), > >> size > sizeof(*dst.rss) ? sizeof(*dst.rss) : size); > >> off = sizeof(*dst.rss); > >> - if (src.rss->key_len) { > >> + if (src.rss->key_len && src.rss->key) { > >> off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key)); > >> tmp = sizeof(*src.rss->key) * src.rss->key_len; > >> if (size >= off + tmp) > >> > > > > Ferruh, your suggestion ([1] + update) looks correct. I also verified it on mlx5 PMD. > > Advantage: it's a generic fix for all dpdk applications using rte_flows (not just testpmd). > > It reduces code. > > With this fix the responsibility of handling key==NULL and/or len==0 is moved to the PMDs (which is good). > > > > With regard to Lijun patch - I liked the approach of overriding the default testpmd key with the default PMD key. > > But it only addresses testpmd. More code was added. > > It seems OK to call rte_eth_dev_rss_hash_conf_get() as part of parsing RSS, but it would feel more confident if we could confirm it for all the PMDs (by testing) or at least review the PMDs rss_hash_conf_get() implementations. > > > > Lijun's idea can work. There was a problem in implementation related to the key > size assumption, which can be fixed. > > Even it is fixed, when user gives a rss rule without a key, we are getting key > from device and feeding same key back to device, this is unnecessary I think. > When user didn't provide a key, rss rule shouldn't touch the key at all. +1 But can we add this as expected behavior in the rte_flow document. > > Complication was when user provides key_len without a key, I think both ignoring > or returning error in this case is OK. Let's return an error if key_len is provided without a key.