Message ID | 1427855614-8654-1-git-send-email-cunming.liang@intel.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 95A937E6A; Wed, 1 Apr 2015 04:34:06 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 04A1D7E23 for <dev@dpdk.org>; Wed, 1 Apr 2015 04:34:04 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP; 31 Mar 2015 19:33:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,503,1422950400"; d="scan'208";a="701198789" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga002.fm.intel.com with ESMTP; 31 Mar 2015 19:33:44 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id t312Xfvq012412; Wed, 1 Apr 2015 10:33:41 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id t312Xci8008706; Wed, 1 Apr 2015 10:33:40 +0800 Received: (from cliang18@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t312Xbbx008702; Wed, 1 Apr 2015 10:33:37 +0800 From: Cunming Liang <cunming.liang@intel.com> To: dev@dpdk.org Date: Wed, 1 Apr 2015 10:33:34 +0800 Message-Id: <1427855614-8654-1-git-send-email-cunming.liang@intel.com> X-Mailer: git-send-email 1.7.4.1 Subject: [dpdk-dev] [PATCH] i40e: fix no effect wait_to_complete on link_get X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK <dev.dpdk.org> List-Unsubscribe: <http://dpdk.org/ml/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://dpdk.org/ml/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <http://dpdk.org/ml/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Commit Message
Cunming Liang
April 1, 2015, 2:33 a.m. UTC
API *rte_eth_link_get* expect to call a wait to complete link_update.
That's the difference between *rte_eth_link_get_nowait*.
The patch fixes the issue that i40e link_update ignores the wait_to_complete flag.
The issue impacts those applications calling rte_eth_link_get to get wrong intermediate link status.
Signed-off-by: Cunming Liang <cunming.liang@intel.com>
---
lib/librte_pmd_i40e/i40e_ethdev.c | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
Comments
> -----Original Message----- > From: Liang, Cunming > Sent: Wednesday, April 1, 2015 10:34 AM > To: dev@dpdk.org > Cc: Zhang, Helin; Zhang, XiaonanX; Dumitrescu, Cristian; Liang, Cunming > Subject: [PATCH] i40e: fix no effect wait_to_complete on link_get > > API *rte_eth_link_get* expect to call a wait to complete link_update. > That's the difference between *rte_eth_link_get_nowait*. > The patch fixes the issue that i40e link_update ignores the wait_to_complete > flag. > The issue impacts those applications calling rte_eth_link_get to get wrong > intermediate link status. > > Signed-off-by: Cunming Liang <cunming.liang@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com> > --- > lib/librte_pmd_i40e/i40e_ethdev.c | 29 +++++++++++++++++++---------- > 1 file changed, 19 insertions(+), 10 deletions(-)
Tested-by: Xiaonan zhang<xiaonanx.zhang@intel.com> - OS: Fedora21 3.19.1-201.fc21.x86_64 - GCC: gcc version 4.9.1 20140930 (Red Hat 4.9.1-11) (GCC) - CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz - NIC: Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01) - Default x86_64-native-linuxapp-gcc configuration - Total 1 cases, 1 passed, 0 failed - Test case: Used Qos example to verified ------------------------------------- Traffic shaping for subport. Check that the subport rate is enforced. Set the subport output rate to x% of line rate (x = 10 .. 100). Set the subport TC limits high (100% line rate each), so they do not constitute limitations. Input traffic is 100% line rate. Different tb period and tb credits, therefore different output rate, are tried: 25%, 50%, 75%, 90% and 100% the lineal rate. (The output for subport is Tb credits per period / Tb period.) The traffic is injected change subport value random. Other parameters are same before tests and they don't change here. Cmdline: ./examples/qos_sched/build/qos_sched -c 0xe -n 4 -- --pfc "0,1,2,3,3" --cfg "/root/profile_sched_pipe_1.cfg" The result is this table: +-----------------------+----------------------+ | Subport output rate | Subport output rate | | (% line rate) | (Mpps) | +-----------+-----------+----------+-----------+ | Expected | Actual | Expected | Actual | +-----------+-----------+----------+-----------+ Signed-off-by: Xiaonan Zhang <xiaonanx.zhang@intel.com> -----Original Message----- From: Zhang, Helin Sent: Wednesday, April 01, 2015 10:50 AM To: Liang, Cunming; dev@dpdk.org Cc: Zhang, XiaonanX; Dumitrescu, Cristian Subject: RE: [PATCH] i40e: fix no effect wait_to_complete on link_get > -----Original Message----- > From: Liang, Cunming > Sent: Wednesday, April 1, 2015 10:34 AM > To: dev@dpdk.org > Cc: Zhang, Helin; Zhang, XiaonanX; Dumitrescu, Cristian; Liang, Cunming > Subject: [PATCH] i40e: fix no effect wait_to_complete on link_get > > API *rte_eth_link_get* expect to call a wait to complete link_update. > That's the difference between *rte_eth_link_get_nowait*. > The patch fixes the issue that i40e link_update ignores the wait_to_complete > flag. > The issue impacts those applications calling rte_eth_link_get to get wrong > intermediate link status. > > Signed-off-by: Cunming Liang <cunming.liang@intel.com> Acked-by: Helin Zhang <helin.zhang@intel.com> > --- > lib/librte_pmd_i40e/i40e_ethdev.c | 29 +++++++++++++++++++---------- > 1 file changed, 19 insertions(+), 10 deletions(-)
Hi, 2015-04-01 06:10, Zhang, XiaonanX: > > Tested-by: Xiaonan zhang<xiaonanx.zhang@intel.com> > > - OS: Fedora21 3.19.1-201.fc21.x86_64 > - GCC: gcc version 4.9.1 20140930 (Red Hat 4.9.1-11) (GCC) > - CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz > - NIC: Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01) > - Default x86_64-native-linuxapp-gcc configuration > - Total 1 cases, 1 passed, 0 failed > > - Test case: Used Qos example to verified > ------------------------------------- What is the relation between link status timeout and qos_sched? > Traffic shaping for subport. Check that the subport rate is enforced. > > Set the subport output rate to x% of line rate (x = 10 .. 100). Set the subport TC limits high (100% line rate each), so they do not constitute limitations. Input traffic is 100% line rate. > > Different tb period and tb credits, therefore different output rate, are tried: 25%, 50%, 75%, 90% and 100% the lineal rate. (The output for subport is Tb credits per period / Tb period.) > The traffic is injected change subport value random. > > Other parameters are same before tests and they don't change here. > > Cmdline: ./examples/qos_sched/build/qos_sched -c 0xe -n 4 -- --pfc "0,1,2,3,3" --cfg "/root/profile_sched_pipe_1.cfg" > > The result is this table: > > > +-----------------------+----------------------+ > | Subport output rate | Subport output rate | > | (% line rate) | (Mpps) | > +-----------+-----------+----------+-----------+ > | Expected | Actual | Expected | Actual | > +-----------+-----------+----------+-----------+ This table is empty. > > Signed-off-by: Xiaonan Zhang <xiaonanx.zhang@intel.com> It seems that this test report is not relevant. It will be ignored in the commit message. Sorry
> > API *rte_eth_link_get* expect to call a wait to complete link_update. > > That's the difference between *rte_eth_link_get_nowait*. > > The patch fixes the issue that i40e link_update ignores the wait_to_complete > > flag. > > The issue impacts those applications calling rte_eth_link_get to get wrong > > intermediate link status. > > > > Signed-off-by: Cunming Liang <cunming.liang@intel.com> > Acked-by: Helin Zhang <helin.zhang@intel.com> Applied, thanks
Hi Thomas, > What is the relation between link status timeout and qos_sched? [LCM] Validation team found qos_sched test failure on i40e. The sample depends on link speed to calc the percentage. The root cause comes from that i40e link_get hasn't support wait_to_complete well. I agree with you it should add more description in test report why 'Used QoS example to verified'. > > +-----------------------+----------------------+ > > | Subport output rate | Subport output rate | > > | (% line rate) | (Mpps) | > > +-----------+-----------+----------+-----------+ > > | Expected | Actual | Expected | Actual | > > +-----------+-----------+----------+-----------+ > > This table is empty. [LCM] It's useless, should be omitted I think. Cunming > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > Sent: Thursday, April 02, 2015 3:52 AM > To: Zhang, XiaonanX; Cao, Waterman > Cc: dev@dpdk.org; Zhang, Helin; Liang, Cunming > Subject: Re: [dpdk-dev] [PATCH] i40e: fix no effect wait_to_complete on link_get > > Hi, > > 2015-04-01 06:10, Zhang, XiaonanX: > > > > Tested-by: Xiaonan zhang<xiaonanx.zhang@intel.com> > > > > - OS: Fedora21 3.19.1-201.fc21.x86_64 > > - GCC: gcc version 4.9.1 20140930 (Red Hat 4.9.1-11) (GCC) > > - CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz > > - NIC: Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for > 10GbE SFP+ [8086:1572] (rev 01) > > - Default x86_64-native-linuxapp-gcc configuration > > - Total 1 cases, 1 passed, 0 failed > > > > - Test case: Used Qos example to verified > > ------------------------------------- > > What is the relation between link status timeout and qos_sched? > > > Traffic shaping for subport. Check that the subport rate is enforced. > > > > Set the subport output rate to x% of line rate (x = 10 .. 100). Set the subport TC > limits high (100% line rate each), so they do not constitute limitations. Input traffic > is 100% line rate. > > > > Different tb period and tb credits, therefore different output rate, are tried: > 25%, 50%, 75%, 90% and 100% the lineal rate. (The output for subport is Tb credits > per period / Tb period.) > > The traffic is injected change subport value random. > > > > Other parameters are same before tests and they don't change here. > > > > Cmdline: ./examples/qos_sched/build/qos_sched -c 0xe -n 4 -- --pfc > "0,1,2,3,3" --cfg "/root/profile_sched_pipe_1.cfg" > > > > The result is this table: > > > > > > +-----------------------+----------------------+ > > | Subport output rate | Subport output rate | > > | (% line rate) | (Mpps) | > > +-----------+-----------+----------+-----------+ > > | Expected | Actual | Expected | Actual | > > +-----------+-----------+----------+-----------+ > > This table is empty. > > > > > Signed-off-by: Xiaonan Zhang <xiaonanx.zhang@intel.com> > > It seems that this test report is not relevant. > It will be ignored in the commit message. Sorry
Hi Thomas, First and foremost, We found this problem with using Qos example on Fedora21 platform, there are our reproduce test steps as follows. We used this example found FVL 4*10G NIC link status caused to our Qos example could not boot normally in our dpdk2.0 Release Cycle; In addition, it is performance case about our FVL 4 * 10G NIC, as you know, our performance result currently should not be public; And also that's why our expectation performance data are empty. In a nutshell, We have verified this patch and confirmed the Qos example could run and get performance data after we applied this patch to our code. Thanks. Best Regards, Xiaonan -----Original Message----- From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] Sent: Thursday, April 02, 2015 3:52 AM To: Zhang, XiaonanX; Cao, Waterman Cc: dev@dpdk.org; Zhang, Helin; Liang, Cunming Subject: Re: [dpdk-dev] [PATCH] i40e: fix no effect wait_to_complete on link_get Hi, 2015-04-01 06:10, Zhang, XiaonanX: > > Tested-by: Xiaonan zhang<xiaonanx.zhang@intel.com> > > - OS: Fedora21 3.19.1-201.fc21.x86_64 > - GCC: gcc version 4.9.1 20140930 (Red Hat 4.9.1-11) (GCC) > - CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz > - NIC: Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 01) > - Default x86_64-native-linuxapp-gcc configuration > - Total 1 cases, 1 passed, 0 failed > > - Test case: Used Qos example to verified > ------------------------------------- What is the relation between link status timeout and qos_sched? > Traffic shaping for subport. Check that the subport rate is enforced. > > Set the subport output rate to x% of line rate (x = 10 .. 100). Set the subport TC limits high (100% line rate each), so they do not constitute limitations. Input traffic is 100% line rate. > > Different tb period and tb credits, therefore different output rate, are tried: 25%, 50%, 75%, 90% and 100% the lineal rate. (The output for subport is Tb credits per period / Tb period.) > The traffic is injected change subport value random. > > Other parameters are same before tests and they don't change here. > > Cmdline: ./examples/qos_sched/build/qos_sched -c 0xe -n 4 -- --pfc "0,1,2,3,3" --cfg "/root/profile_sched_pipe_1.cfg" > > The result is this table: > > > +-----------------------+----------------------+ > | Subport output rate | Subport output rate | > | (% line rate) | (Mpps) | > +-----------+-----------+----------+-----------+ > | Expected | Actual | Expected | Actual | > +-----------+-----------+----------+-----------+ This table is empty. > > Signed-off-by: Xiaonan Zhang <xiaonanx.zhang@intel.com> It seems that this test report is not relevant. It will be ignored in the commit message. Sorry
The qos_scheduler has a 32 bit speed value and therefore I doubt it will work work at 40G On Wed, Apr 1, 2015 at 6:44 PM, Liang, Cunming <cunming.liang@intel.com> wrote: > Hi Thomas, > > > What is the relation between link status timeout and qos_sched? > [LCM] Validation team found qos_sched test failure on i40e. The sample > depends on link speed to calc the percentage. > The root cause comes from that i40e link_get hasn't support > wait_to_complete well. > I agree with you it should add more description in test report why 'Used > QoS example to verified'. > > > > +-----------------------+----------------------+ > > > | Subport output rate | Subport output rate | > > > | (% line rate) | (Mpps) | > > > +-----------+-----------+----------+-----------+ > > > | Expected | Actual | Expected | Actual | > > > +-----------+-----------+----------+-----------+ > > > > This table is empty. > [LCM] It's useless, should be omitted I think. > > Cunming > > -----Original Message----- > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > > Sent: Thursday, April 02, 2015 3:52 AM > > To: Zhang, XiaonanX; Cao, Waterman > > Cc: dev@dpdk.org; Zhang, Helin; Liang, Cunming > > Subject: Re: [dpdk-dev] [PATCH] i40e: fix no effect wait_to_complete on > link_get > > > > Hi, > > > > 2015-04-01 06:10, Zhang, XiaonanX: > > > > > > Tested-by: Xiaonan zhang<xiaonanx.zhang@intel.com> > > > > > > - OS: Fedora21 3.19.1-201.fc21.x86_64 > > > - GCC: gcc version 4.9.1 20140930 (Red Hat 4.9.1-11) (GCC) > > > - CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz > > > - NIC: Ethernet controller [0200]: Intel Corporation Ethernet > Controller X710 for > > 10GbE SFP+ [8086:1572] (rev 01) > > > - Default x86_64-native-linuxapp-gcc configuration > > > - Total 1 cases, 1 passed, 0 failed > > > > > > - Test case: Used Qos example to verified > > > ------------------------------------- > > > > What is the relation between link status timeout and qos_sched? > > > > > Traffic shaping for subport. Check that the subport rate is enforced. > > > > > > Set the subport output rate to x% of line rate (x = 10 .. 100). Set > the subport TC > > limits high (100% line rate each), so they do not constitute > limitations. Input traffic > > is 100% line rate. > > > > > > Different tb period and tb credits, therefore different output rate, > are tried: > > 25%, 50%, 75%, 90% and 100% the lineal rate. (The output for subport is > Tb credits > > per period / Tb period.) > > > The traffic is injected change subport value random. > > > > > > Other parameters are same before tests and they don't change here. > > > > > > Cmdline: ./examples/qos_sched/build/qos_sched -c 0xe -n 4 -- --pfc > > "0,1,2,3,3" --cfg "/root/profile_sched_pipe_1.cfg" > > > > > > The result is this table: > > > > > > > > > +-----------------------+----------------------+ > > > | Subport output rate | Subport output rate | > > > | (% line rate) | (Mpps) | > > > +-----------+-----------+----------+-----------+ > > > | Expected | Actual | Expected | Actual | > > > +-----------+-----------+----------+-----------+ > > > > This table is empty. > > > > > > > > Signed-off-by: Xiaonan Zhang <xiaonanx.zhang@intel.com> > > > > It seems that this test report is not relevant. > > It will be ignored in the commit message. Sorry > >
diff --git a/lib/librte_pmd_i40e/i40e_ethdev.c b/lib/librte_pmd_i40e/i40e_ethdev.c index 00d044f..6b8f96e 100644 --- a/lib/librte_pmd_i40e/i40e_ethdev.c +++ b/lib/librte_pmd_i40e/i40e_ethdev.c @@ -1081,28 +1081,37 @@ i40e_dev_set_link_down(__rte_unused struct rte_eth_dev *dev) int i40e_dev_link_update(struct rte_eth_dev *dev, - __rte_unused int wait_to_complete) + int wait_to_complete) { +#define CHECK_INTERVAL 100 /* 100ms */ +#define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */ struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct i40e_link_status link_status; struct rte_eth_link link, old; int status; + unsigned rep_cnt = MAX_REPEAT_TIME; memset(&link, 0, sizeof(link)); memset(&old, 0, sizeof(old)); memset(&link_status, 0, sizeof(link_status)); rte_i40e_dev_atomic_read_link_status(dev, &old); - /* Get link status information from hardware */ - status = i40e_aq_get_link_info(hw, false, &link_status, NULL); - if (status != I40E_SUCCESS) { - link.link_speed = ETH_LINK_SPEED_100; - link.link_duplex = ETH_LINK_FULL_DUPLEX; - PMD_DRV_LOG(ERR, "Failed to get link info"); - goto out; - } + do { + /* Get link status information from hardware */ + status = i40e_aq_get_link_info(hw, false, &link_status, NULL); + if (status != I40E_SUCCESS) { + link.link_speed = ETH_LINK_SPEED_100; + link.link_duplex = ETH_LINK_FULL_DUPLEX; + PMD_DRV_LOG(ERR, "Failed to get link info"); + goto out; + } + + link.link_status = link_status.link_info & I40E_AQ_LINK_UP; + if (!wait_to_complete) + break; - link.link_status = link_status.link_info & I40E_AQ_LINK_UP; + rte_delay_ms(CHECK_INTERVAL); + } while (!link.link_status && rep_cnt--); if (!link.link_status) goto out;