DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>
To: "Yigit, Ferruh" <ferruh.yigit@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v2 3/3] examples/ethtool: add control interface	support to the application
Date: Wed, 17 Feb 2016 19:39:05 +0000	[thread overview]
Message-ID: <2601191342CEEE43887BDE71AB97725836B07BDD@irsmsx105.ger.corp.intel.com> (raw)
In-Reply-To: <1455284735-9606-4-git-send-email-ferruh.yigit@intel.com>

Hi Ferruh,

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Ferruh Yigit
> Sent: Friday, February 12, 2016 1:46 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v2 3/3] examples/ethtool: add control interface support to the application
> 
> Control interface APIs added into the sample application.
> 
> To have the support corresponding kernel module (KCP) needs to be inserted.
> If kernel module is not there, application will run as it is without
> kernel control path support.
> 
> When KCP module inserted, running application creates a virtual Linux
> network interface (dpdk$) per DPDK port. This interface can be used by
> traditional Linux tools.
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
>  doc/guides/sample_app_ug/ethtool.rst | 41 ++++++++++++++++++++++++++++++++++++
>  examples/ethtool/ethtool-app/main.c  | 10 +++++++--
>  2 files changed, 49 insertions(+), 2 deletions(-)
> 
> diff --git a/doc/guides/sample_app_ug/ethtool.rst b/doc/guides/sample_app_ug/ethtool.rst
> index 4d1697e..2174288 100644
> --- a/doc/guides/sample_app_ug/ethtool.rst
> +++ b/doc/guides/sample_app_ug/ethtool.rst
> @@ -131,6 +131,47 @@ application`_. Individual call-back functions handle the detail
>  associated with each command, which make use of the functions
>  defined in the `Ethtool interface`_ to the DPDK functions.

There is ~100% code duplication between
lib/librte_ctrl_if/rte_ethtool.c and examples/ethtool/lib/rte_ethtool.c
That need to be addressed somehow.

> 
> +Control Interface
> +~~~~~~~~~~~~~~~~~
> +
> +If Kernel Control Path (KCP) kernel module (rte_kcp.ko) inserted,
> +virtual interfaces created for each DPDK port for control purposes.
> +
> +Created interfaces are named as dpdk#, like:
> +
> +.. code-block:: console
> +
> +        # ifconfig dpdk0; ifconfig dpdk1
> +        dpdk0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
> +                ether 90:e2:ba:0e:49:b9  txqueuelen 1000  (Ethernet)
> +                RX packets 0  bytes 0 (0.0 B)
> +                RX errors 0  dropped 0  overruns 0  frame 0
> +                TX packets 0  bytes 0 (0.0 B)
> +                TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
> +
> +        dpdk1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
> +                ether 00:1b:21:76:fa:21  txqueuelen 1000  (Ethernet)
> +                RX packets 0  bytes 0 (0.0 B)
> +                RX errors 0  dropped 0  overruns 0  frame 0
> +                TX packets 0  bytes 0 (0.0 B)
> +                TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
> +
> +Regular Linux commands can be issued on interfaces:
> +
> +.. code-block:: console
> +
> +        # ethtool -i dpdk0
> +        driver: rte_ixgbe_pmd
> +        version: RTE 2.3.0-rc0
> +        firmware-version:
> +        expansion-rom-version:
> +        bus-info: 0000:08:00.1
> +        supports-statistics: yes
> +        supports-test: no
> +        supports-eeprom-access: yes
> +        supports-register-dump: yes
> +        supports-priv-flags: no
> +
>  Ethtool interface
>  -----------------
> 
> diff --git a/examples/ethtool/ethtool-app/main.c b/examples/ethtool/ethtool-app/main.c
> index e21abcd..68b13ad 100644
> --- a/examples/ethtool/ethtool-app/main.c
> +++ b/examples/ethtool/ethtool-app/main.c
> @@ -1,7 +1,7 @@
>  /*-
>   *   BSD LICENSE
>   *
> - *   Copyright(c) 2015 Intel Corporation. All rights reserved.
> + *   Copyright(c) 2016 Intel Corporation. All rights reserved.
>   *   All rights reserved.
>   *
>   *   Redistribution and use in source and binary forms, with or without
> @@ -44,6 +44,7 @@
>  #include <rte_memory.h>
>  #include <rte_mempool.h>
>  #include <rte_mbuf.h>
> +#include <rte_ctrl_if.h>
> 
>  #include "ethapp.h"
> 
> @@ -54,7 +55,6 @@
>  #define PKTPOOL_EXTRA_SIZE 512
>  #define PKTPOOL_CACHE 32
> 
> -
>  struct txq_port {
>  	uint16_t cnt_unsent;
>  	struct rte_mbuf *buf_frames[MAX_BURST_LENGTH];
> @@ -254,6 +254,8 @@ static int slave_main(__attribute__((unused)) void *ptr_data)
>  			}
>  			rte_spinlock_unlock(&ptr_port->lock);
>  		} /* end for( idx_port ) */
> +		rte_eth_control_interface_process_msg(
> +				RTE_ETHTOOL_CTRL_IF_PROCESS_MSG, 0);


As I can see, few problems here:
1. Race condition was introduced between slave_main() and ethapp_main() -
both can try to do dev_start()/dev_stop() or other intrusive things over the same port  
simultaneously.
2. Better to avoid calling rte_eth_control_interface_process_msg() from RT code path
     that doing RX/TX packets - it is too slow for that.
3. Right now - if you'll have to postpone any RX/TX on any ports when calling  rte_eth_control_interface_process_msg().
     As it can't distinguish message for what particular port it is going to process.
    Need to address it somehow - either add function that would return current message port_id,
   or introduce a sync callback function and add is a parameter for  rte_eth_control_interface_process_msg() ,
  or probably something else.

Konstantin
  

  reply	other threads:[~2016-02-17 19:39 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1453911849-16562-1-git-send-email-ferruh.yigit@intel.com>
2016-01-27 16:24 ` [dpdk-dev] [PATCH 1/3] kcp: add kernel control path kernel module Ferruh Yigit
2016-01-28  9:49   ` Remy Horton
2016-01-28 13:50     ` Ferruh Yigit
2016-02-28 15:34   ` Avi Kivity
2016-02-28 20:16     ` Ferruh Yigit
2016-02-29  9:43       ` Avi Kivity
2016-02-29 10:43         ` Ferruh Yigit
2016-02-29 10:58           ` Avi Kivity
2016-02-29 11:06             ` Thomas Monjalon
2016-02-29 11:35               ` Ferruh Yigit
2016-02-29 15:05                 ` Ferruh Yigit
2016-02-29 15:19                 ` Panu Matilainen
2016-02-29 15:27                   ` Thomas Monjalon
2016-02-29 16:04                     ` Panu Matilainen
2016-02-29 14:33               ` Jay Rolette
2016-03-01 22:40                 ` Bruce Richardson
2016-03-02  2:02                 ` Stephen Hemminger
2016-03-02  8:27                   ` Panu Matilainen
2016-03-02 10:47                     ` Vincent JARDIN
2016-03-02 10:51                       ` Jim Thompson
2016-03-02 12:03                         ` Vincent JARDIN
2016-03-02 22:51                           ` Jim Thompson
2016-03-02 11:21                       ` Thomas Monjalon
2016-03-02 22:35                         ` Thomas Monjalon
2016-03-03  8:31                           ` Panu Matilainen
2016-03-03 10:05                             ` Ferruh Yigit
2016-03-03 10:11                               ` Thomas Monjalon
2016-03-03 10:51                               ` Panu Matilainen
2016-03-10  0:04                           ` Thomas Monjalon
2016-03-10  6:31                             ` Vincent JARDIN
2016-03-02 22:18                   ` Jay Rolette
2016-03-03 10:11                     ` Ferruh Yigit
2016-03-03 16:59                       ` Stephen Hemminger
2016-03-03 18:18                         ` Ferruh Yigit
2016-02-29 11:27             ` Ferruh Yigit
2016-02-29 11:39               ` Avi Kivity
2016-02-29 14:35                 ` Ferruh Yigit
2016-02-29 20:11   ` Stephen Hemminger
2016-03-01  0:35     ` Ferruh Yigit
2016-01-27 16:24 ` [dpdk-dev] [PATCH 2/3] rte_ctrl_if: add control interface library Ferruh Yigit
2016-01-28 11:14   ` Remy Horton
2016-01-28 13:15     ` Ferruh Yigit
2016-01-28 13:24       ` Jay Rolette
2016-01-28 13:56         ` Ferruh Yigit
2016-01-28 13:57       ` Ananyev, Konstantin
2016-01-28 14:22         ` Yigit, Ferruh
2016-01-27 16:24 ` [dpdk-dev] [PATCH 3/3] examples/ethtool: add control interface support to the application Ferruh Yigit
2016-02-12 13:45 ` [dpdk-dev] [PATCH v2 0/3] Use common Linux tools to control DPDK ports Ferruh Yigit
2016-02-12 13:45   ` [dpdk-dev] [PATCH v2 1/3] kcp: add kernel control path kernel module Ferruh Yigit
2016-02-12 13:45   ` [dpdk-dev] [PATCH v2 2/3] rte_ctrl_if: add control interface library Ferruh Yigit
2016-02-17 19:58     ` Ananyev, Konstantin
2016-02-18 10:43       ` Yigit, Ferruh
2016-02-12 13:45   ` [dpdk-dev] [PATCH v2 3/3] examples/ethtool: add control interface support to the application Ferruh Yigit
2016-02-17 19:39     ` Ananyev, Konstantin [this message]
2016-02-18 10:11       ` Yigit, Ferruh
2016-02-26 14:10   ` [dpdk-dev] [PATCH v3 0/4] Use common Linux tools to control DPDK ports Ferruh Yigit
2016-02-26 14:10     ` [dpdk-dev] [PATCH v3 1/4] lib/librte_ethtool: move librte_ethtool form examples to lib folder Ferruh Yigit
2016-02-26 14:10     ` [dpdk-dev] [PATCH v3 2/4] kcp: add kernel control path kernel module Ferruh Yigit
2016-03-01  1:02       ` Stephen Hemminger
2016-03-01 15:53         ` Ferruh Yigit
2016-02-26 14:10     ` [dpdk-dev] [PATCH v3 3/4] rte_ctrl_if: add control interface library Ferruh Yigit
2016-02-26 14:10     ` [dpdk-dev] [PATCH v3 4/4] examples/ethtool: add control interface support to the application Ferruh Yigit
2016-02-29  9:33     ` [dpdk-dev] [PATCH v3 0/4] Use common Linux tools to control DPDK ports Remy Horton
2016-03-01 15:41     ` [dpdk-dev] [PATCH v4 " Ferruh Yigit
2016-03-01 15:41       ` [dpdk-dev] [PATCH v4 1/4] lib/librte_ethtool: move librte_ethtool form examples to lib folder Ferruh Yigit
2016-03-01 15:41       ` [dpdk-dev] [PATCH v4 2/4] kcp: add kernel control path kernel module Ferruh Yigit
2016-03-01 23:06         ` Stephen Hemminger
2016-03-02 11:05           ` Ferruh Yigit
2016-03-01 23:09         ` Stephen Hemminger
2016-03-01 23:10         ` Stephen Hemminger
2016-03-02 11:06           ` Ferruh Yigit
2016-03-01 15:41       ` [dpdk-dev] [PATCH v4 3/4] rte_ctrl_if: add control interface library Ferruh Yigit
2016-03-01 15:42       ` [dpdk-dev] [PATCH v4 4/4] examples/ethtool: add control interface support to the application Ferruh Yigit
2016-03-09 11:41       ` [dpdk-dev] [PATCH v5 0/4] Use common Linux tools to control DPDK ports Ferruh Yigit
2016-03-09 11:41         ` [dpdk-dev] [PATCH v5 1/4] lib/librte_ethtool: move librte_ethtool form examples to lib folder Ferruh Yigit
2016-03-09 11:41         ` [dpdk-dev] [PATCH v5 2/4] kcp: add kernel control path kernel module Ferruh Yigit
2016-03-09 11:41         ` [dpdk-dev] [PATCH v5 3/4] rte_ctrl_if: add control interface library Ferruh Yigit
2016-03-09 11:41         ` [dpdk-dev] [PATCH v5 4/4] examples/ethtool: add control interface support to the application Ferruh Yigit
2016-03-09 12:23           ` Ananyev, Konstantin
2016-03-14 15:31         ` [dpdk-dev] [PATCH v5 0/4] Use common Linux tools to control DPDK ports Ferruh Yigit
2016-03-14 17:40           ` Jay Rolette
2016-03-15  0:00             ` Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2601191342CEEE43887BDE71AB97725836B07BDD@irsmsx105.ger.corp.intel.com \
    --to=konstantin.ananyev@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).